Home›Checklists›JavaScript SEO Checklist

Free SEO checklist · 10 sections · 12 checks

JavaScript SEO Checklist

A JavaScript SEO checklist confirms that frameworks like React, Next.js, Vue, and Angular deliver crawlable HTML, real links, correct metadata, proper status codes, and stable rendering for search engines and AI crawlers.

12 Checks9 High priority10 SectionsPDF · Word · Excel Formats
Download checklist

SiteAuditLint checklist library

What this checklist covers

A JavaScript SEO checklist confirms that frameworks like React, Next.js, Vue, and Angular deliver crawlable HTML, real links, correct metadata, proper status codes, and stable rendering for search engines and AI crawlers.

It is organized into 10 sections: Rendering Approach, HTML Content, Links, Metadata, Structured Data, Lazy Loading, Navigation, Status Codes, Hydration and Testing. Each check lists exactly what to verify and a priority, so you can work through the highest impact items first.

For background on the concepts behind these checks, see JavaScript SEO course, JavaScript SEO guide, JavaScript rendering.

Who it is for:

Front-end developerstechnical SEOs

Download the javascript seo checklist

Use the interactive version below, or download it to share with your team, attach to tickets, or work through offline.

JavaScript SEO Checklist

Work through each check

0 of 12 checks complete

Rendering Approach

HTML Content

Metadata

Structured Data

Lazy Loading

Status Codes

Hydration

Testing

Progress is saved in this browser only.

Detailed explanations

Each section below explains what to check, why it matters, the problems you will usually find, how to fix them, and how to confirm the fix.

Rendering Approach

What to check:

  • Check rendering mode. SSR, SSG or hydration strategy documented.

Why it matters: Google renders JavaScript, but rendering is delayed, resource limited, and not guaranteed. Many AI crawlers do not render JavaScript at all. Content, links, and SEO tags that only appear after scripts run are at risk of being missed.

Common problems:

  • Main content injected only on the client
  • Links implemented as buttons or onClick handlers
  • Titles, canonicals, or meta robots changed by JavaScript
  • Single page app routes returning 200 for missing pages

How to fix it: Server render or statically generate critical content and tags, use real anchor links with URLs, and return proper status codes from the server.

How to verify: Compare raw HTML with rendered HTML for each template. Titles, H1s, main content, canonicals, and links should be present in the raw response.

Learn more: JavaScript SEO course, Rendering lesson, JavaScript links lesson, JavaScript SEO guide.

How SiteAuditLint helps: it checks rendering approach across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

HTML Content

What to check:

  • Check raw HTML content. Main content exists in initial HTML.

Why it matters: Google renders JavaScript, but rendering is delayed, resource limited, and not guaranteed. See the earlier section on this topic for common problems.

How to verify: Compare raw HTML with rendered HTML for each template. Titles, H1s, main content, canonicals, and links should be present in the raw response.

How SiteAuditLint helps: it checks html content across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

What to check:

  • Check link markup. Links use <a href> with real URLs.

Why it matters: Internal links distribute authority, define site architecture, and help crawlers discover content. Broken links waste crawl budget and frustrate users, while orphan pages are almost invisible to search engines.

Common problems:

  • Links to deleted pages returning 404
  • Links pointing to redirected URLs instead of final destinations
  • Orphan pages with no internal links
  • Generic anchor text like click here on important links

How to fix it: Fix or remove broken links, update links to point at final URLs, link to orphan pages from relevant hubs, and use descriptive anchor text.

How to verify: Crawl the site and review the broken links, redirecting links, and inlinks reports. Compare sitemap URLs against crawled URLs to find orphans.

Learn more: Internal links lesson, Fix broken internal links, Orphan pages, Internal link analysis.

How SiteAuditLint helps: it checks links across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Metadata

What to check:

  • Check titles in HTML. Title and meta present before JS runs.
  • Check canonicals. Canonical not changed by JS.
  • Check robots directives. No JS-injected noindex conflicts.

Why it matters: Title tags and meta descriptions shape how your page appears in search results and influence click through rate. Titles remain a strong relevance signal.

Common problems:

  • Missing or duplicate titles across templates
  • Titles truncated because they are too long
  • Boilerplate meta descriptions repeated site wide
  • Titles that do not match the search intent of the page

How to fix it: Write unique, descriptive titles with the primary topic near the start and meta descriptions that summarize the page and give a reason to click.

How to verify: Crawl and filter for missing, duplicate, and over length titles and descriptions, then spot check how they render in search results.

Learn more: Titles lesson, Meta descriptions lesson, Duplicate title tags, Missing meta descriptions.

How SiteAuditLint helps: it checks metadata across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Structured Data

What to check:

  • Check schema output. Schema present in rendered HTML.

Why it matters: Structured data helps search engines and AI systems understand entities on the page and can unlock rich results. Invalid or misleading markup is ignored or can trigger manual actions.

Common problems:

  • Syntax errors in JSON-LD
  • Required properties missing for the chosen type
  • Markup describing content not visible on the page
  • Schema removed during a template change

