移动端与桌面端检查死链接的差异,核心不在链接本身是否有效,而在两端触发的链接集合、跳转路径和检测环境不同。同一个 URL 在桌面端返回 200,在移动端可能因重定向到失效的移动页、被 robots.txt 限制或依赖触摸事件才暴露而变成死链。因此正确做法是:两端分别抓取链接清单,再对差异项单独验证,而不是用一次桌面扫描的结果推断移动端。
常见原因可以分成三类,需要区分“可能原因”和“已经定位的原因”,不要看到差异就断言是某一项造成的。
/page 正常,移动端可能被 302 到 /m/page,而后者已删除。此时死链出现在移动端,桌面端扫描不到。移动端检查要覆盖静态链接和交互后链接两部分。
<a href> 及 <link>、<script src> 等资源地址。可执行命令示例:curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -s https://example.com/page | grep -o 'href="[^"]*"'。这只能拿到初始 HTML 中的链接。适用条件:站点有独立的移动模板或服务端按 UA 分流时,必须做这一步。如果站点是响应式设计且两端 DOM 完全一致,差异通常只来自交互触发,静态抓取结果可复用。
桌面端检查相对直接,但要注意两点:一是 JavaScript 渲染后才插入的链接,纯 HTML 抓取拿不到;二是悬停菜单、下拉框里的链接需要模拟 hover 才会出现在 DOM 中。
判断结果时,把桌面端和移动端的链接清单做差集:只在移动端出现的、只在桌面端出现的、两端都有但状态码不同的。这三类就是需要人工复核的差异项。
完成一轮检查后,用以下信号判断是否收敛:
如果差异项数量很大,优先处理出现在导航、页脚、商品卡片等高频区域的链接,这些位置的死链对用户和抓取的影响更直接。
先选一个移动端和桌面端表现可能不同的页面(例如带独立移动模板的详情页),按上面的方法各跑一次链接提取,把两份清单做差集。差集结果会直接告诉你需要重点验证的是重定向规则、UA 分流还是交互脚本。