动态页面确认可见内容,不能只看浏览器里“好像显示了”。正确做法是:把页面返回的原始 HTML、渲染后的 DOM、以及搜索引擎实际抓取到的版本分开检查,判断文字是服务端直出、客户端脚本注入,还是根本不在可抓取内容里。域名注册购买后如果直接套用模板建站,最容易在这里踩坑:模板演示时可见,上线后抓取却看不到。
这是动态页面排查中最普遍的误判。浏览器加载页面时会执行 JavaScript,把接口返回的数据拼进 DOM,用户眼里文字完整。但抓取工具拿到的第一份响应往往只有空壳容器,例如 <div id="app"></div>,正文要等脚本运行后才出现。
所以“可见”至少分三层:
只有第三层才决定内容能否被索引。前两层都可见、第三层为空,是动态站点的典型故障。
不要凭感觉判断,按顺序取三份证据:
判断结果:若源代码没有、渲染后有,问题属于客户端渲染;若渲染后仍没有,可能是接口被拦截、脚本报错或内容依赖登录状态。此时要在控制台看是否有跨域或 403 报错,而不是直接改模板。
robots.txt 只表达抓取许可,不表达内容是否存在,也不等于可靠的索引移除手段。一个 URL 被 robots.txt 禁止抓取,抓取工具仍可能因外部链接而索引它的标题或摘要。反过来,允许抓取也不代表正文能被提取。
站点地图只提供 URL 线索,不保证收录。把动态页全部塞进站点地图,并不能让空壳页面变得可见。
HTTPS 同样只解决传输加密,不保证页面无漏洞,也不保证排名。排查可见内容时,不要把这些信号混进“内容是否被抓到”的判断里。
是否要改成服务端渲染,取决于内容重要性和当前证据:
假设一个商品详情页,价格和库存由接口异步加载,标题与描述在源代码中已有。这种情况下,标题描述可被抓取,价格库存属于动态数据,是否要直出取决于业务是否需要它们在搜索摘要中稳定出现。这是取舍,不是必须全量服务端渲染。
同一现象可能有多个解释。源代码里没有正文,可能是客户端渲染,也可能是服务端出错返回了空模板,还可能是 CDN 缓存了旧版本。只有拿到响应状态码、响应体和渲染结果三项对照,才能说已经定位。
不同搜索引擎对脚本渲染的支持程度不同,须分别用各自的抓取或调试方式核查,不能用一个工具的结果推断全部。域名注册购买只是起点,页面内容能否被看见,取决于响应层是否真的包含它。
下一步:挑一个正文依赖脚本加载的页面,按上面三步各取一份证据,再决定是改渲染方式,还是只调整被抓取的内容范围。