How to fix it: Use JSON-LD, include required and recommended properties, and keep markup consistent with visible content.

How to verify: Validate key templates with the Rich Results Test and Schema Markup Validator, then monitor enhancement reports in Search Console.

Learn more: Schema markup for AI, Invalid schema issue, Missing schema issue.

How SiteAuditLint helps: it checks structured data across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Lazy Loading

What to check:

  • Check lazy-loaded content. Content loads without scroll or interaction.

Why it matters: Google renders JavaScript, but rendering is delayed, resource limited, and not guaranteed. See the earlier section on this topic for common problems.

How to verify: Compare raw HTML with rendered HTML for each template. Titles, H1s, main content, canonicals, and links should be present in the raw response.

How SiteAuditLint helps: it checks lazy loading across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Navigation

What to check:

  • Check JS navigation. Routes have unique crawlable URLs, not hash fragments.

Why it matters: Google renders JavaScript, but rendering is delayed, resource limited, and not guaranteed. See the earlier section on this topic for common problems.

How to verify: Compare raw HTML with rendered HTML for each template. Titles, H1s, main content, canonicals, and links should be present in the raw response.

How SiteAuditLint helps: it checks navigation across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Status Codes

What to check:

  • Check SPA status codes. Missing routes return real 404, not 200.

Why it matters: HTTP status codes tell crawlers whether a URL is live, moved, missing, or broken. A 200 response is required for indexing. Unexpected 4xx and 5xx responses remove pages from search results and waste crawl budget, while soft 404s confuse search engines about which pages hold real content.

Common problems:

  • Internal links pointing to 404 pages after content is deleted
  • Soft 404s, where empty or error pages return 200
  • Intermittent 5xx errors on heavy templates or under load
  • Single page apps returning 200 for routes that do not exist

How to fix it: Restore or redirect removed URLs that still receive links, return a true 404 or 410 for content that is gone, and investigate server logs for the cause of any 5xx responses.

How to verify: Crawl the site and filter by status code. Every URL in the sitemap and main navigation should return 200. Recheck flagged URLs individually with a header checker.

Learn more: Status codes lesson, HTTP status codes and SEO, HTTP 4xx issue, HTTP 5xx issue.

How SiteAuditLint helps: it checks status codes across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Hydration

What to check:

  • Check hydration errors. No content mismatch between server and client.

Why it matters: Google renders JavaScript, but rendering is delayed, resource limited, and not guaranteed. See the earlier section on this topic for common problems.

How to verify: Compare raw HTML with rendered HTML for each template. Titles, H1s, main content, canonicals, and links should be present in the raw response.

How SiteAuditLint helps: it checks hydration across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Testing

What to check:

  • Compare source vs rendered. Diff shows no missing SEO elements.

Why it matters: Robots.txt controls which paths crawlers may request. It is the fastest way to block an entire site by accident. It also governs access for AI crawlers, so it is now part of your AI search visibility strategy as well as your traditional SEO.

Common problems:

  • A staging Disallow: / rule deployed to production
  • CSS and JavaScript blocked, stopping Google from rendering pages
  • Overly broad wildcard patterns blocking important directories
  • Missing or outdated sitemap declaration

How to fix it: Keep robots.txt minimal, block only what you truly need to keep out of crawlers, allow rendering resources, and declare your XML sitemap with an absolute URL.

How to verify: Fetch /robots.txt on production, test a list of key URLs against the live rules for Googlebot and each AI user agent, and confirm the file returns 200.

Learn more: Robots.txt lesson, Robots.txt and AI crawlers guide, Blocked by robots.txt issue, Missing robots.txt issue.

How SiteAuditLint helps: it checks testing across every crawled URL instead of one page at a time and lists exactly which URLs are affected.

Common mistakes

Client side rendering for indexable content

Links built as buttons

Soft 404s in single page apps

Metadata changed after hydration

Not comparing source and rendered HTML

When to run the checklist

  • When choosing a rendering approach
  • Before launching a JavaScript framework site
  • After framework upgrades
  • When rendered pages are missing from the index

How to verify fixes

  1. Save a baselineCrawl the site before making changes so you have a record of every status code, canonical, directive and title.
  2. Fix by priorityStart with High priority checks and issues that affect templates, since one fix there resolves many URLs. See how to prioritize audit findings.
  3. Re-crawl the same scopeUse the same start URL, crawl limit and settings so the results are comparable.
  4. Compare the crawlsConfirm the issue count dropped and that no new problems appeared elsewhere. Audit comparison does this field by field.
  5. Confirm in Search ConsoleUse URL Inspection and the indexing reports to check that Google sees the change. Our indexing tests lesson covers the process.

SiteAuditLint workflow

From manual checklist to automated checks

01CrawlCrawl the whole site, not a sample
02FindSee every affected URL per check
03FixPrioritize by severity and reach
04Re-crawlRun the same scope again
05CompareDiff results against the baseline
06MonitorCatch regressions after each release

Most checks in this list run automatically in a SiteAuditLint crawl. Use audit comparison to diff crawls and scheduled audits to monitor for regressions.