确认同一服务器上动态页面的可见内容,核心是绕过JavaScript执行环境,直接检查服务器返回的HTML源码,再与浏览器渲染后的结果对比。如果源码里没有目标文字、链接或结构化数据,而只在浏览器中能看到,那么对不执行脚本的抓取程序来说,这些内容就是不可见的。时间和人手有限时,优先检查那些依赖接口拉取数据、内容由前端拼接的页面。
用命令行请求页面,只看原始响应,不执行脚本。例如:
curl -s https://example.com/page | grep -i "目标文字"
把example.com/page换成同一服务器上待查的动态页地址。如果没有任何输出,说明目标内容不在初始HTML中,可能是通过接口返回后由前端渲染的。此时可以进一步查看响应中是否包含数据接口地址、脚本文件路径或空的内容容器。
判断依据很简单:初始HTML里能搜到的文字,通常可被直接读取;搜不到的,就要看它来自哪里。注意,这里只说明“服务器返回的源码里有没有”,不等于搜索引擎一定收录或一定不收录,收录还取决于抓取、解析和索引策略。
在浏览器中打开同一地址,等页面加载完成后,用开发者工具的“元素”面板查看实际DOM。如果目标文字出现在DOM里,但不在第一步的源码中,说明它是脚本执行后插入的。可以继续在“网络”面板中找出发起数据请求的接口,确认内容来源。
这一步要区分两种可能:一是内容由前端调用接口后渲染,二是内容本来就在HTML里、只是被脚本移动或显示。判断方法是禁用JavaScript后刷新页面,或直接查看第一步的源码。如果禁用后内容消失,基本可以确认依赖脚本;如果仍然存在,则更可能是展示方式变化,而不是内容缺失。
人手有限时,不必一次排查全站。可以按下面的顺序处理:
适用条件是:页面内容对访问者重要,且你希望不执行脚本的抓取程序也能读到。如果内容只对登录用户可见,或本来就允许脚本渲染,那么优先级可以降低。判断结果是:源码中缺失、渲染后出现、且业务重要,这三条同时成立时,才值得优先改造。
改造或调整后,用同一方法复查,避免只看浏览器就下结论。可以固定检查这几项:
复查时不要用“页面能打开”代替“内容可见”。页面能打开只说明服务器有响应,内容可见要看源码里有没有。另外,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录;这两项与“内容是否在源码中可见”是不同层面的问题,不要混在一起判断。
从同一服务器上挑一个最重要的动态页面,先执行一次源码检查,记录目标内容是否存在。若不存在,再定位提供内容的接口,并评估是否能把核心内容改为服务端输出或预渲染。做完这一页后,用相同检查项复查,再决定是否推广到其他页面。