按 UA 或 IP 返回不同頁面,属于什么問题
蜘蛛池入口頁常见的一種做法是:對普通浏览器的 UA 返回带連結的導航頁,對疑似搜尋引擎的 UA 返回另一套内容;或者反過来,只對搜尋引擎返回連結,對真實訪客展示空模板。同一條 URL、不同訪問者看到不同内容,行业里一般称為 cloaking(内容伪装)。它不一定马上出問题,但属于需要谨慎對待的操作。
搜尋蜘蛛是怎么看到頁面的
- 抓取时會带上自己的 UA 字符串,但這個字符串任何人都可以伪造。
- 主流搜尋引擎還會做 IP 反向解析、IP 段校驗等交叉驗證,只看 UA 判断身份並不牢靠。
- 抓取结果通常以搜尋引擎自己拿到的那一版為准進入索引,而不是訪客看到的那一版。
- 不同产品的驗證方式並不完全公開,規則也可能調整,所以“現在没被發現”不等于長期安全。
入口頁分流最容易踩的三個坑
1. 蜘蛛拿到的是空壳
如果分流規則寫错,爬虫 UA 命中了没有連結的模板,入口頁相当于白做:頁面能被抓,但里面的目标 URL 一個都發現不了,URL 發現的鏈路直接断掉。
2. 蜘蛛拿到一堆連結,訪客看不到
反過来,如果連結只對爬虫可见、真人訪問看不到,這種差异一旦被识別,可能被判定為刻意操纵抓取,進而影响整站或相關域名的信任度,處理起来比重新做個入口頁麻烦得多。
3. 分流規則不稳定,抓取结果来回變
爬虫 UA 會更新、IP 段會變化、CDN 與源站的判断逻辑也可能不一致。同一條 URL 今天返回 A 版、明天返回 B 版,搜尋引擎需要反复重抓才能確認内容,抓取预算被浪費,入口頁的稳定性也會變差。
哪些“差异化”和伪装不是一回事
- 响應式布局與设备适配:内容主体一致,只是排版方式不同。
- A/B 測試:短期、可控,且通常不會专门针對爬虫做單獨分支。
- 按地区或語言重定向:稳定地跳到對應語言版本,各版本都能被獨立抓取。
- 按 UA 给爬虫單獨一份連結列表:這是最容易被判定為伪装的形式,建议避免。
怎么自查有没有踩线
- 用常见搜尋引擎的 UA 和普通浏览器 UA 各抓一次同一個入口頁,直接對比返回的 HTML 差异。
- 查服務器日誌,核對来訪 IP 與 UA 是否匹配,顺便筛掉假蜘蛛。
- 用站長平台提供的網址检查或抓取測試工具,看搜尋引擎實际拿到的 HTML 是什么。
- 確認 CDN、WAF 或反向代理没有在中間层改寫响應内容或狀態碼。
如果两套内容差异很大,比較稳妥的思路是先假设“搜尋引擎看到的那一版才是真實的你”,在這個基础上设計入口頁,而不是為爬虫單獨定制一份。
更稳妥的處理方式
把目标連結放在服務端就能渲染出来的 HTML 里,對所有訪問者保持一致;确實需要按地域或語言分發时,用稳定的 301 跳到對應版本,並保證每個版本都能被正常抓取;不要用爬虫 UA 作為開關来判断“该给谁看什么”。入口頁的價值在于让 URL 被稳定發現,而不是和爬虫玩捉迷藏。
小结
按 UA 或 IP 分流本身不是技術难题,难的是它带来的不确定性:蜘蛛看到的、訪客看到的、以及搜尋引擎最终索引的,可能不是同一個頁面。與其把精力花在识別爬虫上,不如把入口頁做成對所有訪問者都一致、结构清晰、連結可抓的頁面,再配合日誌观察抓取情况,逐步調整。