Skip to main content

Mobile, Rendering & JavaScript SEO

Google uses mobile-first indexing, meaning the mobile version of your page is used for indexing and ranking. JavaScript-based rendering adds complexity because content must be rendered before Google can evaluate it.

Learning Focus

After this lesson you can validate mobile-first indexing readiness, inspect rendered HTML, ensure content parity, choose the right rendering approach, and verify JavaScript link discoverability.

This lesson covers the nine mobile, rendering, and JavaScript SEO areas (leaves 3.6.1–3.6.9): mobile-first indexing readiness, responsive design validation, rendered HTML inspection, content parity checks, client-side rendering review, server-side rendering review, hydration issue detection, lazy-loaded content validation, and JavaScript link discoverability.

Why This Matters

Core Concept
  • With mobile-first indexing, the mobile version of your site determines your rankings. If mobile has less content or slower performance, rankings suffer.
  • JavaScript frameworks (React, Vue, Angular) create additional rendering complexity. Content that renders only on user interaction may not be visible to search engines.
  • Poor JavaScript SEO can make entire sections of your site invisible to search.

Mobile-First Indexing Readiness

Mobile-first indexing means Google primarily uses the mobile version of a page for indexing and ranking. If your site is not mobile-ready, it will underperform in search.

Readiness checklist:

RequirementVerification
Mobile site is crawlable (no robots.txt blocking)GSC URL Inspection (mobile crawl)
Mobile site has equivalent content to desktopContent parity check (see 3.6.4)
Mobile site loads within reasonable timeGSC CWV report (mobile)
Mobile site uses responsive design or dynamic servingResponsive design validation (see 3.6.2)
Mobile site has correct viewport meta tag<meta name="viewport" content="width=device-width, initial-scale=1">
Mobile site text is readable without zoomingGSC Mobile Usability report
Mobile site tap targets are adequately spacedGSC Mobile Usability report

How to check mobile-first indexing status:

  • GSC URL Inspection: the page shows "Google uses mobile version for indexing" or "Google uses desktop version for indexing."
  • If desktop is still used, your mobile version may be incomplete or blocked.

Responsive Design Validation

Responsive design (same HTML, different CSS for different viewports) is Google's recommended configuration.

Responsive design validation:

CheckMethod
Viewport meta tag present<meta name="viewport" content="width=device-width, initial-scale=1">
Content adjusts to viewportResize browser, check layout does not overflow or clip
Font sizes are readableMinimum 16px for body text on mobile
Touch targets have adequate spacingMinimum 48x48dp tap targets
No horizontal scrollingContent should fit within viewport width
Images scale correctlyImages use max-width: 100% or equivalent

Validation tools:

  • Chrome DevTools device emulation.
  • GSC Mobile Usability report (for errors).
  • Lighthouse (mobile audit).

Rendered HTML Inspection

Google renders JavaScript before evaluating page content. The rendered HTML (after JS execution) is what Google uses for indexing and ranking.

How to inspect rendered HTML:

  1. GSC URL Inspection: Click "View Crawled Page" to see the rendered HTML that Googlebot received.
  2. Chrome DevTools: Use the Inspect tool after the page fully loads to see the rendered DOM.
  3. Fetch and Render in GSC: See a screenshot of what Googlebot rendered.

What to check in rendered HTML:

CheckWhy It Matters
All content text is present in rendered HTMLIf content is not in the rendered HTML, it may not be indexed
All internal links are presentLinks generated by JavaScript must appear in the rendered DOM
Meta tags and structured data are renderedJS-generated meta tags must also appear in the rendered HTML
No JavaScript errors in consoleErrors can prevent content from rendering

If content is missing from rendered HTML:

  • Check whether the content requires user interaction (click, scroll, hover) to load.
  • Consider server-side rendering or static generation for critical content.
  • Add the content to the initial HTML rather than injecting it via JavaScript.

Content Parity Checks

Content parity ensures the mobile and desktop versions of a page have the same substantive content.

