站点运营

站点运营:URL 大小寫與尾部斜杠自查,別让同一個頁面變成好几個地址

同一篇内容出現大小寫、尾部斜杠、www 等多種寫法时,搜尋蜘蛛會把它們当成不同地址,抓取和資料統計都會被分散。這篇文章讲怎么從日誌、站内連結和 sitemap 里找出這些變体,如何定一個主形式並用 301 统一,以及改完之後该观察什么。

站点运营

站点运营:URL 大小寫與尾部斜杠自查,別让同一個頁面變成好几個地址

很多站点排查抓取問题时,會先去看連結、sitemap 和 robots,却忽略了一個更底层的問题:URL 本身的形式並不统一。同一篇内容,可能同时存在带 www 和不带 www、大寫和小寫、带尾部斜杠和不带尾部斜杠等好几種寫法。對訪客来说它們長得差不多,對搜尋蜘蛛来说却是几個不同的地址,抓取预算、外鏈權重、資料統計都會被摊薄。

URL 為什么會分叉

分叉通常不是有人故意做的,而是歷史遗留和分工不同造成的。

  • 建站时用了混合大小寫的目錄名,後来改版又改成全小寫;
  • CMS 生成的列表頁带尾部斜杠,詳情頁不带;
  • 运营在文章里手寫連結,随手複製了浏览器地址栏里的那個版本;
  • 不同渠道的推廣連結、外鏈、QR Code指向了不同變体;
  • 服務器對大小寫不敏感,几種寫法都能返回 200,問题就被掩盖了。

最後一点是關键:只要服務器把各個變体都当成 200 正常返回,這個問题就不报错,只會慢慢积累。

先摸清現状:變体到底有哪些

從服務器日誌里找

把一周左右的日誌按請求路径去重、排序,重点關注含大寫字母的路径、结尾斜杠形式,以及重复出現的追踪參數。如果同一篇内容對應多條路径且都返回 200,基本可以確認存在分叉。

從站内連結里找

用站内爬取工具跑一遍,導出所有被連結到的 URL,按大小寫和斜杠形式分组。站内連結是自己完全可控的部分,也是最该先统一的部分。

從 sitemap 里找

sitemap 里如果混着两種寫法,等于主動告诉蜘蛛這里有两個地址。這個位置問题往往最集中,改起来也最直接。

定一個主形式,再统一

原則很简單:每類内容路径只保留一種寫法,其它寫法一律 301 到主形式。需要明确下来的包括:

  1. 域名层:是否带 www、是否强制 HTTPS,只留一個;
  2. 路径层:是否全站统一小寫;
  3. 结尾层:目錄頁用不用尾部斜杠,全站一致;
  4. 參數层:能去掉的追踪參數尽量去掉,必须保留的配合 canonical 處理。

定好之後要同步修改的地方不止一處:站内連結、導航與頁脚、sitemap、canonical 标簽,以及能联系到的外部連結。只改其中一處,蜘蛛仍可能從別的地方抓到舊形式。

几個容易踩的坑

  • 用 302 代替 301。临时跳轉传递的信号更弱,也容易被反复抓取,能用 301 就用 301。
  • 重定向鏈拉得太長。大寫版本先跳小寫,再跳去带斜杠的版本,鏈路越長越容易在中間断掉。
  • canonical 指向一個還需要跳轉的地址。規范地址最好是直接返回 200 的最终形式。
  • 在大小寫敏感的服務器上改错。Linux 环境下 /News/ 和 /news/ 可能是两個真實目錄,改連結前先確認實际文件路径,別把頁面改成 404。

改完之後看什么

统一 URL 形式不是一次性動作,改完要观察一段時間:日誌里變体請求是否在减少,301 是否被正常跟随,有没有冒出新的 404。收錄量和排名短期内不會立刻變化,看抓取路径是否收敛更實际。

URL 形式统一属于地基類的工作:做的时候看不出明顯效果,不做的时候,很多抓取和統計問题都找不到干净的原因。