在蜘蛛池里,入口頁的 URL 往往是最先被蜘蛛讀到的信息之一。連結文本和锚文本可以被修饰,但 URL 的结构相對稳定,蜘蛛會用它判断頁面之間的层級關系、是否為重复内容,以及值不值得繼續跟進。很多“蜘蛛来過却不抓”的情况,問题就出在 URL 這一层。
一、目錄层級:扁平一些更省事
同样的内容放在 /a/b/c/d/page.html 和 /page-1234.html,蜘蛛的處理成本並不相同。层級越深,蜘蛛從入口爬到目标頁要经過的跳轉越多,中途断掉或者不再跟進的可能也越大。
對入口頁来说,比較務實的做法是控制在两到三层,同一批入口頁尽量保持相近的深度。
- 尽量让入口頁從少數几個上級頁面就能到達,而不是层层嵌套;
- 不要把入口頁放在只有分頁連結才能抵達的位置;
- 目錄名用简短、可讀的词,避免用日期加随机串堆出四五层。
二、查询參數:URL 數量暴涨的主要来源
參數本身不是問题,問题是參數组合。一個带 ?id= 的頁面通常没問题,但当頁面同时接收排序、分頁、篩選、来源追踪等參數时,同样的内容會派生出一大批不同地址,抓取机會被摊薄,去重压力也随之上升。
常见的几類需要留意:
- 追踪參數:utm_source 之類,對内容没有影响,應统一處理;
- 會话或用戶标识:一旦進入 URL,等于给每個訪客生成一個新地址;
- 排序與篩選參數:内容只是顺序不同,容易被当成多份頁面;
- 空參數與預設值:?page=1 和不带參數往往指向同一内容。
處理方式無非几種:能用静態路径的改用静態路径;必须保留參數的,用 canonical 指明代表頁;對确實無意义的參數,在服務器层拒绝,而不是放任蜘蛛自己判断。
三、命名习惯:可讀、稳定、別乱改
入口頁批量生成时最容易出現纯随机字符串,例如 /x7f3a9b2.html。這類 URL 能被抓取,但從蜘蛛角度看没有任何语义线索,也不利于人工排查。相對好一些的做法是用短词加编号,例如 /topic-0128.html,既保留可讀性,又便于批量管理。
URL 里的關鍵詞對排序的作用有限,但對可讀性和排查效率有實际帮助,不必為了堆词把地址拉得很長。
四、一致性:大小寫、结尾斜杠與协议
下面這些差异,在服務器看来可能是同一個文件,在蜘蛛看来却可能是两個地址:
- 大小寫:/Page.html 與 /page.html;
- 结尾斜杠:/entry 與 /entry/;
- 协议與主机名:http 與 https、带 www 與不带 www;
- 带預設索引文件:/index.html 與 /。
建议在服務器层做统一跳轉,只保留一個版本,其余全部 301 過去。跳轉規則一旦确定就不要再反复調整,避免已经积累的連結全部失效。
五、一份可执行的整理清單
- 統計現有入口頁 URL 的层級分布,找出深度明顯偏高的部分;
- 導出一段時間的訪問日誌,按 URL 去掉參數後聚合,看有多少地址指向同一内容;
- 對重复地址确定一個代表 URL,其余用 301 或 canonical 收敛;
- 检查是否存在會话、追踪參數進入連結的情况,從生成逻辑上切断;
- 確認大小寫、斜杠、协议三處的一致性,並寫進模板規范;
- 後續新增入口頁时,按同一套命名和层級規則生成,不再临时起意。
常见誤区
有人把 URL 结构当成可以事後随便补的東西,先把頁面铺出去,再想整理。實际上 URL 一旦被抓取並進入索引,再改動就要承担跳轉和重新發現的成本。與其事後收拾,不如在生成入口頁的模板里就把規則定下来。
另外,也不要指望靠 URL 命名本身去“催”蜘蛛。它只是让頁面更容易被理解、被去重、被稳定引用,真正的抓取情况仍取决于站点整体狀態、内容更新與連結结构等多方面因素。