蜘蛛池知识

蜘蛛池入口頁的 URL 归一:參數、大小寫與结尾斜杠怎么统一

蜘蛛池入口頁的重复抓取,很多並不是蜘蛛来得太勤,而是同一頁存在多種 URL 寫法:跟踪參數、大小寫差异、结尾斜杠都會让蜘蛛把它当成多個地址。本文說明這些變体從哪里来、该在服務器层還是模板层處理,並给出一套可以照着走的检查顺序,用来减少無效請求、看清真實抓取情况。

蜘蛛池知识

蜘蛛池入口頁的 URL 归一:參數、大小寫與结尾斜杠怎么统一

入口頁的 URL 形態,為什么值得單獨说

蜘蛛池的作用是让搜尋引擎蜘蛛持續發現並訪問一批入口 URL。如果同一個頁面存在多種 URL 寫法,蜘蛛很可能把它們当成不同地址反复抓取:日誌里的請求數看着不少,實际訪問的却是同一份内容。這既占用了抓取額度,也让後面判断抓取情况时看不出真實面貌。

URL 归一不是為了让地址好看,而是為了让蜘蛛的每一次請求都落在真實存在的頁面上。

參數:能不带就不带

參數是最常见的重复来源。同一個入口頁,挂在不同的查询串後面,對蜘蛛来说就是不同的 URL。

  • 跟踪參數:utm_source、from、ref 這類用于統計或标记来源的參數,最好只出現在對外推廣連結里,不要寫進頁面内鏈和 sitemap。
  • 排序與篩選參數:?sort=、?page= 這類可以组合出大量變体。如果這些變体頁面主体内容基本相同,考虑用 robots 或 canonical 收敛,而不是任由它們铺開。
  • 纯前端狀態參數:只為交互服務的參數,尽量改成路径片段,或者干脆去掉。

判断标准很简單:這個參數換個值,頁面主体内容是否真的不同?答案是否,就不该让它成為一個可獨立抓取的地址。

大小寫與结尾斜杠

服務器和部分 CDN 對大小寫敏感,/Entry/ 與 /entry/ 可能對應两份缓存,也可能指向同一份内容。结尾斜杠同理:/page 和 /page/ 在不少配置下會各返回一次 200。

處理方式選一種坚持到底即可:

  • 在服務器层做 301 归一,把變体统一跳到選定寫法;
  • 頁面内所有連結、sitemap、跳轉目标统一使用同一寫法,不给蜘蛛發現變体的机會。

两種方式可以叠加,但不要一邊做 301、一邊又在模板里輸出另一種寫法,否則等于自己制造新的變体。

URL 编碼與特殊字符

中文、空格、百分号编碼在不同环节容易出岔子。建议入口頁路径尽量使用小寫英文加连字符,避開中文路径、空格以及需要二次编碼的字符。如果确實要用,确保内鏈、跳轉、sitemap 三處的编碼方式一致,不要一處用原始字符、一處用 %E4%B8%AD 這样的形式。编碼不一致时,蜘蛛會把它們视為两個地址,抓两次,讀到的却是同一頁。

内鏈一致性是成本最低的收敛手段

蜘蛛顺着連結走。如果同一個入口頁在站内被三種寫法連結過,等于主動告诉蜘蛛這里有三個頁面。把導航、列表頁、正文内鏈、面包屑里的 URL 统一成一種寫法,往往比逐頁調整内容更快见效,改模板通常比改内容省事。

一個可以照着走的检查顺序

  1. 從抓取日誌里提取被訪問的入口 URL,去掉查询串後統計重复情况。
  2. 把重复度高的地址挑出来,確認是參數、大小寫還是斜杠造成的。
  3. 先在服務器层做 301 或统一規則,再回头改模板里的連結寫法。
  4. 更新 sitemap,只保留归一後的地址。
  5. 過一段時間再從日誌核對,看變体請求是否减少。
請求數下降不一定代表抓取變差,很多时候只是把重复的那部分挤掉了。真正要看的是归一後的地址有没有被稳定訪問。

容易踩的几個坑

  • 只加 canonical 而不改内鏈:蜘蛛仍會反复抓取變体,只是信号被合並,日誌里的無效請求依然存在。
  • 301 鏈太長:A 跳 B 再跳 C,蜘蛛跟到中途可能就停止,直接跳到最终地址更稳妥。
  • 改完马上要结论:抓取习惯的調整需要時間,观察窗口太短容易誤判方向。

把這些细节固化成模板規范之後,入口頁的维護會轻松很多——新增一批 URL 时,不必再逐個检查寫法,也更容易從日誌里看清哪些地址真正被蜘蛛接受。