Run a free Next.js SEO audit. Catch App Router canonical errors, missing generateMetadata, imageSrcSet LCP bugs, and AI crawler gaps in minutes.
Run Free Audit →No credit card required · Results in under 2 minutes
Next.js gives developers extraordinary control over rendering, routing, and metadata — but that control cuts both ways. A misconfigured generateMetadata function, a missing priority prop on your hero image, or a robots.ts file that silently blocks AI crawlers can cost you rankings without a single warning in your build output. Generic SEO tools catch maybe half of these issues because they were built for WordPress, not App Router.
seo.yatna.ai crawls your Next.js site the way Google and AI assistants do — following internal links, parsing JSON-LD, checking HTTP headers, and scoring your site across 7 weighted categories. The result is a prioritized list of real issues with fix-ready guidance, not a 40-page PDF you'll ignore.
imageSrcSet missing explicit width/height — next/image without width and height props generates a srcset that forces the browser to re-layout on load, directly hurting your LCP score and Core Web Vitals.
Missing priority prop on above-fold images — Without priority, Next.js lazy-loads your hero image. Google measures LCP from the first paint; a lazy-loaded hero is a guaranteed LCP failure on mobile.
generateMetadata returning generic titles on inner pages — Dynamic routes that fall back to a default title (e.g., "My App") because the database fetch inside generateMetadata isn't awaited correctly. Every inner page looks identical to crawlers.
app/robots.ts not explicitly allowing AI crawlers — Next.js's default robots.ts template allows Googlebot but says nothing about GPTBot, ClaudeBot, or PerplexityBot. These crawlers follow a "deny if not listed" interpretation on many sites.
No app/sitemap.ts — relying on a stale static sitemap — Static sitemap.xml files go stale the moment you publish a new route. A dynamic app/sitemap.ts generates the sitemap at request time from your actual route structure.
output: 'standalone' missing in next.config.ts — Docker deployments without standalone output bundle the entire node_modules into the image, causing bloated containers and missing static file serving in production.
OG image not generated per-post — The default OG image (/public/og-image.png) is shared across all pages. Social shares and AI snippet previews show the same generic image regardless of content.
Missing alternates.canonical in generateMetadata — Without an explicit canonical, Google chooses one for you — often the wrong one when you have query parameters, trailing slashes, or both www and non-www resolving.
JSON-LD schema not in layout.tsx for site-wide Organization schema — Organization schema belongs in the root layout so it appears on every page. Putting it only on the homepage means inner pages have no entity association for Google's Knowledge Graph.
Article schema missing dateModified — Google's rich result requirements for Articles include dateModified. Missing it disqualifies pages from article carousels and Top Stories, even when datePublished is present.
seo.yatna.ai scores your Next.js site across 7 weighted categories:
robots.txt for GPTBot/ClaudeBot, llms.txt presence, schema structured for AI citationwidth/height props, priority on LCP images, format (WebP/AVIF)A typical Next.js App Router site audited on seo.yatna.ai returns results like this:
| Category | Score | Key Finding |
|---|---|---|
| E-E-A-T | 58/100 | No author schema on blog posts |
| Technical SEO | 71/100 | 3 pages missing canonical |
| On-Page SEO | 65/100 | 8 inner pages with duplicate title |
| Schema | 44/100 | Article schema missing dateModified |
| Performance | 62/100 | Hero image missing priority prop |
| AI Readiness | 30/100 | GPTBot blocked in robots.ts |
| Images | 55/100 | 12 images missing explicit dimensions |
| Overall | 60/100 | 17 actionable issues found |
Each finding links to the specific page where the issue was detected and includes a code snippet showing the fix.
Does this audit work with the App Router or only the Pages Router?
Both. seo.yatna.ai crawls the rendered HTML output, so it works regardless of which Next.js router you use. It also parses the <head> output from both generateMetadata and static metadata exports.
Will it catch issues caused by Client Components hiding content from crawlers?
Yes. The crawl follows the same rendering path as Googlebot — it evaluates the server-rendered HTML, not the hydrated DOM. If your content only appears after a useEffect, the audit will flag it as a crawl gap.
How is this different from Lighthouse or PageSpeed Insights? Lighthouse tests a single URL for performance. seo.yatna.ai crawls up to 500 pages (depending on tier), checks every page for schema, canonical, metadata, and AI crawler signals, and produces a site-wide score — not a single-page snapshot.
My site scores 90 on PageSpeed. Why does the SEO audit give me a lower score?
Performance is only 10% of the overall score. A 90 on PageSpeed with missing E-E-A-T signals, no author schema, and GPTBot blocked in robots.ts will still produce a low overall SEO score — because performance alone doesn't determine rankings.
Your App Router site deserves more than a generic crawl. Get a score across all 7 categories — including the AI readiness check that most tools don't run at all.
Audit My Next.js Site — Free →
Related reading:
7 AI agents. 7 audit categories. One score. Free for your first audit.
Run Free Audit →