SEO Audit Hub

Next.js & headless SEO audit

Check that your JavaScript site sends search engines real content in its HTML — not an empty shell.

  • No sign-up to start
  • 140 checks for Headless
  • 500 pages free

Next.js & headless SEO audit: what’s checked

Sites built with Next.js, Nuxt, Gatsby or a headless CMS can render on the server, at build time or only in the browser. When the content only appears after JavaScript runs, crawlers that don’t execute it see an almost empty page.

This audit reads your pages the way those crawlers do, from the HTML your server returns. Choose the headless profile and it adds checks for an empty homepage without JavaScript and framework build files turning up in the crawl, alongside every generic check.

2 Platform-specific Checks that apply only to the platform this site runs on, covering the mistakes that platform makes easy to leave in place.
  • Framework build artifact in crawl

    Build artifacts in the crawl waste budget and can expose internals. Exclude framework asset paths from indexing.

  • Homepage empty without JavaScript

    If the homepage is empty without JavaScript, crawlers that don’t run JS see nothing. Add server-side rendering or pre-rendering.

14 Crawling & indexing Pages have to be crawled and indexed before they can rank at all. These checks cover the files, canonicals and directives that tell search engines what they may fetch and keep.
  • Broken canonical tag

    A canonical tag pointing to a broken or wrong URL can deindex the page. Point it at the correct, reachable preferred URL.

  • Canonical tags chained through another page

    Google does not follow canonical tags from one page to the next -- a chained canonical is treated as a weak hint and it picks its own winner instead, so the consolidation you set up is forfeited. Point every canonical straight at the final URL.

  • Missing canonical tag

    A canonical tag tells search engines which URL is the “real” one when several are similar. Add <link rel="canonical"> to avoid duplicate-content dilution.

  • Missing robots.txt

    robots.txt tells crawlers what they may access. Add one (even an allow-all) and point it at your sitemap.

  • Page blocked by robots.txt

    Googlebot won’t crawl this page, so its content can’t rank — and a noindex on it is never seen. If the page should be found, remove or narrow the Disallow rule shown; if it’s meant to be private, stop linking to it and keep it out of the sitemap. Test the rule in Search Console’s robots.txt report.

  • Page set to noindex

    This page tells search engines not to index it, so it can’t rank. If that’s unintended, remove the noindex directive.

  • Pages buried too deep

    Pages many clicks from the homepage get crawled and ranked less. Flatten your structure and link to deep pages.

  • SEO-unfriendly URLs

    Long, parameter-heavy URLs are harder for users and search engines to parse. Use short, readable, keyword-relevant paths.

  • Scripts or CSS blocked by robots.txt

    Google renders pages with their CSS and JavaScript. Blocked files can make a page look broken or empty to it. Remove the Disallow rules that cover theme, plugin or asset folders; there’s no SEO reason to hide scripts and stylesheets.

  • Sitemap URLs blocked by robots.txt

    The sitemap asks Google to crawl URLs that robots.txt forbids, which Search Console reports as “Submitted URL blocked by robots.txt”. Either take those URLs out of the sitemap or stop blocking them.

  • Soft 404 (server returns 200 for missing URLs)

    Returning HTTP 200 for missing pages makes search engines index empty pages. Serve a real 404 status for URLs that don’t exist.

  • robots.txt doesn’t name a sitemap

    Add a line like “Sitemap: https://example.com/sitemap.xml” to robots.txt. Every crawler reads robots.txt first, so this is how Bing and others find your sitemap without a manual submission.

  • robots.txt malformed

    A malformed robots.txt can accidentally block your whole site. Validate it and confirm it isn’t disallowing important paths.

  • www / apex not canonicalized

    Serving both www and non-www without redirecting splits your ranking signals. Pick one and 301-redirect the other.

10 Titles & meta tags Titles and descriptions are what a searcher sees in the results, and the first thing a search engine reads. These checks make sure each page describes itself once, clearly and uniquely.
  • Duplicate titles

    When pages share a title, search engines can’t tell them apart and may rank the wrong one. Make each title unique to the page’s content.

  • Meta description too long (over 160)

    Descriptions over ~160 characters get truncated in search results. Trim to the key selling point.

  • Meta description too short (under 70)

    Very short descriptions waste the chance to earn the click. Expand to a compelling 120–160 characters.

  • Missing <title>

    The <title> is the clickable headline in search results and the strongest on-page signal. Give every page a unique, descriptive title of 50–60 characters.

  • Missing Open Graph tags

    Open Graph tags control how your page looks when shared on social media. Add og:title, og:description and og:image for attractive link previews.

  • Missing Twitter Card tags

    Twitter Card tags control how links look on X/Twitter. Add twitter:card and related tags for rich previews.

  • Missing meta description

    The meta description is the snippet under your title in search results. A compelling 120–160 character summary improves click-through even though it isn’t a direct ranking factor.

  • Title and <h1> are identical

    The title and the <h1> are two chances to describe the page, not one. Write the title for the search result and the <h1> for the reader who has just arrived.

  • Title may be cut off in search results

    Google shows about 600px of a title — roughly 55–65 characters, depending on the letters — and cuts off the rest. Lead with the words that matter so the visible part still makes sense, or shorten it.

  • Title too short (under 30 chars)

    Very short titles waste your biggest ranking signal. Expand to a descriptive 50–60 characters.

