把同一地址分别用未登录桌面、已登录桌面和移动端抓取,如果返回的正文不同,先不要急着改二级域名或主域名。正确做法是固定一个主域名或二级域名作为对照基准,用同一组请求头与Cookie状态重复请求,把差异归因为设备识别、登录态、地域或缓存中的哪一类,再决定保留、改写还是退出当前方案。
同一地址返回不同内容,常见来源有三类:一是服务端根据User-Agent或Cookie下发了不同HTML;二是同一份HTML在客户端由JavaScript按登录状态替换了部分区块;三是CDN或缓存按设备、地域返回了不同副本。这三类的处理代价完全不同。
判断方法很直接:关闭JavaScript后重新请求,比较原始HTML。如果未登录与已登录返回的HTML正文一致,差异只发生在渲染层,那么二级域名与主域名的选择不影响抓取,问题在渲染可见性。如果原始HTML本身就不同,说明服务端已经做了分流,这时才需要决定是否把某个状态固定到独立主机名上。
一个假设例子:某页面在未登录桌面返回完整正文,登录后返回“我的订单”面板并挤掉正文。此时若把登录态页面放在二级域名上,抓取工具默认不带Cookie,看到的仍是未登录版本,二级域名与主域名在这个维度上没有区别;真正的风险是页面模板在两种状态下共用同一URL,导致可见正文随状态漂移。
保留当前二级域名与主域名的分工,前提是差异只存在于客户端渲染,且服务端返回的HTML对未登录请求稳定一致。此时动作是:用curl或浏览器开发者工具的“禁用JavaScript”模式各请求一次,保存响应体,确认主域名与二级域名的原始HTML正文相同。
代价是这种稳定性依赖前端逻辑不变。一旦后续把登录判断移到服务端,未登录请求会开始拿到不同HTML,之前的对照结论失效。因此保留方案需要约定一个复查触发点,例如模板层改动后重新做一次未登录请求对照,而不是一次确认后长期沿用。
当服务端确实按登录态或设备返回不同正文,且这些差异对未登录访问者没有价值时,改写更合适:让该URL对未登录请求始终返回一份完整、可读的正文,登录态内容改为客户端异步加载或放到独立路径。
这里要区分两个动作。第一,把登录态区块改为异步请求,主文档保持稳定;第二,如果确需独立主机名承载登录后视图,应确认它不与被对照的公开页面共用同一路径语义。二级域名与主域名的区别在此体现为:独立主机名便于隔离状态,但也意味着要单独处理该主机名下的抓取限制与索引意图。
需要提醒的是,用robots.txt限制抓取并不等于可靠的索引移除,被限制的URL仍可能因外部链接出现在结果中;站点地图也不保证收录。改写后应直接检查响应体,而不是依赖这些间接信号。
如果同一地址在不同设备或登录状态下返回的正文差异无法收敛,且业务上无法提供一份对未登录访问者稳定的版本,退出当前“一个URL承载多状态”的做法是合理选择。退出意味着为不同状态分配明确不同的URL或主机名,而不是继续让同一地址漂移。
退出前要确认代价:拆分后需要重新建立各URL的抓取与索引关系,原先指向旧地址的链接需要逐一核对去向。一个可操作的检查是,对拆分后的每个URL分别做未登录请求,确认返回正文与预期状态一致,再决定是否把旧地址指向新地址。
无论保留、改写还是退出,都需要留下可复查的对照记录。建议固定三项:请求时使用的User-Agent、是否携带Cookie、是否执行JavaScript。每次对照用同一组条件重复,记录返回正文的首段与关键区块是否出现。
这样做的结果是:下一次改动模板或登录逻辑时,可以直接比对三项条件是否仍然得到相同结论,而不是重新猜测差异来自哪里。
如果差异只出现在JavaScript执行之后,优先保留现有二级域名与主域名结构,把精力放在确保未登录原始HTML包含正文;如果差异出现在原始HTML中且无法通过异步加载消除,优先改写为固定可见版本;如果改写后仍无法让同一地址对未登录请求返回稳定正文,再考虑退出并拆分URL。每一步都以实际请求返回的响应体为准,而不是以抓取量或请求量归零作为处理正确的证明——这些现象也可能来自缓存、限流或统计口径变化。