Free Next.js SEO Audit
in 8 seconds.
Paste any Next.js URL. Get 70+ ranking signals scored — schema, Core Web Vitals, mobile-first, AEO (ChatGPT & Perplexity visibility). AI Coach generates the exact fix. No signup. No credit card.
Or try a sample — audit vercel.com
Next.js gives you the strongest SEO foundation of any React framework — full server-side rendering, an Image component that handles WebP and lazy loading automatically, file-based metadata via the Metadata API or generateMetadata, and built-in robots.ts + sitemap.ts. Most Next.js SEO failures come from edge cases: client-side data fetching that leaves an empty shell to crawlers, generateStaticParams missing for dynamic routes, missing JSON-LD structured data, or App Router metadata accidentally returning undefined for some paths. Our audit reconciles static HTML with the rendered DOM — so we catch SPAs that render but don't pre-render correctly, even when the user-facing page looks fine.
The 5 most common SEO issues
on Next.js apps.
Our audit is tuned to spot the patterns that show up over and over on Next.jssites. Here's what to look for — and how to fix each one.
Client Components fetching above-the-fold content
When critical content is fetched inside a 'use client' component with useEffect, Google's first-pass crawler sees an empty <div> — and even the rendering pass may time out before the API resolves. Your H1 disappears from the SERP snippet.
Fix: Move the fetch into a Server Component (no 'use client') so the data is server-rendered. If the component must be interactive, pass the data as props from a server parent.
Missing generateMetadata for dynamic routes
Routes like /blog/[slug] that don't export generateMetadata fall back to the layout's static metadata — every blog post ends up with the same <title>, breaking ranking for individual posts.
Fix: Export generateMetadata(props) from the page; return a Metadata object built from your data fetch. The audit catches when two URLs share the same title or description.
JSON-LD structured data not in the metadata pipeline
The new Metadata API has no first-class slot for JSON-LD. Developers often skip it entirely or inject it client-side, where Google's crawler may not see it.
Fix: Render a JSON-LD script tag inside a Server Component (in the layout for site-wide schema, in the page for per-page schema). Stays server-rendered, crawlers see it immediately.
robots.ts allowing AI crawlers but missing Google-Extended
Most Next.js robots.ts files set user-agent: * with allow: /. They miss explicit rules for GPTBot, PerplexityBot, ClaudeBot, Google-Extended, CCBot, and Applebot-Extended — which are now major AEO signals.
Fix: Export an array of rules covering each AI crawler. Our audit's AEO category catches missing entries and flags llms.txt as another best-practice signal.
Image component used incorrectly hurting LCP
next/image needs explicit width + height to avoid CLS, but if priority isn't set on the LCP image, Next.js lazy-loads it — pushing LCP past 2.5s on mobile.
Fix: Add priority on the hero image. For below-the-fold images, default lazy loading is correct. Our PSI category isolates which image is the LCP candidate.
When you outgrow the free tier.
If you're a Next.js developer or agency, Pro Yearly's audit history dashboard catches regressions per deploy — every audit URL is timestamped, so when you ship a change that drops your score 8 points you see it in the dashboard within a week. The AI Coach generates the exact JSON-LD blocks, generateMetadata snippets, and robots.ts entries to drop into your codebase — no context-switching to Stack Overflow. Multi-site dashboards (Pro Yearly) let agencies monitor 20+ client Next.js sites in one view.
Next.js SEO — answered.
Long-tail questions we hear from Next.js site owners.
- Does this audit work on Next.js sites using App Router?
- Yes — we test against App Router primarily, including Server Components, generateMetadata, dynamic routes via generateStaticParams, and Edge runtime. Both App Router and Pages Router are fully supported; the audit reads the rendered HTML output regardless of which router produced it.
- Why isn't Google indexing my Next.js Server Components correctly?
- Usually one of three things: (1) the page is on the noindex list in your metadata; (2) Vercel's Edge runtime is returning a different response to the Googlebot user-agent than to a browser (check your middleware); (3) the page returns 200 but with an empty body because data fetching is happening client-side. Our audit's JS-render reconciliation catches (3) by comparing static HTML to the rendered DOM.
- How do I add JSON-LD structured data in Next.js App Router?
- Render a JSON-LD script tag inside a Server Component — either in your root layout for site-wide schema (Organization, WebSite) or in the page itself for per-page schema (Article, Product, BreadcrumbList). Our Schema Generator outputs ready-to-paste JSON-LD; embed it inside a script tag in the Server Component's return value.
- What's the best Next.js metadata setup for SEO?
- Layout-level metadata for site-wide defaults (title template, description, OG, robots), then generateMetadata on each page for per-page overrides. metadataBase set to your production URL so OG image paths resolve. Alternates with hreflang for international sites. Our audit catches missing alternates, duplicate titles, and metadata that errors during prerender.
- Does the audit handle Next.js Edge runtime and Middleware?
- Yes — we crawl the final rendered URL after middleware redirects + rewrites have resolved. If middleware is gating content behind auth or A/B testing, the audit sees whatever public response is served (the one Googlebot sees). If you want to audit a non-public path, run the audit against a public preview URL.
- Can I check Core Web Vitals on a Vercel-hosted Next.js site?
- Yes — we use Google's PSI API and CrUX field data, which is the same data Vercel Speed Insights pulls. Our audit just packages it next to the on-page + schema + AEO checks so you see everything in one report. Generally Vercel-hosted Next.js sites have excellent baseline LCP/INP if next/image and dynamic imports are used correctly.
Audit your Next.js site
right now.
Free forever for any URL. 8-second audit. AI Coach generates the fix.