Modules
1. GA4 Architecture
2. GTM Deep Dive
3. Server-Side GTM
4. BigQuery for Marketers
5. Event Taxonomy Design
6. Consent Mode v2
7. Meta CAPI Setup
8. Hubspot Architecture
9. CRM Data Modeling
10. n8n Workflows
11. Make.com Patterns
12. Technical SEO Fundamentals
13. Keyword Research Framework
14. Content Marketing Strategy
15. Marketing Attribution Models
16. Email Marketing Automation
17. Lead Scoring Models
18. Google Ads Campaign Structure
19. Programmatic SEO
20. Conversion Rate Optimization (CRO)
21. Marketing Mix Modeling (MMM)
22. Customer Data Platforms (CDP)
23. UTM Parameters & Campaign Tracking
24. A/B Testing & Statistical Significance
25. MarTech Stack Architecture
26. Zapier Automation Patterns
27. Looker Studio Dashboards
28. Schema Markup & Structured Data
29. Facebook Ads Pixel & Tracking
30. Marketing Analytics & KPIs
31. API Integrations for MarTech
32. Marketing P&L Fundamentals
33. P&L Component Details: Revenue, COGS & Marketing Expense
34. Managing the Marketing P&L
35. Measuring Marketing Effectiveness
36. Measuring Marketing ROI
37. Marketing Financial Planning & Budgeting
38. Improving Response Through Modeling & Analytics
39. Building a Marketing Financials Worksheet
40. What Marketing Automation Needs From Your Data
41. Integrating Financial & Marketing Information
42. Marketing Customer Information Management
43. Marketing Data Acquisition Strategies
44. Data Storage & Retrieval Architecture for Marketing
45. Data Warehouse Infrastructure for Marketing Automation
46. Marketing Data Access & Delivery Methods
47. Organizing Marketing Information for Self-Service
48. Building a Marketing Information Map
49. Using Information for Campaign Targeting
50. Using Information for Customer Segmentation
51. Direct Marketing Response Testing
52. Predictive Modeling for Marketing Campaigns
53. Optimizing Contact Strategy & Frequency
54. Strategic Marketing & Customer Lifecycle Planning
55. Cohort Analysis in Marketing
56. Funnel Analysis & Drop-off Diagnosis
57. Multi-Channel Funnel Reporting
58. BI Tool Comparison: Looker Studio vs Tableau vs Power BI
59. Web Analytics Fundamentals
60. Heatmap & Click Analysis Tools
61. Session Replay Tools
62. GA4 Explorations
63. Data Layer Design Patterns
64. First-Party Cookie Tracking
65. Cross-Domain Tracking
66. E-commerce Tracking in GA4
67. Meta Ads Campaign Structure
68. Programmatic Advertising Basics
69. Real-Time Bidding (RTB)
70. Demand-Side Platforms (DSPs)
71. Retargeting & Remarketing Strategy
72. TikTok Ads Fundamentals
73. LinkedIn Ads B2B Targeting
74. Amazon Ads Fundamentals
75. Google Shopping Ads
76. Ad Fraud Detection
77. Bid Strategy Optimization
78. Creative Testing & Ad Fatigue
79. Salesforce Marketing Cloud Basics
80. HubSpot Workflows Deep Dive
81. Drip Campaign Design Patterns
82. Customer Onboarding Automation
83. Churn Prediction Modeling
84. Win-Back Campaign Design
85. Loyalty Program Design
86. Referral Program Mechanics
87. Net Promoter Score (NPS)
88. Customer Health Scoring
89. Link Building Strategy
90. Local SEO Fundamentals
91. International SEO & Hreflang
92. Core Web Vitals Deep Dive for SEO
93. Featured Snippets & SERP Features
94. Topic Clusters vs. Content Silos
95. Content Gap Analysis
96. SEO Content Briefs
97. AI Search Optimization (LLM SEO)
98. Voice Search Optimization
99. GDPR & CCPA Marketing Compliance
100. The Cookieless Tracking Future
101. Data Clean Rooms
102. Consent Management Platforms (CMPs)
103. First-Party Data Strategy Deep Dive
104. Data Minimization in Marketing
105. Google Privacy Sandbox
106. Identity Resolution Deep Dive
107. Growth Loops vs. Funnels
108. The North Star Metric Framework
109. Pirate Metrics (AARRR)
110. Product-Led Growth (PLG)
111. Viral Coefficient & Referral Loops
112. Building an Experimentation Culture
113. Multi-Armed Bandit Algorithms for Optimization
114. Landing Page Optimization Framework
115. Pricing Page Optimization
116. Onboarding & Activation Metrics
117. MarTech Vendor Evaluation
118. Marketing Ops Team Structure
119. Campaign Management Workflow
120. Creative Asset Management (DAM)
121. Marketing Project Management
122. Agency vs In-House MarTech
123. The MarTech RFP Process
124. MarTech Stack ROI Audit
125. Email Deliverability Deep Dive
126. Email List Hygiene
127. Transactional vs. Marketing Email
128. Subject Line Optimization
129. Email Platform Comparison
130. SMS Marketing Strategy
131. Push Notification Strategy
132. Omnichannel Messaging Orchestration
133. Dunning Management for Failed Payments
134. Subscription Churn Analytics
135. XML Sitemap Optimization
136. Canonical Tags Deep Dive
137. Pagination SEO
138. JavaScript SEO & Rendering
139. SEO for Single-Page Applications
140. Site Migration SEO Checklist
141. Redirect Management & 404s
142. Crawl Budget Optimization
143. Log File Analysis for SEO
144. E-E-A-T & YMYL Content
145. GA4 vs. Adobe Analytics
146. BigQuery Cost Optimization
147. Looker Studio Calculated Fields Cookbook
148. Attribution Window Selection
149. View-Through vs. Click-Through Attribution
150. Geo-Lift Incrementality Testing
151. Marketing Mix Modeling Tools Comparison
152. Marketing Dashboard Best Practices
153. Executive Marketing Reporting
154. Marketing Data QA Processes
155. Lead Routing Rules
156. Lead-to-Opportunity Tracking
157. Sales & Marketing Alignment (SLA)
158. Account-Based Marketing (ABM) Strategy
159. Intent Data Providers
160. Sales Enablement Content
161. CRM Data Deduplication
162. Pipeline Velocity Metrics
163. RevOps Metrics Framework
164. Forecasting & Pipeline Coverage
165. Performance Max Deep Dive
166. YouTube Ads Strategy
167. Podcast Advertising
168. Connected TV (CTV) Advertising
169. Out-of-Home (OOH) Advertising Attribution
170. Affiliate Marketing Programs
171. Influencer Marketing Measurement
172. Native Advertising
173. Display Ads Creative Specs & Best Practices
174. Audio Ads & Spotify Ad Strategy
175. Brand Tracking & Awareness Measurement
176. Content Performance Scoring
177. Video Marketing Strategy
178. Podcast Marketing Strategy
179. User-Generated Content (UGC) Strategy
180. Community-Led Growth
181. Activation vs. Retention Tradeoffs
182. Expansion Revenue Strategy
183. Upsell & Cross-Sell Playbooks
184. Usage-Based Pricing Models
185. Cart Abandonment Recovery
186. Post-Purchase Marketing
187. Subscription Box Marketing
188. Marketplace Marketing: Amazon & Etsy
189. B2B E-commerce Marketing
190. CAN-SPAM Compliance
191. TCPA & SMS Marketing Compliance
192. Cookie Consent Banner UX
193. COPPA & Children's Privacy in Marketing
194. WCAG Accessibility for Marketing Sites
195. Segment vs. mParticle vs. RudderStack
196. Reverse ETL Deep Dive
197. Zapier vs. Workato vs. Tray.io
198. Marketing Data Governance Framework
199. Data Contracts for Marketing Teams
200. Braze vs. Iterable vs. Customer.io
201. Klaviyo Deep Dive
202. Marketo Deep Dive
203. Pardot (Salesforce Marketing Cloud Account Engagement) Deep Dive
204. MarTech Contract Negotiation
205. Localization Strategy for Marketing
206. Multi-Currency E-commerce Marketing
207. GDPR vs. Global Privacy Laws
208. Data Processing Agreements (DPAs)
209. Marketing Calendar Planning
210. Crisis Communication in Marketing
211. Marketing During a Rebrand
212. Freemium Conversion Optimization
213. KPI Metric Trees
214. Weekly Marketing Reporting Cadence
215. Search Ads 360 Basics
216. Microsoft Ads (Bing) Strategy
217. Pinterest Ads Strategy
218. Snapchat Ads Strategy
219. Reddit Ads Strategy
220. B2B Intent-Based Advertising
221. Marketing Attribution Vendor Comparison
222. Customer Journey Mapping
223. Voice of Customer (VoC) Programs
224. Competitive Intelligence for Marketing
Share Guide
MarTechQuick
Advanced

