站点运营

站点运营:URL 大小寫、尾斜杠與主机名,同一頁別留多個地址

http 與 https、带 www 與不带、末尾有無斜杠、大小寫混用、參數顺序不同,都可能让同一篇内容出現好几個可訪問地址。地址一多,權重被摊薄,抓取也更容易浪費。本文梳理這些邊角情形的自查方法與统一處理顺序。

站点运营

站点运营:URL 大小寫、尾斜杠與主机名,同一頁別留多個地址

同一篇内容在服務器上往往可以有好几種寫法被訪問到:带 www 和不带 www、http 和 https、末尾有斜杠和没斜杠、大寫和小寫。對用戶来说這些地址几乎没差別,但爬虫會把它們当成不同资源。地址一多,抓取预算被摊薄,外部連結带来的權重也會分散到几個副本上。下面聊的是 URL 規范化里那些容易被放過的邊角。

一頁多址的常见来源

主机名與协议

http://example.com、https://example.com、https://www.example.com 三個地址常常都能打開同一個首頁。如果三者都返回 200,就等于告诉爬虫這里有不止一份内容。做法是先确定一個正式主机名,其余全部 301 到它,並且跳轉一步到位,不要 301 之後再 301。

路径大小寫

域名部分不区分大小寫,路径部分在多數服務器上区分。寫成 /Article/1 和 /article/1,可能對應两個资源,也可能一個 200 一個 404。連結里随意使用大寫,同一頁就會在不同位置出現两種形態。建议路径统一小寫,已经存在的混用地址做 301 归並。

末尾斜杠

/about 和 /about/ 在有的配置下返回同样内容,有的則一個正常一個报错。重点不是谁對谁错,而是站内寫法要统一,另一種形式 301 到正式形式,別让两種都被連結和站点地图同时引用。

預設文件名

/ 與 /index.html、/list/ 與 /list/index.php 也经常同时可訪問。保留一個,其余重定向,否則首頁會凭空多出一份影子地址。

端口号

不带端口、:80、:443 混用,理论上同样會产生變体。測試环境遗留在正式站上的端口地址尤其要清掉。

參數顺序與追踪參數

?a=1&b=2 和 ?b=2&a=1 在服務器看来是两個不同的字符串。再加上 utm_source、from=share 這類分享參數,一個列表頁能被生成出几十個地址。處理办法有两種:用 canonical 指明主地址,或者在服務器层面忽略這些參數並 301 到干净版本。注意做規則时別誤伤功能參數,比如分頁和篩選。

自查可以怎么做

  1. 從服務器日誌取一周資料,筛出蜘蛛的訪問记錄,按返回 200 的地址統計,看有多少组路径像是同一頁的不同寫法。
  2. 抽查站内連結:主導航、面包屑、正文内鏈、站点地图四處各取几個頁面,比較導出連結的寫法是否一致。
  3. 手動訪問可疑地址,確認狀態碼與頁面内容是否和正式地址一致。
  4. 用抓取工具批量跑几十個样本地址,记錄最终落地地址,看跳轉鏈有几跳。

處理顺序:先统一,再兜底

统一是指站内所有連結、站点地图、canonical 标簽都寫正式形式,让新产生的地址從一開始就是干净的。兜底是指服務器對舊形式做 301,把已经被外部引用、被用戶收藏的地址也接回来。canonical 只是提示,替代不了跳轉,两者一起用會更稳。

几個容易踩的坑

  • 只改了首頁,内頁没管,爬虫依舊從舊列表、舊外鏈里發現老地址。
  • 跳轉規則里留了中間站,多一跳就多一次等待,移動端用戶感受更明顯。
  • 在区分大小寫的服務器上,用不区分大小寫的規則把两個真實存在的頁面合並成了一個 404。
  • 给带參數的地址做 301 时寫得太宽,把正常的分頁、篩選參數一起挡掉。
規范化不是一次性的整理工作,而是新連結产生时就要遵守的規則。寫法统一了,後面的重定向清單才不會越滚越長。

把主机名、大小寫、尾斜杠、預設文件名、參數這几處的規則定下来,寫進团队的内容與開發约定,比事後一批批补 301 省力得多。