搜尋抓取

同一個頁面被寫成三個 URL:大小寫、斜杠與编碼怎样影响蜘蛛抓取

蜘蛛在頁面上拿到的是一串連結字符串,而不是已经確認的頁面。大小寫、结尾斜杠、URL 编碼、參數顺序這些寫法差异,會让同一份内容被拆成多個地址,既浪費抓取請求,也分散頁面信号。本文梳理常见寫法坑、蜘蛛不會去請求的連結形式,以及把地址收口到唯一版本的實操步骤。

搜尋抓取

同一個頁面被寫成三個 URL:大小寫、斜杠與编碼怎样影响蜘蛛抓取

蜘蛛在頁面上看到連結时,拿到的是一串字符,而不是一個已经確認過的頁面。它只能照着這串字符去發請求。所以連結寫法的差异,會直接變成抓取行為的差异:同一份内容可能被請求三次四次,也可能因為寫法不對而压根没人請求。

蜘蛛眼里的 URL 只是字符串

在浏览器里,很多寫法差异會被自動抹平:大小寫會自動纠正,多余斜杠會被忽略。但蜘蛛不會替你猜,它抓的是字符串本身。下面這几類差异最常见。

主机名與路径的大小寫

按規范,域名不区分大小寫,路径区分大小寫。但不少服務器是大小寫不敏感的,于是 /About 和 /about 都能返回 200。蜘蛛看到两個不同字符串、两個都是正常頁面,就會分別抓取、分別入库。同一份内容被记成两條记錄,内鏈權重也被拆開。

结尾斜杠

/page 和 /page/ 也是两個字符串。如果服務器對两者都返回 200 而不做重定向,蜘蛛就會把它們当成两個地址。這類問题在栏目頁、标簽頁上尤其多,因為不同編輯、不同模板輸出的寫法可能不一致。

中文、空格與百分号编碼

同样一個标簽頁,可能被寫成原始中文,也可能被寫成百分号编碼形式,還可能把空格寫成加号。對蜘蛛来说這是三個字符串。搜尋引擎通常會做一定程度的编碼归一,但归一不是保證,尤其是编碼层級不同、字符被二次编碼时。

參數顺序與無用參數

?a=1&b=2 和 ?b=2&a=1 指向的内容完全一样,字符串却不一样。再加上排序參數、来源追踪參數、分頁參數的不同排列组合,一個列表頁可以轻易膨胀出几十個地址。

相對路径與多余的路径符号

相對路径、以双斜杠開头的寫法、路径里插入的点号,蜘蛛都會尝试解析。解析结果有时和你以為的地址並不一致,特別是頁面本身层級較深、或者被放在不同目錄下渲染时。

哪些寫法蜘蛛基本不會去請求

除了重复,還有一類問题更直接:連結根本没被当成連結。

  • 用脚本事件挂上去的假連結,没有可用的地址属性。
  • 只寫了井号或空值的锚点,指向目前頁面自身。
  • 邮件、电话协议開头的地址,不属于網頁抓取范围。
  • 表單提交、按钮点击後才生成的跳轉,不产生可抓取的連結。
  • 纯文本粘贴的地址,没有可点击标记,被识別的概率不稳定。

這些寫法在用戶视角能点、能跳,但在抓取视角里,路径就断在這里。

把每個頁面收口到一個地址

與其事後分析重复抓取,不如在輸出环节就统一。可以按這個顺序處理:

  1. 為每類内容确定唯一标准寫法,包括大小寫、是否带结尾斜杠、编碼方式。
  2. 在服務器层面對變体做永久重定向,重定向比注释類声明更硬。
  3. 统一内鏈輸出,让模板、面包屑、相關推荐都走同一套地址規則。
  4. 用規范化声明做兜底,處理那些無法重定向的變体,比如带追踪參數的地址。
  5. Sitemap 里只放标准版本,不要把變体也列進去。

顺序很重要:先重定向、再统一内鏈,最後才是声明。把所有希望都压在一行声明上,效果通常不理想。

上线前後可以做的几項检查

  • 翻抓取日誌,按路径統計大小寫變体、斜杠變体各被請求了多少次。
  • 抽查栏目頁和标簽頁,看同一目标是否混用了两種寫法。
  • 把内鏈里出現的地址與 Sitemap 對照一遍,看有没有對不上的。
  • 检查參數拼接逻辑,固定參數顺序,去掉無意义的空參數。
  • 看服務器是否對變体返回了重定向,還是直接给了 200。
抓取资源不是省出来的,是別浪費出来的。同一份内容被寫成多個地址,是最容易被忽视的一種浪費。

連結寫法看起来是前端细节,落到抓取上却是很實在的路径問题。把地址收口這件事做干净,蜘蛛拿到的路径更短、更明确,站点也少了一堆重复的抓取记錄。