动态页面要确认可见内容,核心不是看浏览器里有没有文字,而是看未执行JavaScript的原始HTML里是否已经存在这些文字,以及它们是否以可抓取的链接形式出现。如果原始HTML里只有空容器、加载提示或脚本占位,那么即使页面在浏览器中显示完整,搜索引擎也可能看不到主要内容,更无法从中提取内链。时间和人手有限时,先抽查原始HTML,再决定是否投入改造。
动态页面常见的误区是把“用户能看到”等同于“搜索引擎能看到”。实际要分三层判断:
<a>链接是否已经存在,不依赖脚本执行。内链建设依赖的是第三层。如果链接只在脚本执行后才插入DOM,而抓取环节没有执行或没有完整执行脚本,这条内链就不会被稳定发现。判断顺序应当是:先看原始HTML,再看渲染结果,最后看抓取日志或抓取工具返回的内容。
这是成本最低、最先该做的检查。打开目标动态页面,使用浏览器查看页面源代码,而不是查看元素面板。元素面板显示的是脚本执行后的DOM,容易造成误判。
<a href=,看内链是否直接出现在源码中。若链接地址由脚本拼接,源码里通常找不到目标URL。适用条件与判断结果:这套方法适合列表页、详情页、筛选页等依赖前端渲染的页面。若目标文字和链接都能在源代码中搜到,说明基础可见性较好,可优先处理其他页面;若搜不到,则要先解决内容与链接的服务端输出,再谈内链布局。
原始HTML里出现链接,不等于这条内链有效。还要检查链接的可访问性和形式。
<a href="...">是链接;用onclick跳转、javascript:伪协议或纯按钮元素,通常不算可抓取链接。可以做一个短例子:假设某商品列表页的详情链接写在脚本模板里,原始HTML中只有一个空列表容器。查看源代码搜不到任何商品URL,那么这些内链对抓取环节基本不可见。若把同样的链接改为服务端输出到<a href>中,源码即可搜到,抓取路径才成立。这里的关键不是“有没有用JavaScript”,而是“关键内容和链接是否在初始响应中可获取”。
前两步是快速筛查,要确认结论还需要实际抓取证据。可用网站日志、抓取统计或第三方抓取工具,查看抓取工具请求该页面时获得的状态码和内容。
验收信号:抓取工具返回的HTML里能搜到目标文字;关键内链以<a href>形式出现且目标返回200;日志中该页面被正常请求而非被robots.txt拦截。三条同时满足,才可认为动态页面的内链对抓取环节可见。
不要一上来就重写整个前端。先按影响面排序:
下一步可以直接选一个动态列表页,查看源代码并搜索其中一条详情页URL。如果搜不到,就把它作为第一个改造对象;如果搜得到,再检查该链接目标的状态码和是否被robots.txt拦截。这样一轮下来,你能得到一份按优先级排列的处理清单,而不是停留在“页面看起来正常”的判断上。