Why it matters
Since Next 15.2 metadata of dynamic routes is streamed into . Next's default bot list doesn't include AI crawlers (GPTBot, ClaudeBot, PerplexityBot) or plain Googlebot, so they receive a without title/canonical.
How to fix it
Make the route static (generateStaticParams, 'use cache'), or set htmlLimitedBots in next.config to Next's default list plus AI crawlers.
Example
const nextConfig: NextConfig = {
htmlLimitedBots: /Googlebot|GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|PerplexityBot|Bingbot|facebookexternalhit|Twitterbot|LinkedInBot|Slackbot/i,
}References
More lint rules
void lint reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.
missing-robotsNo robots.txtmissing-og-imageNo Open Graph image anywheremissing-iconNo favicon / app iconmissing-llms-txtNo `/llms.txt`missing-langRoot `<html>` without `lang`jsonld-missingNo JSON-LD structured datasitemap-lastmod-nowSitemap uses `new Date()` for `lastModified`multiple-h1More than one `<h1>` in a route's page + layouts