seo.yatna.ai
Free SEO Audit Tool

Next.js SEO Checker — Audit Your App Router Site for Every SEO Issue

Check your Next.js site for App Router SEO issues: generateMetadata, imageSrcSet LCP bugs, AI crawler gaps, and schema errors. Free audit tool.

Run Free Audit

No credit card required · Results in under 2 minutes

Built for App Router. Understands generateMetadata, next/image, and app/robots.ts. Find every SEO issue in your Next.js site — including the ones that only show up in production.

Generic SEO tools were not built for Next.js. They crawl HTML output without understanding how App Router generates metadata, how next/image affects Core Web Vitals, or why a robots.ts file that passes your linter can silently block every AI crawler on the web. seo.yatna.ai is designed to catch the framework-specific issues that a Screaming Frog crawl misses entirely.

Audit My Next.js Site — Free →


What We Specifically Check in Next.js Sites

generateMetadata vs Static Metadata Correctness

Dynamic routes that use generateMetadata must await all async data fetches before returning the metadata object. A common failure mode: the database call inside generateMetadata isn't awaited, the function returns before the data resolves, and every page in a collection shares the same fallback title. The audit catches this pattern by comparing titles across multiple pages in the same route segment.

next/image imageSrcSet LCP Bug — Explicit Width and Height

next/image without explicit width and height props generates a srcset that forces the browser to perform a layout pass when the image loads. This causes a measurable LCP degradation of 0.8 seconds or more on mobile — enough to shift a passing Core Web Vitals score into failing. The audit checks every image element for explicit dimensions and flags the specific components that need fixing.

priority Prop on Above-Fold Images

Without priority, Next.js lazy-loads every image by default. The browser discovers your hero image after parsing the rest of the DOM, then fetches it — which means your LCP candidate loads last. Google measures LCP from the first paint; a lazy-loaded hero is a guaranteed LCP failure on mobile even if the image itself is fully optimized. The audit identifies which images are above the fold and checks whether priority is set.

app/robots.ts AI Crawler Configuration

The default app/robots.ts generated by create-next-app explicitly lists Googlebot and then sets a catch-all disallow: [] for the * user-agent. Many AI crawlers — including GPTBot, ClaudeBot, and PerplexityBot — interpret an unlisted user-agent as denied access on sites with any disallow rule. The audit checks your rendered /robots.txt for explicit Allow directives covering each major AI crawler.

app/sitemap.ts Dynamic Sitemap Generation

A static sitemap.xml in /public goes stale the moment you publish, delete, or rename a route. A dynamic app/sitemap.ts generates the sitemap at request time from your actual route structure, ensuring that new pages are indexed immediately and removed pages don't linger in Google's crawl queue. The audit checks whether your sitemap is static or dynamic and whether it covers all crawled pages.

alternates.canonical in generateMetadata

Without an explicit canonical in your generateMetadata return, Next.js does not inject a canonical tag. Google then selects a canonical from the set of URLs it has seen for the same content — often choosing the wrong one when query parameters, trailing slashes, or both www and non-www variants resolve correctly. The audit checks every page for a canonical tag and flags pages where it is missing or where it differs from the crawled URL.

Organization Schema in Root layout.tsx

Organization schema belongs in the root layout so it is present on every page, establishing your site's entity identity for Google's Knowledge Graph regardless of which page a user or crawler lands on first. Placing it only on the homepage means inner pages have no entity association — reducing the chance that Google connects your content to your brand in AI-powered answers. The audit checks whether your Organization schema appears globally or only on select pages.

Article Schema with Named Author on Blog Posts

Google's quality rater guidelines treat named, credentialed authors as a primary E-E-A-T signal. Article schema with author.sameAs pointing to a LinkedIn profile, Google Scholar page, or authoritative biography tells Google — and AI citation systems — who wrote the content and why they are credible. The audit checks every blog post for Article schema and validates that author.name, author.sameAs, datePublished, and dateModified are all present.


Framework-Specific Insight

Next.js App Router has changed how meta tags, sitemaps, and robots.txt are generated. The old Pages Router patterns — getStaticProps for metadata, next-sitemap for sitemaps, a static public/robots.txt — still work, but they don't take advantage of the App Router's server-first model and they leave specific gaps that affect rankings.

Our audit understands both routing systems. It evaluates your metadata output against the App Router API when generateMetadata is detected, checks for Pages Router anti-patterns when _app.js or getStaticProps is present, and flags issues specific to your rendering mode — whether you're running fully static (SSG), server-rendered (SSR), or hybrid (ISR).


Common Findings in Next.js Sites

CRITICAL — imageSrcSet missing width/height on hero image Severity: Critical. Impact: LCP degradation of 0.8s or more. A next/image component without explicit width and height props causes the browser to recalculate layout when the image loads, directly hurting your Core Web Vitals score. Fix: add explicit pixel dimensions to every <Image> component used above the fold.

HIGH — No app/robots.ts AI crawler configuration Severity: High. Impact: GPTBot, ClaudeBot, and PerplexityBot may be blocked by default. The standard robots.ts template explicitly names Googlebot but uses a catch-all * rule that some AI crawlers interpret as a deny. Fix: add explicit Allow: / rules for each major AI crawler user-agent.

HIGH — generateMetadata returning same title on all collection pages Severity: High. Impact: duplicate title tags across your entire blog, product catalog, or documentation section. Google may treat these pages as duplicates and consolidate them into a single indexed URL — often the one you least want. Fix: ensure generateMetadata awaits all data fetches before returning and that each page returns a unique, descriptive title.


Frequently Asked Questions

Does this work with both App Router and Pages Router? Yes. seo.yatna.ai crawls the rendered HTML output from your live site, so it works regardless of which Next.js routing system you use. When it detects App Router patterns in your metadata output, it applies App Router-specific validation rules. When it detects Pages Router patterns, it applies the appropriate checks for that rendering model.

What Next.js versions are supported? Next.js 13 and above for App Router auditing. All Pages Router versions are supported. If you are still on Next.js 12 or earlier, the audit will run the full 7-category check against your rendered output and flag any issues it finds, though App Router-specific checks will not apply.

Can I audit a Next.js site behind authentication? The free tier requires publicly accessible URLs only. Paid tiers (Starter and above) support HTTP Basic Auth via credentials you provide at audit time. Sites behind full SSO or session-based auth require a different approach — contact us if your site requires authenticated crawling.

Does the audit catch the imageSrcSet LCP bug? Yes — this is one of the most common findings in Next.js audits and is checked explicitly. The audit parses every <img> element in the crawled output, checks for explicit width and height attributes, and flags any above-fold image that is missing them. The finding includes the specific page URL and the image src so your developer can find and fix it immediately.


Audit My Next.js Site — Free

Your App Router site deserves a checker that understands how App Router actually works. Generic crawlers miss the generateMetadata patterns, the next/image LCP issues, and the AI crawler gaps that are costing you rankings right now.

Audit My Next.js Site — Free →


Related reading:

Ready to audit your site?

7 AI agents. 7 audit categories. One score. Free for your first audit.

Run Free Audit