动态页面的可见内容,指用户和搜索引擎实际能拿到的渲染后文本与链接,而不是数据库里存在、模板里写好却未输出的部分。确认方法可以概括为:先看原始响应,再看渲染结果,最后对比两者差异,并检查内链是否出现在最终可见的DOM中。只查源码或只看浏览器画面,都容易得出错误结论。
动态页面常见两种输出方式。一种是服务端渲染,请求返回的HTML里已经包含正文和内链;另一种是前端渲染,初始HTML只有骨架和脚本,内容由JavaScript执行后注入。确认可见内容时,必须把这两层分开:
curl或浏览器“查看网页源代码”获取,代表爬虫第一眼拿到的内容。display:none、visibility:hidden、被折叠或需要点击才出现的内容。判断依据很简单:如果原始响应里没有目标正文或内链,而渲染后DOM里有,说明该内容依赖脚本执行。此时能否被稳定抓取,取决于抓取方是否执行JavaScript以及执行到什么程度,不能仅凭自己在浏览器里看得到就认定可见。
针对动态页面,可以按以下顺序执行,每一步都留下可对比的结果:
href或锚文本。若完全没有,标记为“脚本注入”。display:none或visibility:hidden,即使用户看不到,它也可能仍在DOM中;这类链接对用户不可见,对内链价值的判断要谨慎。适用条件是:页面正文或导航由JavaScript生成,且你怀疑内链没有被稳定输出。判断结果是:原始响应有、渲染后有、样式可见,才算用户和抓取方都能看到的链接;只有渲染后有,则需要进一步确认目标抓取环境是否执行脚本。
DOM里存在链接,不等于一定可被抓取。常见干扰包括:
robots.txt禁止抓取该路径。需要说明的是,robots.txt限制抓取,不等于可靠的索引移除;被禁止抓取的URL仍可能因外部链接被收录。javascript:伪协议触发,没有真实href,抓取方难以把它当作链接跟随。检查时把“可能原因”和“已经定位的原因”分开记录。例如原始响应无链接、渲染后有链接,只能说明“可能依赖脚本”;要确认是否真的影响抓取,还需查看目标抓取环境实际返回的渲染结果,而不是直接断言脚本一定不被执行。
如果目标是让动态页面里的内链稳定可见,交付结果应当是:原始响应或稳定渲染结果中包含目标链接,且链接对用户可见、可点击、指向有效URL。倒推需要的资料和任务如下:
假设一个列表页的内链由接口返回后拼接到DOM,初始HTML没有这些链接。此时可执行的改进是:把关键内链改为服务端输出,或在预渲染阶段生成静态HTML。验收时重新抓原始响应,若能在其中搜到目标href,说明不再单纯依赖客户端脚本。这个例子只说明判断逻辑,不代表任何具体项目的实际结果。
选一个动态页面,分别保存原始响应和渲染后DOM,搜索同一个内链锚文本。若两者不一致,先记录差异位置,再决定是调整渲染方式,还是把该内链移到初始可见的导航或正文中。确认可见内容后再谈内链权重传递,顺序才不会反。