动态页面确认可见内容,不能只看浏览器里是否显示文字,而要看“返回给爬虫的HTML中是否包含这些文字”。如果正文由JavaScript在浏览器端渲染,而服务器返回的初始HTML为空壳,搜索引擎可能看不到与用户相同的内容。判断方法是:先查看原始HTML,再与渲染后的页面结构对比,最后分别核查抓取与索引状态。
动态页面的“可见”至少有三层含义,混在一起就会误判。
用户能看到,只能说明第一层成立。要确认后两层,必须用面向爬虫的方式检查。
假设某项目有一个商品列表页,URL形如/list?cat=shoes&page=2。页面打开后能看到商品名称和价格,但这些内容由前端脚本请求接口后插入。此时按以下步骤检查。
<meta name="robots" content="noindex">,以及响应头中的X-Robots-Tag。有其一,内容再完整也无法进入索引。robots.txt禁止抓取,渲染过程可能拿不到数据。判断结果:如果原始HTML为空、渲染后才有正文、接口又禁止抓取,那么该页面对搜索引擎基本不可见。如果原始HTML已含正文,渲染只是增强交互,则可见性风险低得多。
第一种错误是把robots.txt当成索引开关。它限制的是抓取,不是移除已收录页面;要阻止索引,应使用noindex,且该页面必须能被抓取到,否则规则读不到。
第二种错误是认为提交站点地图就会收录。站点地图只是发现URL的线索,不保证抓取,更不保证索引。
第三种错误是看到HTTPS就认为没有技术问题。HTTPS只说明传输加密,与内容是否渲染、是否可索引无关。
第四种错误是只测一个搜索引擎。不同搜索引擎对JavaScript渲染的支持程度和抓取策略不同,应分别用各自的抓取测试工具核查,不能用一个平台的结果推断全部。
若确认正文依赖客户端渲染,优先考虑服务端渲染或预渲染,让初始HTML包含核心内容。无法改造时,至少保证接口可被抓取、关键内容有稳定的HTML结构,并避免用脚本把正文整体替换为空。
改造后按同一组检查项复测:源代码中能否搜到核心文字、渲染前后差异是否缩小、noindex与X-Robots-Tag是否误加、接口是否允许抓取。
下一步,选一个当前流量较高但内容靠脚本加载的动态URL,按上述五步做一次原始HTML与渲染HTML的对比记录,再决定是改渲染方式还是先放开接口抓取。