先给结论:不要用“两个浏览器各看一遍”来做对照,而要固定一个基准请求,再逐项改变设备标识或登录状态,把每次返回的正文、内链和跳转分别留存。判断依据是差异是否只出现在登录态、是否只出现在某一类设备标识、以及差异是否影响链接的可抓取路径。只要这三点里有一点无法复现,就不要据此改内链。
同一地址在设备或登录状态变化后返回不同内容,通常来自三类机制:服务端按 User-Agent 或客户端提示返回不同模板;登录态下注入个性化模块;边缘节点按设备类型缓存了不同版本。对照前必须先固定基准,否则每次比较的都是不同对象。
基准应包含:完整 URL(含协议、主机、路径、查询串)、请求方法、是否携带 Cookie、Accept-Language、以及是否跟随跳转。把这五项写进一张对照表,每次只改一项。若同时改设备和登录状态,出现差异时无法判断是哪一项造成的。
一个常见的错误是拿“未登录桌面浏览器”和“已登录手机浏览器”对比,然后得出“移动端内链更少”的结论。这个结论不成立,因为两个变量同时变了。正确做法是先做未登录桌面与未登录移动的对比,再做未登录移动与已登录移动的对比,差异才能归因。
如果未登录状态下,桌面与移动返回的正文和内链不同,而登录后差异消失或反转,说明差异更可能来自模板分支或设备缓存,而不是权限。此时的选择是:以服务端默认返回的版本为内链建设基准,而不是以你当前设备看到的版本为基准。
实施动作:用同一未登录会话,分别发送带桌面标识和移动标识的请求,保存两次返回的正文与链接列表。把只在其中一个版本出现的链接单独列出,检查它们指向的页面是否也能在另一个版本中被访问到。如果目标页在两个版本都能打开,但链接只在一个版本出现,这条链接属于设备条件依赖,不应作为全站内链结构的唯一通路。
结果如何影响下一步:如果关键链接只存在于移动版本,而移动版本又是服务端默认返回给爬虫的版本,那么下一步应检查该链接是否出现在站点地图或其它稳定入口中,而不是急着在桌面模板里补一条同样的链接。反过来,如果关键链接只存在于桌面版本,则需要确认移动版本是否缺少到达该页的替代路径。
如果同一设备下,未登录与登录返回的内链不同,且登录后多出的链接指向会员页、订单页或个性化推荐,这类差异通常属于权限或个性化,不属于可公开抓取的内链结构。此时的选择是:把登录态下新增的链接排除出内链建设范围,只对照未登录状态下的链接集合。
实施动作:在未登录状态保存一份链接清单,登录后再保存一份,取两者的差集。对差集中的每条链接,用未登录状态直接访问目标地址,记录返回状态和正文是否可见。如果未登录访问被跳转到登录页或返回无权限提示,这条链接就不应作为公开内链来规划。若未登录可正常访问,只是入口被登录态隐藏,则它属于可公开但入口不稳定的链接,需要另找稳定入口。
例外:有些站点对未登录用户也返回个性化内容,例如按地区或历史浏览注入推荐链接。这类差异既不属于纯设备,也不属于纯登录,而属于会话或地域。遇到这种情况,应增加一个“无 Cookie、无历史、固定地区”的对照请求,把个性化因素剥离后再比较。
设备或登录状态变化后,返回的往往不是同一份正文,而是不同的跳转链。例如桌面请求直接返回 200,移动请求先 302 到另一个路径再返回 200。若只比较最终页面,会误以为两者内容一致,实际上内链的起点已经不同。
对照时应记录每一步跳转的目标地址和状态码,而不只记录最终地址。判断标准是:如果两条跳转链的最终地址相同,但中间路径不同,内链的传递路径就不同;如果最终地址也不同,则要分别确认两个最终地址是否都能被公开访问。
一个注明假设的短例子:假设同一文章地址在桌面请求下返回 200 并包含三条相关阅读链接,在移动请求下先 302 到一个带参数的地址,再返回 200 且只包含一条相关阅读链接。此时不能直接下结论说移动端内链更少,因为移动请求的最终地址与桌面不同,两条链接集合本来就不在同一页面上。正确动作是分别保存两个最终地址的链接清单,再判断哪一个是内链建设应采用的基准。
对照完成后,按以下顺序处理,不要跳步:
需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。因此,即使某条链接在对照中被确认可达,也不应把站点地图当作唯一的内链替代方案。内链建设要解决的是页面之间的可达路径,而不是用一份文件替代路径本身。
另一个容易混淆的点是:请求量或抓取量在对照前后出现变化,不能单独证明你的处理正确。流量波动还可能来自缓存刷新、发布节奏、外部链接变化或统计口径调整。要确认处理是否有效,应回到对照表本身,看差异链接是否按预期归入基准集合,而不是看某个总量指标。
最后,若对照中始终无法复现差异,先检查请求是否真的改变了设备标识或登录状态,而不是继续增加对照次数。很多“设备差异”实际上是同一会话被复用了缓存,或请求头没有真正切换。固定基准、逐项改变、记录跳转链,这三步做完仍无差异,才可以把问题从设备或登录状态移开,转向其它层排查。