Prompt
Can you help me create a dev-friendly technical SEO audit checklist for a React site?
Latest observation
Absolutely — here’s a dev-friendly technical SEO audit checklist for a React site, written for engineers and useful for audit workflows.
I’ve organized it by priority and included what to check, why it matters, and common React-specific gotchas.
React Technical SEO Audit Checklist
1) Rendering & Indexability
1.1 Confirm pages render meaningful HTML on first load
- Inspect page source / initial HTML response
- Ensure critical content is present in server-rendered HTML or pre-rendered output
- Verify crawlers can access content without executing JS
Why: Search engines can render JS, but SSR/pre-rendering is still safer and faster for discovery/indexing.
React gotchas:
- Client-side only rendering for important landing pages
- Empty
<div id="root"></div>on initial response - Content loaded only after hydration or user interaction
1.2 Verify SSR / SSG / hybrid strategy is correct
- Important SEO pages use SSR or SSG
- Dynamic pages have a clear rendering strategy
- Confirm no accidental CSR-only route regression
Check:
- Next.js / Remix / custom SSR setup
- Build output and route-by-route rendering mode
- Any pages excluded from pre-rendering by mistake
1.3 Ensure no content mismatch between server and client
- Compare server HTML with hydrated DOM
- Check for hydration warnings in console
- Ensure important content/metadata isn’t overwritten after hydration
Why: React hydration mismatches can cause SEO or UX issues and may confuse crawlers.
2) Metadata
2.1 Title tags
- Unique
<title>for every indexable page - Correct length and keyword intent
- No duplicated or missing titles
React gotcha: Titles set only after client-side route changes may not be reliably indexed.
2.2 Meta descriptions
- Unique descriptions for key pages
- Accurate summary of page content
- No missing descriptions on important pages
2.3 Canonical tags
- Every indexable page has a self-referencing canonical
- Alternate versions point to preferred canonical
- Canonicals are absolute URLs
- No conflicting canonical tags
React gotcha: Canonicals must be in server-rendered head for best reliability.
2.4 Robots meta tag
- Verify
index,followor intended directive on each page - No accidental
noindex - No
nofollowon pages meant to pass link equity
2.5 Open Graph / Twitter cards
- OG title, description, image, and URL set correctly
- Twitter card tags present
- Social preview images are valid and accessible
3) Crawlability
3.1 robots.txt
-
robots.txtexists and is reachable - Important routes are not blocked
- JS/CSS assets needed for rendering are not blocked
- XML sitemap is referenced in robots.txt
React gotcha: Blocking JS bundles can prevent Google from rendering the page correctly.
3.2 XML sitemap
- Sitemap exists and is valid XML
- Includes only canonical, indexable URLs
- Updated automatically when content changes
- Submitted in Google Search Console / Bing Webmaster Tools
Check:
- Status codes
- Last modified timestamps
- Only 200, indexable URLs
- No duplicate/non-canonical URLs
3.3 Status codes and redirect chains
- Important URLs return
200 - Old URLs redirect with a single hop where possible
- No redirect chains or loops
- No soft 404s
React gotcha: SPA routing can mask route issues if hosting rewrites are too broad.
3.4 Internal link discoverability
- Important pages are linked from crawlable HTML anchors
- Navigation is not hidden behind JS-only interactions
- Pagination and filters are crawlable where intended
Avoid:
- Links rendered only after hover/click
onClicknavigation without<a href=...>
4) Site Architecture & Routing
4.1 Clean URL structure
- URLs are consistent and readable
- No unnecessary query-string duplication
- Trailing slash policy is consistent
- Lowercase and normalized URLs enforced
4.2 Route handling
- All intended routes resolve correctly
- 404 pages return actual 404 status
- Unknown routes don’t return
200 - Client-side fallback routing doesn’t break crawl signals
React gotcha: Static hosting + SPA fallback often returns 200 for everything unless configured properly.
4.3 Faceted navigation / filters
- Controlled indexation strategy for parameterized URLs
- No crawl traps
- Important filter combinations canonicalized or noindexed as needed
5) Performance & Core Web Vitals
5.1 Largest Contentful Paint (LCP)
- Identify LCP element
- Optimize hero images/fonts/data fetches
- Reduce server response time
- Use image preloading where needed
5.2 Interaction to Next Paint (INP)
- Reduce long tasks
- Split large bundles
- Defer non-critical JS
- Audit expensive event handlers
5.3 Cumulative Layout Shift (CLS)
- Reserve space for images, ads, embeds, and dynamic content
- Avoid layout shifts during hydration
- Use consistent font loading strategy
5.4 JS bundle size and loading
- Check bundle size per route
- Lazy-load non-critical modules
- Tree-shake unused dependencies
- Remove unnecessary polyfills
React gotcha: Heavy client bundles can delay rendering and indexing effectiveness.
6) Structured Data
6.1 Schema markup presence and validity
- Implement relevant schema types
- Validate with Rich Results Test / Schema Validator
- Ensure JSON-LD is rendered in initial HTML if possible
- No malformed JSON-LD
Common types:
- Organization
- WebSite
- BreadcrumbList
- Article
- Product
- FAQPage
- LocalBusiness
6.2 Structured data consistency
- Schema matches visible content
- Breadcrumbs reflect actual hierarchy
- Product/price/availability accurate
- No spammy or misleading markup
7) Content & Semantics
7.1 Heading structure
- One clear H1 per page
- Hierarchical heading order is logical
- Headings reflect content structure
7.2 Semantic HTML
- Use proper elements:
main,nav,article,section,aside,button,a - Avoid div/span-only structure for meaningful content
- Ensure list content uses
<ul>/<ol>
7.3 Images and alt text
- All informative images have descriptive alt text
- Decorative images use empty alt (
alt="") - Image filenames and dimensions are sensible
- Lazy-loading does not block critical images
8) International SEO
8.1 hreflang
- Correct hreflang annotations for localized pages
- Self-referencing hreflang present
- Return tags are consistent across locales
- x-default used where appropriate
React gotcha: hreflang must be fully consistent across all locale versions and preferably server-rendered.
8.2 Locale/country routing
- Locale-based routes are crawlable
- Language switchers use normal links
- Currency/language changes don’t create duplicate indexable variants unintentionally
9) Accessibility as an SEO Support Check
9.1 Keyboard and screen-reader accessibility
- Navigation is usable without JS interactions
- Buttons are buttons, links are links
- ARIA used correctly and minimally
Why: Good semantics help crawlers and improve UX signals.
9.2 Focus and labels
- Form inputs have labels
- Interactive controls are accessible
- Modal dialogs don’t trap crawlers or users unexpectedly
10) Analytics, Monitoring & Diagnostics
10.1 Search Console setup
- Property verified
- Sitemap submitted
- Coverage/indexing issues reviewed
- Core Web Vitals monitored
10.2 Log file / crawl monitoring
- Googlebot is reaching important pages
- Crawl budget isn’t wasted on junk URLs
- Bot requests to JS/CSS aren’t blocked
- Unexpected 404/5xx spikes investigated
10.3 Error monitoring
- Client-side route errors tracked
- 5xx errors monitored
- Regressions alerting in place
- Deploys tested for SEO impact
React-Specific “Must Check” Items
If you only have time for a quick React SEO pass, prioritize these:
- Page HTML contains meaningful content before hydration
- Titles, descriptions, canonicals are server-rendered
- SPA fallback does not return
200for invalid routes - Internal links use crawlable
<a href> - robots.txt does not block JS/CSS needed for rendering
- XML sitemap contains only canonical URLs
- H1/title/canonical are unique per route
- Core Web Vitals are acceptable on key templates
- Structured data is valid and visible in rendered output
- No hydration mismatch affecting content or metadata
Suggested Audit Workflow
Phase 1: Quick crawl
Use:
- Screaming Frog
- Sitebulb
- Chrome DevTools
- Google Search Console
Check:
- titles
- meta descriptions
- canonicals
- status codes
- indexability
- hreflang
- internal linking
- structured data
Phase 2: Rendering validation
Use:
- View-source
- DevTools Elements tab
curl -I- Rich Results Test
- URL Inspection in Search Console
Check:
- SSR vs client-rendered content
- JS blocking issues
- hydration consistency
Phase 3: Performance
Use:
- Lighthouse
- PageSpeed Insights
- WebPageTest
- Chrome Performance panel
Check:
- LCP
- INP
- CLS
- bundle size
- image loading
- render-blocking scripts
Phase 4: Deployment safeguards
- SEO checks in CI
- Snapshot tests for metadata
- Route tests for status codes and canonicals
- Sitemap generation tests
- robots.txt tests
Optional: CI-Friendly Checklist Format
You can turn this into automated checks like:
seo_checks:
- title_unique
- meta_description_present
- canonical_absolute
- robots_noindex_absent
- html_has_h1
- internal_links_use_anchor_tags
- sitemap_valid
- robots_txt_accessible
- structured_data_valid
- status_code_correct
- page_rendered_ssr
- no_hydration_mismatch
If you want, I can also turn this into:
- a Notion-ready checklist,
- a CSV/table format for audits, or
- a dev checklist with automated test ideas for Playwright/Jest.