21 Speed & performance Slow pages lose visitors and rank worse on mobile. These checks cover load timings, server response and the page weight behind them.
  • Deep critical request chain

    Long chains of dependent requests delay rendering. Reduce nesting and preload key resources.

    Measured on your homepage with Google PageSpeed Insights.

  • Excessive DOM size

    A very large DOM slows rendering and JavaScript. Simplify page structure and paginate or lazy-load long lists.

  • HTML not compressed

    Uncompressed HTML wastes bandwidth and slows loads. Enable gzip or Brotli compression on your server.

  • Heavy main-thread work

    Too much main-thread work makes pages feel sluggish. Minimize JS, simplify styles, and offload work.

    Measured on your homepage with Google PageSpeed Insights.

  • Heavy third-party scripts

    Third-party scripts (analytics, chat, ads) can dominate load time. Audit and defer or remove non-essential ones.

    Measured on your homepage with Google PageSpeed Insights.

  • High Cumulative Layout Shift (CLS)

    Cumulative Layout Shift measures unexpected movement as the page loads. Set width/height on images and reserve space for ads/embeds.

    Measured on your homepage with Google PageSpeed Insights.

  • High JavaScript bootup time

    Heavy JavaScript execution delays interactivity. Reduce, split, or defer scripts.

    Measured on your homepage with Google PageSpeed Insights.

  • High Total Blocking Time (TBT)

    Total Blocking Time reflects how long the page is unresponsive to input. Break up long JavaScript tasks and defer non-critical scripts.

    Measured on your homepage with Google PageSpeed Insights.

  • Large HTML payload

    Oversized HTML delays first render, especially on mobile. Trim inline data, whitespace and unused markup.

  • Large total page weight

    Heavy pages are slow and costly on mobile data. Compress images, scripts and fonts to cut total weight.

    Measured on your homepage with Google PageSpeed Insights.

  • Legacy HTTP/1.x in use

    HTTP/1.x is slower than HTTP/2/3, which load many resources in parallel. Enable HTTP/2 on your server or CDN.

  • Low Lighthouse Performance score

    A low Lighthouse Performance score signals slow real-world loads. Work through the LCP/CLS/TBT items to improve it.

    Measured on your homepage with Google PageSpeed Insights.

  • No CDN detected

    A CDN serves assets from locations near your visitors, cutting latency. Consider putting static assets behind a CDN.

  • No IPv6 (AAAA) DNS record

    Without an IPv6 (AAAA) record, IPv6-only clients can’t reach you directly. Add AAAA DNS records if your host supports it.

  • No cache headers

    Without cache headers, browsers re-download assets on every visit. Set Cache-Control/Expires on static resources.

  • Render-blocking resources

    CSS/JS in the <head> delays first paint. Defer or async non-critical resources and inline only what’s needed above the fold.

    Measured on your homepage with Google PageSpeed Insights.

  • Slow First Contentful Paint (FCP)

    First Contentful Paint is when the first content appears. Reduce render-blocking CSS/JS and speed up the server to improve it.

    Measured on your homepage with Google PageSpeed Insights.

  • Slow Largest Contentful Paint (LCP)

    Largest Contentful Paint measures how fast the main content appears; slow LCP hurts rankings and UX. Optimize your largest image/text block and server response.

    Measured on your homepage with Google PageSpeed Insights.

  • Slow server response (TTFB)

    A slow Time To First Byte delays everything else. Improve hosting, caching, or database performance.

    Measured on your homepage with Google PageSpeed Insights.

  • Too many script or stylesheet files

    Each script and stylesheet is a file the browser has to fetch, parse and run before the page settles. A page pulling dozens of them is usually carrying a plugin per feature; bundle what belongs together and drop what the page never uses.

  • Web fonts missing font-display:swap

    Without font-display:swap, text can be invisible while web fonts load. Add font-display:swap to your @font-face rules.

    Measured on your homepage with Google PageSpeed Insights.

How it works

  1. 1

    Enter your URL

    Paste your homepage. No account, no install, no verification.

  2. 2

    We crawl your site

    The crawler follows your internal links and runs every check against each page it reaches.

  3. 3

    Get your results

    See your score and issue counts at once. A free account shows every finding, page by page, with how to fix it.

Frequently asked questions

Does the audit run JavaScript?

No — it reads the HTML your server sends, which is exactly what a crawler that doesn’t run JavaScript gets. If your content is there, it’s safe; if it isn’t, the audit tells you.

Google renders JavaScript. Does this still matter?

Google can render it, but later and not always completely, and many other crawlers — including social previews and some search engines — don’t. Server-side or static rendering removes the risk.

Which frameworks does it work with?

Any. It audits the site from outside, so Next.js, Nuxt, Gatsby, Astro, SvelteKit or a custom React app are all the same to it.

Ready to check your site?

It takes a couple of minutes and costs nothing.