同IP网站检测关注的是同一台服务器上不同站点的相互影响,而动态页面确认可见内容,核心是判断“用户实际看到的正文”与“搜索引擎或检测工具拿到的HTML”是否一致。假设有一个使用JavaScript渲染商品列表的页面,服务器返回的初始HTML里只有空容器和加载脚本,那么直接抓取HTML会看不到商品名称。要确认可见内容,应比较渲染后的DOM文本与原始响应,而不是只看状态码或标题。
动态页面的可见内容可能来自三种位置:服务器直出的HTML、浏览器执行脚本后生成的DOM、以及异步接口返回后再插入的文本。确认时先保存原始响应,再用能执行JavaScript的方式获取渲染结果。如果原始HTML中没有目标文字,而渲染后出现,说明内容依赖客户端执行。此时要判断该内容对谁可见:普通用户可见,不代表不执行脚本的抓取工具也能看到。
display:none或visibility:hidden。假设某页面路径为/list,原始HTML只有<div id="app"></div>和一段脚本。第一步,用浏览器开发者工具的“网络”面板查看该文档响应,搜索目标商品名,若没有结果则记录为“原始HTML不可见”。第二步,在“元素”面板搜索同一商品名,若能在某个列表节点中找到,说明渲染后可见。第三步,禁用JavaScript后刷新页面,若商品名消失,说明可见内容依赖脚本。第四步,检查异步请求返回的数据是否包含商品名,若包含,则内容来自接口而非初始文档。
常见错误是只截取渲染后的页面截图,就断定所有访问者都能看到。截图只能证明当前浏览器环境下的可见结果,不能证明不执行脚本的环境可见。另一个错误是把接口返回的JSON当作页面可见内容,接口有数据不等于页面上一定渲染出来,也不等于文字处于可见状态。
确认可见内容时,要区分“可能原因”和“已经定位的原因”。例如页面没有显示商品名,可能原因包括脚本报错、接口失败、选择器不匹配、文字被隐藏。只有逐项排除后,才能说已经定位。判断结果可以按以下条件分类:原始HTML和渲染后DOM都有目标文字,说明内容较稳定;只有渲染后DOM有,说明依赖脚本;两者都没有但接口有,说明渲染环节可能有问题;两者都没有且接口也没有,说明数据源或权限可能有问题。
同IP网站检测有时用于观察同一服务器上多个站点的响应差异。对动态页面来说,额外检查包括:同一IP下其他站点是否返回了不同内容、是否存在基于Host或路径的差异化响应、CDN或反向代理是否缓存了旧版本。若发现同一路径在不同Host下返回不同HTML,应分别保存响应并比较正文节点,而不是只比较状态码。robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这些与“可见内容确认”是不同层面的问题,不能混为一谈。
下一步,选取一个具体动态页面,按上述清单逐项记录结果,再根据“原始HTML、渲染DOM、接口数据”三者中哪一层缺失,决定是改为服务器直出、补充预渲染,还是修复脚本与接口。