结论先说:robots.txt 管的是抓取,不管渲染后的可见内容。要确认一个动态页面最终展示给用户的内容是否完整,最直接的办法是把该页的渲染结果与原始 HTML 对比,再看搜索引擎抓取工具实际拿到的版本。如果渲染后才有正文,而抓取工具只拿到空壳,那么这个页面在抓取层面就等同于不可见。
robots.txt 只声明哪些路径允许或禁止抓取。它不会隐藏页面内容,也不会让动态内容变得可见。一个动态页面即使没有被 robots.txt 拦住,也可能因为内容靠 JavaScript 生成而无法被抓取工具看到。反过来,被 robots.txt 禁止抓取的页面,其可见内容根本不会进入抓取流程,讨论渲染就没有意义。因此确认可见内容前,先确认该 URL 没有被 robots.txt 误拦。检查方法是直接访问 /robots.txt,找到对应路径的规则,看是否命中 Disallow。如果命中,先解决抓取许可,再谈渲染。
动态页面的可见内容通常分两层:服务器返回的原始 HTML,以及浏览器执行脚本后生成的 DOM。判断标准是:正文关键信息是否出现在原始 HTML 中。如果只出现在渲染后,就要进一步确认抓取工具能否执行脚本并拿到同样结果。
验收信号很明确:渲染后 HTML 中出现与用户所见一致的正文,且原始 HTML 中至少有关键文本或可读的结构化数据。若原始 HTML 为空、渲染后也拿不到,优先处理脚本阻塞或接口鉴权问题,而不是改 robots.txt。
<script> 标签带 async 或动态注入,且依赖顺序错误,导致渲染中断。表现为控制台报错,渲染后 DOM 缺少目标节点。这三类原因可能同时存在,不要看到空壳就断定是某一种。先看接口响应,再看控制台报错,最后检查交互依赖。
如果只能先做一件事,就做原始 HTML 的正文检查。它不需要额外工具,打开源码搜索关键词即可,几分钟能筛出大部分问题。筛出问题后,按影响面排序:核心落地页优先于低频详情页,有自然流量的页面优先于无流量页面。修改方向通常是服务端渲染或预渲染,而不是调整 robots.txt。robots.txt 只负责放行或拦截抓取,不解决渲染问题。改完后用抓取工具的渲染结果复验,确认渲染后 HTML 与用户所见一致,才算验收通过。
下一步:挑一个当前有流量、且正文疑似由脚本生成的动态页面,按上面的三步做一次源码搜索和渲染对比,记录原始 HTML 与渲染后 HTML 的差异,再决定是改渲染方式还是先修接口鉴权。