What to check for parity:

ElementMobileDesktopAction if Different
Main content textSameSameMust be identical
HeadingsSameSameMust be identical
ImagesMay be different sizesMay be largerBoth versions should have equivalent imagery
VideosMay be different playerMay be different playerBoth should have the same video content
Internal linksSameSameMust be identical
Structured dataSameSameMust be identical
Meta tagsSameSameMust be identical

Common parity problems:

ProblemExampleFix
Content hidden on mobileAccordion or tab UI hides important textEnsure text is accessible (use progressive disclosure, not hidden divs)
Content removed on mobileDesktop has sidebar content that mobile removesInclude the content in a collapsible section or below the fold
Images removed on mobileDesktop has infographic that mobile does not displayInclude equivalent image or data

Parity testing: Compare the rendered HTML from GSC for mobile and desktop user agents. All text content should be present in both.

Client-Side Rendering (CSR) Review

Client-side rendering loads a minimal HTML shell, then uses JavaScript to fetch and render content in the browser. SEO implications are significant.

CSR SEO challenges:

ChallengeImpactMitigation
Content not available until JS executesGooglebot may not wait for all JS to executeUse SSR or SSG for critical content
Poor LCP on slow devicesAll rendering happens on the clientOptimize bundle size, lazy load
Crawl budget consumptionGooglebot must render each page (CPU-intensive)Use server-side rendering for indexable pages
Accessibility dependency on JSScreen readers and some crawlers may not process JSEnsure core content is in the initial HTML

CSR SEO requirements:

  • Googlebot must be able to render the page and see all content.
  • Page rendering must complete within Googlebot's timeout (typically a few seconds).
  • All critical content must be available in the initial HTML payload or rendered before Googlebot timeout.
  • Consider using SSR, SSG, or hybrid rendering for indexable pages.

Server-Side Rendering (SSR) Review

Server-side rendering sends fully rendered HTML to the browser, which is then "hydrated" with JavaScript interactivity. SSR is the most SEO-friendly JavaScript rendering approach.

SSR SEO benefits:

BenefitWhy
Content available immediatelyHTML includes rendered content, no JS execution needed
Fast LCPContent is in the initial HTML response
Crawler-friendlyNo rendering dependency — content is visible to any crawler
Works without JavaScriptFalls back to static HTML if JS fails

SSR considerations:

ConsiderationImpact
Server loadServer must generate HTML for every request (or use caching)
Time to First Byte (TTFB)SSR can increase TTFB compared to static files
Caching complexityDynamic SSR responses may require careful caching strategy
Framework supportReact (Next.js), Vue (Nuxt.js), Angular (Angular Universal) support SSR

When to use SSR:

  • Content-heavy pages that must be indexed (guides, product pages, articles).
  • Sites with large amounts of dynamic content that cannot be pre-rendered statically.
  • Pages where fast initial load is critical.

Hydration Issue Detection

Hydration is the process of attaching JavaScript event handlers to server-rendered HTML so the page becomes interactive. Hydration issues can cause content or interactivity problems.

Common hydration issues:

IssueSymptomSEO ImpactFix
Hydration mismatchRendered HTML differs between server and client (re-render causes flicker or content loss)Content may disappear after hydrationEnsure server and client render identical content
Slow hydrationPage loads static HTML but takes time to become interactive (poor INP)Indirect (poor UX, potentially poor engagement metrics)Optimize JavaScript bundle, lazy hydrate non-critical sections
Partial hydrationSome parts of page remain non-interactiveMay not affect SEO directlyImplement progressive hydration
Hydration failureJavaScript error prevents interactivityContent may disappear if re-renderedFix the hydration error, add fallback static content

Hydration testing:

  • Load the page with JavaScript disabled → does the content still appear?
  • Load the page with a slow network → does hydration complete without error?
  • Use Chrome DevTools Performance panel to record hydration time.
  • Check console for hydration errors (React/Next.js show explicit hydration mismatch warnings).