SEO for Single-Page Applications

11 min read

Learn
Quick Reading
Estimated 11 mins
Prereq
Advanced
Requires advanced math/coding
Interactive
Static Playbook
Static guide & reference tables

The SPA promise and the SEO problem it creates

A single-page application (SPA) loads one HTML shell and then handles all subsequent navigation client-side — no full page reloads, instant perceived transitions, state preserved across routes. That's a genuine UX win. The SEO cost is that, by default, every route is the same document with JavaScript swapping content in and out, which means the raw HTML response is nearly identical for /products/shoes and /about unless real engineering effort goes into making each route distinguishable to something that isn't executing JavaScript.

Routing: client-side router vs. real URLs

Frameworks like React Router or Vue Router intercept link clicks and update the URL via the History API without a server round-trip. That's fine for navigation within a loaded session, but it creates a hard requirement: the server must still return a valid, meaningful response if someone (or something) requests /products/shoes directly, cold, with no prior JS state loaded. A common and damaging misconfiguration is a server that returns the same generic index.html with a 200 status for every path — technically 'working' for users who navigate from the homepage, but indistinguishable from a 404 for a crawler or a shared link hitting that URL directly.

server-fallback-config.txt
text
# Common SPA server config — serves index.html for unmatched routes
# This is necessary for client-side routing to work on direct load,
# but it means the SERVER can't distinguish a real route from a typo
# unless the app itself resolves the route and sets correct status codes.

