Single-Page Application SEO: Making an SPA Indexable Without Rewriting It
Most SPA SEO advice starts with a framework migration. Here are the routes that need no rewrite: prerendering, edge rendering, and selective server rendering.
Technical SEO
Articles on hreflang, canonicals, migrations, rendering, Core Web Vitals and schema.
Most SPA SEO advice starts with a framework migration. Here are the routes that need no rewrite: prerendering, edge rendering, and selective server rendering.
Most internal linking audit advice repeats numbers nobody sourced. Here is the process, what the evidence supports, and how to check the fix worked.
Angular defaults to client-side rendering, which its own docs call poor for SEO. How to move routes to SSR or prerendering, and fix metadata that lands late.
Organization schema markup done from Google's own docs — why nothing is required, which subtype to use, the logo rules, and the identifiers that disambiguate.
International SEO strategy from Google's own docs — the URL-structure decision, the ccTLDs Google treats as generic, and four signals it ignores entirely.
Nuxt SEO from inside nuxt.config — universal rendering, route rules per URL, useSeoMeta, and the prerender traps Nuxt's own docs warn about.
What technical SEO actually costs in 2026 — audit fees versus retainers, the five things that move the price, and why the cheapest quote rarely is.
A developer's guide to robots.txt — the syntax and precedence rules that matter, why Disallow is not noindex, and how to control GPTBot and ClaudeBot.
Implementation-first Next.js SEO for the App Router — server components that ship content and JSON-LD in the initial HTML, plus generateMetadata.
A developer's guide to breadcrumb schema — the exact BreadcrumbList JSON-LD to ship, why it still earns rich results, and the mistakes that break it.
Why a default React SPA is invisible to AI crawlers, and the way out — server rendering, per-route metadata in the initial HTML, and the INP cost.
Create rich results with JSON-LD: the eligible types, correct syntax, validating in the Rich Results Test, and the FAQ and HowTo deprecations.
Pagination SEO for engineers: why paginated content needs real crawlable URLs, how infinite scroll hides content from bots, and the hybrid pattern I ship.
Google retired FAQ rich results in May 2026. FAQPage markup no longer earns SERP stars, but it stays extractable for AI answer engines. Here's how to decide.
Rich snippets don't raise rankings directly — they raise click-through. Google's own case-study data shows CTR gains up to 82%, and what really drives them.
Astro SEO from inside the codebase — zero-JS by default, @astrojs/sitemap, canonicals via a layout, content-collection schema and client:* discipline.
rel=canonical consolidates duplicate URLs; noindex removes a page from Google entirely. When to use each — and why never both on the same URL.
A developer's guide to Core Web Vitals: the three metrics and current thresholds, field data vs lab data, and the exact code-level fixes for LCP, INP, and CLS.
"Crawled – currently not indexed" means Google fetched your page and chose to leave it out of the index. What the status means and how to fix it.
What 'alternate page with proper canonical tag' means, when it's harmless, when it's a real indexing problem, and how to fix it on your platform.
JavaScript SEO for engineers — how Google renders JS, the failure modes that hide your content from crawlers, and how to make it crawlable and citable.
Server logs are the only record of what bots actually fetched — parse them with grep and awk to find crawl waste and verify GPTBot gets real HTML.
The sitemap method declares hreflang with xhtml:link entries instead of head tags — the exact syntax, why teams choose it, and the errors to avoid.
Hreflang and canonical tags collide when a translated page canonicalises to another language. Combine them per Google's rules — and fix the conflicts.
Keyword clustering done right groups keywords by shared Google results, not similar words — the SERP-overlap method, step by step, for SEO and AI search.
Learn how to automate SEO tasks with Claude AI. Includes working Python scripts for meta tag generation, JSON-LD schema creation, and Claude Code CLI workflows.
Implementation-first SEO and GEO for people who write the code — render strategy, Core Web Vitals fixes with the diffs, and schema that validates.
What answer engine optimization (AEO) is, how it differs from SEO, and how to get your content cited by ChatGPT, Google AI Overviews and Perplexity.
How programmatic SEO works, real examples from Zapier, Wise, and Nomadlist, when it crosses into spam, and a step-by-step no-code process to get started.
When you actually need a disavow file, the Domain-property blocker most guides miss, the exact format Google accepts, and how to measure recovery.
What llms.txt actually does for AI citation in 2026 — honest evidence review, when to implement, what to list, where it sits in the GEO toolkit.
How headless CMS architectures break traditional SEO crawlers, when SSR/SSG/ISR/CSR each make sense, and the per-template rendering audit pattern.
Hreflang implementation for multilingual SaaS — HTML tags, sitemap entries, bidirectional return links, x-default strategy. 2026 complete guide.
Site migration without losing SEO traffic — pre-launch audit, 1:1 redirect map, schema preservation, 90-day monitoring. 2026 complete methodology.
A complete technical SEO audit methodology — crawl, index, schema, Core Web Vitals, AI crawler access, and the cadence that holds up across engagements.
The 12-phase SEO and GEO audit framework — sequenced phases from technical health through AI citation readiness, delivered as deployed infrastructure.
Choose which categories you allow. Essential cookies are always on because the site won't work without them. You can change this any time from the "Cookie preferences" link in the footer.
Required for the site to function — navigation, form submission, security.
Anonymous usage data via Google Analytics 4 — pages viewed, time on site, traffic source. Used to improve the site.
Cookies that enable ad measurement and remarketing. Off by default; only relevant if Google Ads or similar campaigns are running.
Used to remember preferences like language or display mode across visits.