Lazy-Loaded Content Validation

Lazy loading defers loading of below-fold content until the user scrolls near it. This improves initial page load but can cause SEO issues if not implemented correctly.

SEO risks of lazy loading:

RiskImpactMitigation
Googlebot may not scroll far enough to trigger lazy loadingContent below the fold may never be seenUse standard loading="lazy" attribute (supported by modern browsers and Googlebot)
Googlebot may not trigger intersection observer eventsJS-based lazy loading (intersection observers) may not fireEnsure content is available in the HTML source, or use server-side rendered content
Infinite scroll with lazy-loaded itemsGooglebot may not scroll infinitelyImplement pagination with crawlable links as fallback

Lazy loading best practices:

PracticeImplementation
Use native lazy loading<img loading="lazy"> and <iframe loading="lazy">
Include a fallback for deferred contentFor JS-only lazy loading, ensure content is present in HTML source
Use progressive loading (skeleton screens)Show a placeholder that is replaced by the actual content
Test with GSC URL InspectionVerify lazy-loaded content appears in the rendered HTML

JavaScript-generated links must be discoverable by search engines. If links exist only in JavaScript, they may not be followed.

JavaScript link patterns and crawlability:

PatternCrawlabilityRecommendation
Standard <a href="/url"> in rendered HTMLCrawlableBest practice
<a> with onclick but no hrefNot crawlable unless href is presentAlways include href
Programmatic navigation (React Router push)Depends on renderingEnsure links appear in rendered DOM
Links inside click-to-expand UINot crawlable if interaction is requiredAdd links to the initial rendered HTML or ensure crawler can access
Role="button" with JS navigationNot crawlableUse <a href> for navigation
SVG or canvas-based linksNot crawlableUse HTML <a> tags

Testing JS link discoverability:

  1. Render the page in GSC URL Inspection.
  2. Search the rendered HTML for your target URLs.
  3. If an internal link exists in your JavaScript source but not in the rendered HTML, it will not be followed by Google.
  4. Use Screaming Frog with JavaScript rendering enabled to discover JS-generated links.

Workflow

  1. Verify mobile-first indexing: Check GSC URL Inspection for indexing mode.
  2. Check mobile usability: Review GSC Mobile Usability report.
  3. Inspect rendered HTML: Use GSC URL Inspection to confirm content appears in rendered output.
  4. Audit content parity: Compare mobile and desktop rendered HTML.
  5. Review rendering approach: Determine if your site uses CSR, SSR, or SSG.
  6. Test critical pages: Run GSC URL Inspection on top 20 pages to confirm all content is crawlable.
  7. Test lazy-loaded content: Verify lazy-loaded below-fold content appears in rendered HTML.
  8. Audit JS links: Confirm all important internal links appear as <a href> in rendered HTML.

Common Mistakes

warning

Assuming content looks fine in a browser = it is crawlable: Googlebot may not render JavaScript the same way. Always check rendered HTML.

  • Using client-side rendering for all pages: Consider SSR or SSG for content that needs to be indexed. CSR is acceptable for application pages that do not need organic traffic.
  • Ignoring mobile usability errors: Mobile usability issues directly affect rankings under mobile-first indexing.
  • Not testing lazy loading with Googlebot: Lazy loading works well for users but may hide content from crawlers. Test with GSC URL Inspection.
  • Using JS-only links for important navigation: Navigation must be crawlable through HTML <a> elements.

Checklist

  • GSC confirms mobile-first indexing is enabled for the site.
  • Mobile Usability report has no errors.
  • Rendered HTML (from GSC URL Inspection) shows all content for critical pages.
  • Mobile and desktop have equivalent content (content parity).
  • Rendering approach (CSR/SSR/SSG) is documented for each page type.
  • No hydration errors on critical pages.
  • Lazy-loaded content is visible in rendered HTML.
  • All important internal links use <a href> in rendered HTML.
  • JavaScript errors are resolved for critical pages.

What's Next

References