蜘蛛池里的入口頁往往一批就是几百上千個,URL 是這批頁面里最容易埋雷的地方。它决定蜘蛛抓到連結时怎么入队、怎么判重,也决定後面看日誌时你能不能分辨出問题。規則没定好,改一次就是全站跳轉的代價。
URL 结构影响的不只是好看
搜尋引擎的抓取队列以 URL 為單位。同一個内容如果存在多個地址,抓取量會被摊薄;层級過深、參數過多的地址,則可能在入队後長時間排不到。入口頁本身内容價值有限,它的 URL 主要承担两件事:让蜘蛛顺利訪問,以及让一個頁面只對應一個地址。
目錄层級:两层到三层比較稳
常见做法是根目錄下放一层分類,再放一层列表,入口頁落在第三层:
- 根目錄直放:數量一多顯得杂乱,也不方便按批次管理
- 一层目錄:按批次或類型分组,例如 /a/、/set1/
- 两层目錄:再加一层细分,例如 /a/2024/
- 三层以上:人和蜘蛛都要多点几次,建议只留给真正要归档的内容
层級深不一定抓不到,但同一批頁面的處理速度通常不齐,浅层的往往先被訪問。如果你希望某一批先被看到,就把它放浅一点。
參數:能變成路径就別留在問号後面
带參數的地址容易产生组合爆炸。如果来源參數不同就生成新地址,蜘蛛會当成新頁面反复抓。
- 固定參數顺序,不要同一個頁面出現两種排列
- 去掉與内容無關的追踪參數,或在服務器层统一跳轉
- 參數确實需要时,用 canonical 指向不带參數的版本
- 分頁尽量用路径形式,如 /list/2/,比 ?page=2 更容易被稳定识別
命名:短、唯一、有迹可循
命名不需要漂亮,但要满足唯一和可判断。纯随机串(如 x7f2kd9)可以唯一,但你在日誌里很难一眼看出它属于哪一批;關鍵詞堆砌(如 seo-seo-1)則容易被当成低质頁面。
- 用有意义的短标识加自增编号,例如 /a/tech-001.html
- 统一小寫,單词之間用连字符,不用下划线
- 是否带结尾斜杠、是否带 .html 後缀,全站保持一致
- 同一含义不要同时出現拼音和英文两套寫法
大小寫與结尾符号经常被忽略
服務器区分大小寫时,/Page/1 與 /page/1 是两個不同地址,會各占一次抓取。建议在服務器层做强制跳轉,把大小寫和结尾斜杠規范化。
同一内容只留一個地址
入口頁因為套用同一模板,很容易出現标题、摘要相近而地址不同的情况。這时先處理地址层面的重复:
- 確認哪個地址是主版本
- 其他地址用 301 指向主版本,而不是让它們同时返回正常狀態
- 列表頁、标簽頁如果只是聚合,考虑是否需要被單獨抓取
改 URL 结构前先想清楚代價:老地址直接返回 404,之前的抓取记錄基本清零;用 301 過渡能减少损失,但也不能保證恢复到原来的狀態。
几個實际會踩的坑
- 入口頁 URL 里带中文:技術上可行,但编碼後不好讀,日誌排查麻烦
- 批量生成时编号跳号或重复,導致部分地址長期没人訪問
- 測試环境留下的 /test/、/demo/ 被蜘蛛抓到,占用抓取量
- URL 里带會话 ID 或時間戳,每次訪問都生成新地址
落地建议
批量生成之前先把規則寫下来:层級上限几层、是否带後缀、參數怎么處理、编号從几開始。規則确定後不要频繁改動,後續新增批次沿用同一套结构。這样日誌里的 URL 才有可比性,你也才能從抓取資料里看出哪批頁面真的被處理了。