爬虫文件与结构化数据
metadata 对象负责 head 里的标题和描述。sitemap、robots 是给爬虫的文件;JSON-LD 是给搜索结果的结构化数据。三件事不要塞进同一个 export
两份正在生效的文件
都从注册表或固定规则生成,不是手写的 XML
- /sitemap.xmlapp/sitemap.ts 读 TOPICS。新专题注册后,这份列表自动多一条,不必再维护一份 URL 清单。
- /robots.txtapp/robots.ts 允许抓取全站,并指向上面的 sitemap。预览环境若不想被收录,改的是这里,不是每个页面的 robots 字段。
JSON-LD 放在页面里
查看本页源代码,能看到 application/ld+json。metadata API 没有这一种字段
标题、描述、Open Graph 继续走 metadata。只有搜索结果需要类型化信息(文章、产品、面包屑)时,才在 Server Component 里加一段 JSON-LD。不要为了「看起来完整」给每个专题都套一份。
robots.txt 与页面级 robots 的分工
整站准入 vs 单页索引:两层各管一段,不要互相替代
- robots.txt(app/robots.ts)管「能不能抓」:整站/整路径的准入门, 一个站点一份;屏蔽某段路径、换 sitemap 地址都改这里,不碰任何页面
- 页面级 robots 管「抓到了要不要索引」:写在 metadata / generateMetadata 里,逐页生效。活例子就在动态路由专题:[id] 页对不存在的用户返回
robots: { index: false },404 详情不进搜索结果 - 注意两层是「且」的关系:robots.txt disallow 了的路径,爬虫根本不会去抓, 页面里的 noindex 也就永远不被读到 —— 想让 noindex 生效,就不能 disallow 那条路径
三条通道怎么分
先问这份信息是给浏览器 head、给爬虫文件,还是给富结果
- 标题和描述:metadata 或 generateMetadata,见流水线专题
- 整站有哪些 URL、能不能抓:sitemap.ts / robots.ts,一个站点各一份
- 富结果要的类型:页内 JSON-LD。它不参与 metadata 合并