---
title: "Request-time `generateMetadata` without `htmlLimitedBots` (lint/dynamic-metadata-streaming)"
description: "lint/dynamic-metadata-streaming: Since Next 15.2 metadata of dynamic routes is streamed into `<body>`."
canonical: https://void-design.vercel.app/rules/lint/dynamic-metadata-streaming
lastModified: 2026-09-16
---

# Request-time `generateMetadata` without `htmlLimitedBots`

`lint/dynamic-metadata-streaming` · severity **warn** · category Lint · detected by `void lint` and `void audit`

## Why it matters

Since Next 15.2 metadata of dynamic routes is streamed into `<body>`. Next's default bot list doesn't include AI crawlers (GPTBot, ClaudeBot, PerplexityBot) or plain Googlebot, so they receive a `<head>` 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

```ts
const nextConfig: NextConfig = {
  htmlLimitedBots: /Googlebot|GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|PerplexityBot|Bingbot|facebookexternalhit|Twitterbot|LinkedInBot|Slackbot/i,
}
```

## References

- https://nextjs.org/docs/app/api-reference/config/next-config-js/htmlLimitedBots
- https://nextjs.org/docs/app/api-reference/functions/generate-metadata#streaming-metadata

## 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-robots` No robots.txt — [lint/missing-robots](https://void-design.vercel.app/rules/lint/missing-robots)
- `missing-og-image` No Open Graph image anywhere — [lint/missing-og-image](https://void-design.vercel.app/rules/lint/missing-og-image)
- `missing-icon` No favicon / app icon — [lint/missing-icon](https://void-design.vercel.app/rules/lint/missing-icon)
- `missing-llms-txt` No `/llms.txt` — [lint/missing-llms-txt](https://void-design.vercel.app/rules/lint/missing-llms-txt)
- `missing-lang` Root `<html>` without `lang` — [lint/missing-lang](https://void-design.vercel.app/rules/lint/missing-lang)
- `jsonld-missing` No JSON-LD structured data — [lint/jsonld-missing](https://void-design.vercel.app/rules/lint/jsonld-missing)
- `sitemap-lastmod-now` Sitemap uses `new Date()` for `lastModified` — [lint/sitemap-lastmod-now](https://void-design.vercel.app/rules/lint/sitemap-lastmod-now)
- `multiple-h1` More than one `<h1>` in a route's page + layouts — [lint/multiple-h1](https://void-design.vercel.app/rules/lint/multiple-h1)

Detected by `void lint` and `void audit`. Explain it in a terminal: `void rules lint/dynamic-metadata-streaming`
