运营蜘蛛池时,一個常被忽略的细节是:同一個目标頁面,在入口頁里往往被寫成了好几個不同的 URL。比如有的入口頁寫 example.com/page,有的寫 example.com/page/,還有的带上 ?from=xxx 之類的參數。這些形式在浏览器里看起来一样,但對搜尋蜘蛛来说,它們是不同的字符串。連結哪一個,會影响抓取效率,也會影响後續對頁面的判断。
URL 變体一般從哪来
- 大小寫不一致,例如 Page 與 page 被当成两個地址。
- 结尾斜杠的有無,目錄形式和文件形式混用。
- 协议與域名前缀不统一,http 與 https、带 www 與不带 www 並存。
- 跟踪參數、渠道參數被直接寫進連結。
- 列表頁的排序、篩選、分頁參數。
- 會话 ID、临时 token 這類動態參數。
- URL 中含中文或空格,未做统一编碼。
這些變体多半不是刻意造成的,而是編輯入口頁内容时随手複製、不同批次模板不统一带来的。數量不多时看不出問题,入口頁一多,同一條連結就會出現好几種寫法。
搜尋引擎會怎么處理這些變体
一般原則是:URL 本身是抓取和索引的基本單位。對于參數類 URL,搜尋引擎有參數處理机制,會尝试识別哪些參數不改變内容;對于 http 與 https、带與不带 www,通常會依據重定向和規范声明来归並。但這些處理是黑盒,且不保證一定生效。
如果入口頁把多種變体一起連結出去,可能出現的结果是:同一份内容被多次抓取,抓取配額被摊薄;頁面收到的信号被拆分到几個地址上;日誌里看起来抓取量不少,實际覆盖的獨立頁面却没有增加。所以更稳妥的做法是,從源头就只輸出一種形態。
入口頁連結时的几條實用原則
- 先确定規范 URL。每個目标頁面選定一個固定寫法,包括协议、域名前缀、路径层級和结尾斜杠,然後寫進模板,所有入口頁统一使用。
- 入口頁里不要带跟踪參數。渠道統計、来源标记放在跳轉层或統計工具里處理,不要出現在最终抓取的連結上。
- 變体该跳轉就跳轉。如果舊連結已经存在,用 301 指向規范 URL,而不是让两個地址同时可訪問。
- 無法跳轉时用規范声明。參數頁、篩選頁這類必须保留的地址,在頁面里用 canonical 指向規范 URL。
- 同一入口頁只出現一種寫法。不要在一個入口頁里既列出規范 URL,又列出它的參數版本。
參數類 URL 要特別留意
排序、篩選這類參數通常不改變頁面主体内容,但會被当作新 URL 抓取。如果入口頁大量連結這類地址,抓取會明顯偏向參數组合,真正想推的目标頁面反而被挤掉。可行的做法是:入口頁只連結無參數的規范地址,需要跳轉的部分交给頁面内部的連結结构去處理。
怎么確認變体有没有被分開抓取
最直接的办法是看服務器日誌。按 URL 路径前缀或參數特征做一次分组統計,观察同一路径下有多少種寫法被訪問過、各自被抓了多少次。如果發現同一路径存在多個高频變体同时被抓,說明入口頁或站内連結里還残留着不统一的寫法。
也可以在站内搜尋或抓取工具里查一下,看看带參數的地址是否被單獨返回了内容。如果返回内容和規范 URL 完全一致,却各自被訪問,那基本就是變体分散抓取的情况。
几個容易踩的点
- 以為搜尋引擎一定會自動归並,于是不做统一處理。
- 把參數 URL 当作額外入口頁使用,短期看似增加了連結量,實际增加了重复抓取。
- 只改了新入口頁的模板,舊入口頁没有回改,變体繼續存在。
- 锚文本和目标 URL 指向的形態不一致,容易让人誤判連結是否正确。
URL 變体的统一是件前期花時間、後期省事的活。入口頁數量越少越容易改,數量一多,清理成本會成倍上升。與其事後靠日誌去猜哪些變体被抓,不如在生成連結时就把寫法固定下来。