location / {
  try_files $uri /index.html;
}

A universal 200 status hides real 404s from crawlers

If every URL under a SPA returns HTTP 200 regardless of whether a matching route exists, crawlers can't tell a valid product page from a mistyped URL. The app itself needs to detect unmatched routes client-side and either redirect to a real 404 page, or — better — have the server check route validity and return a true 404 status before falling back to the SPA shell.

Meta tags need to change per route, not just content

Title tags, meta descriptions, canonical tags, and Open Graph tags all live in <head>, which a traditional SPA renders once and rarely touches again. Updating only the visible body content on navigation while leaving the original <head> in place means every route shares one title and one meta description — a serious problem both for ranking relevance and for how links preview when shared. Libraries like React Helmet (or framework-native solutions in Next.js, Nuxt, etc.) exist specifically to let each route own its document head, but this has to be deliberately wired in; it doesn't happen automatically just because the content changes.

What breaks by default in a pure client-rendered SPA

ElementDefault SPA behaviorFix required
Page title / meta descriptionStatic, shared across all routesPer-route head management (React Helmet, framework head API)
Direct URL loadMay return generic 200 shell with no content yet renderedServer-side or static rendering for first paint
Invalid routeOften returns 200 with the same fallback shellClient or server-side 404 detection and correct status
Social share previewsGeneric or missing OG tagsServer-rendered OG tags per route
Initial content visibilityEmpty until JS executes and fetches dataPre-render or SSR critical above-the-fold content

Prerendering: render once, serve to crawlers

Prerendering runs the SPA through a headless browser at build time (or on a schedule) and saves the resulting static HTML for each known route. That static snapshot gets served for routes that don't change often — blog-style content, marketing pages, product listings — while the app still behaves as a full SPA for interactive sessions. It's cheap to operate since the rendering work happens once per deploy, not per request, but it's a poor fit for content that's highly dynamic or personalized per visitor, since the snapshot goes stale between builds.

Dynamic rendering: render per-request, but only for crawlers

Dynamic rendering detects the requesting user agent and serves a server-rendered (or headless-browser-rendered) HTML snapshot to known crawlers, while serving the normal client-rendered JS bundle to regular browsers. Google has described this as an acceptable interim workaround for JS-heavy sites that can't yet justify a full SSR migration, though it adds real infrastructure (a rendering service, user-agent detection logic) and it's explicitly a stopgap — it doesn't help other crawlers (Bing, social bots) that aren't on the detection allowlist, and it risks a cloaking-adjacent setup if the two versions diverge in substance rather than just rendering method.

The durable fix is framework-level SSR/SSG, not a crawler workaround

Prerendering and dynamic rendering are legitimate tools, but most teams are better served long-term by migrating indexable routes to a framework that supports server-side rendering or static generation natively (Next.js, Nuxt, SvelteKit), so every client — crawler or human — gets the same real HTML on first load.

What's next

Rendering strategy matters most when content is stable. The moment a site moves platforms, domains, or URL structures, rendering is just one of many systems that can quietly break — a full migration needs its own checklist.

Next: Site Migration SEO Checklist →

I build these systems professionally.

Whether it's a RAG pipeline, analytics migration, or AI workflow — let's talk.

Need custom AI or MarTech setup? Let's build together.