移动端与桌面端的死链差异,主要来自三处:页面给两端返回的HTML不同、链接由脚本在特定视口或触摸环境下才注入、以及重定向或拦截规则按User-Agent区分。因此不能只用桌面爬虫扫一遍就当作结论。时间人手有限时,先做“同一URL双端抓取对比”,再针对差异条目做点击验证,优先处理移动端返回404/410而桌面端正常的链接,因为移动优先索引下这类问题影响面更大。
不是所有站点都需要双端分别检测。满足以下任一条件时,差异检查才有必要:
m.example.com 与主域各自维护。如果站点是纯静态、两端输出完全一致的HTML,且链接都在服务端渲染,那么一次桌面抓取基本可以覆盖,把精力放到别处更划算。
核心做法是固定URL清单,只改变请求身份,比较返回结果。可执行步骤如下:
命令行工具可以用 curl 指定请求头,例如:
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -I -L https://example.com/page
其中 -I 只看响应头,-L 跟随跳转。把 -A 换成桌面User-Agent再跑一次,对比两次的状态码与 Location。这只是假设示例,实际域名和UA字符串请替换成你要测的目标。
抓取对比会得到两类不同问题,处理方式不一样:
<a> 链接,或多了桌面端没有的链接。需要判断是设计上有意隐藏,还是渲染逻辑漏掉了。注意,抓取工具看到的HTML不等于用户看到的页面。如果链接是滚动或点击后才由脚本插入,纯抓取可能两端都取不到,这时要改用能执行JavaScript的渲染方式,或直接在真机/模拟器上手动核对。
时间和人手有限时,按这个顺序安排:
验收信号可以这样定:同一批URL在桌面与移动两种User-Agent下,状态码一致;移动端关键导航链接可点击且能到达有效页面;修复后重新跑一次双端对比,差异条目数量下降。不要用“抓取一次没报错”当作通过,要确认对比清单里的差异项确实被消除。
双端结果不同,不一定都是死链:
另外要区分:robots.txt 的抓取限制不等于可靠的索引移除;站点地图不保证收录。这些规则影响的是抓取与索引,不能替代对链接本身是否可访问的检查。
下一步:挑10个主要栏目页,用桌面和移动两个User-Agent各抓一次,把状态码不同的URL列成一张表,先修移动端报错的那几条。