站点运营

站点运营:搜尋蜘蛛的URL發現,從 RSS 與 Atom 订阅源说起

RSS 與 Atom 订阅源常被当成面向讀者的過时功能,但它其實是一份结构固定、体积很小的持續更新連結清單。本文說明條目 link、guid、pubDate 等字段如何影响 URL 發現,梳理相對路径、缓存過期、多語言混排等常见配置問题,並给出與 Sitemap 和内鏈的分工思路與检查清單。

站点运营

站点运营:搜尋蜘蛛的URL發現,從 RSS 與 Atom 订阅源说起

不少站点把 RSS 当成上一個时代的产物:後台還留着開關,前台早就撤了入口,订阅源本身也常年不更新。但如果從 URL 發現的角度看,订阅源仍然是一件很划算的工具——它是一份格式固定、体积很小、持續更新的連結清單,爬虫解析它的成本遠低于抓取首頁再顺着導航层层深入。

订阅源在 URL 發現里的位置

一個正常的發現路径大致是:首頁或栏目頁被發現,然後顺着内鏈、站点地图、订阅源等入口扩散。订阅源的特点是"新"和"少":它通常只保留最近几十條内容,正好對應站点刚刚更新的那部分 URL。對于更新频繁、栏目众多的站点,订阅源能起到一個轻量索引的作用。

需要注意的是,订阅源只是入口之一,它决定的是"這條 URL 有没有被看到",而不是"會不會被收錄"。能不能被收錄,最终還要看内容质量、頁面可訪問性和站点整体的信任度。

影响 URL 發現的几個字段

  • item 的 link:這是最重要的字段,必须寫成绝對地址,且與頁面的 canonical 保持一致。相對路径在部分解析器里會被拼错,直接導致抓取失敗。
  • guid / isPermaLink:用来标识條目唯一性。如果 guid 不是連結,最好顯式声明 isPermaLink="false",避免解析器把一段哈希值当成網址去請求。
  • pubDate 與 lastBuildDate:影响爬虫判断"這份源有没有變化"。日期長期不變,抓取频次自然會下降。
  • description:只放摘要,不要把整篇正文、大量内联样式或脚本塞進去,否則文件体积會迅速膨胀。
  • enclosure:附件、音视频下载連結如果放在這里,同样會被识別為可訪問资源,注意別把後台接口暴露出去。

全量輸出還是增量輸出

常见的错誤是把整個站点的所有文章都塞進一個 feed。文件一旦涨到几兆,解析和传輸都變得沉重,反而降低了更新部分的可见度。更稳妥的做法是保留最近 20 到 50 條,同时按栏目拆分出若干子源,让每條 URL 都能出現在與其相關的上下文里。

缓存與生成时机

如果订阅源是動態生成的,要確認它不會因為查询過重而超时;如果做了静態缓存,缓存時間不宜设得太長,否則新發布的 URL 要等很久才會出現在源里,白白浪費了發布後的黄金时段。發布文章後主動触發一次订阅源重建,是個成本很低的习惯。

常见的翻车現场

  • 订阅源放在需要登入或带訪問限制的目錄下,爬虫只能拿到 403。
  • 多語言站点把几種語言的條目混在一個源里,連結指向混乱,還容易触發語言版本之間的重复問题。
  • 编碼没有统一為 UTF-8,标题里的中文變成乱碼,連結里的參數也可能被截断。
  • 源里残留已刪除、已下线的舊 URL,長期返回 404,消耗抓取预算。
  • 把草稿、预览連結、測試环境的地址誤寫入條目,等于给爬虫指错路。

和 Sitemap、内鏈怎么分工

订阅源负责"新",Sitemap 负责"全",内鏈负责"關系"。三者用途不同,不必互相替代,也不该让其中任何一份長期處于無人维護的狀態。

Sitemap 适合覆盖全站可索引頁面並标注更新時間;订阅源适合突出最近更新;内鏈和面包屑則告诉爬虫頁面之間的层級和相關性。日常运营中,只要保證這三條通道的 URL 一致、可訪問、没有互相矛盾的狀態碼,URL 發現环节基本不會出大問题。

日常检查清單

  1. 浏览器直接打開订阅源地址,確認能正常返回内容且没有登入拦截。
  2. 随机挑几條連結点進去,確認都是绝對地址、能返回 200、canonical 指向自身。
  3. 检查條目數量是否被截断,日期是否随發布更新。
  4. 對比订阅源與 Sitemap 中的 URL 集合,找出只在一方出現或已经失效的地址。
  5. 確認编碼、命名空間声明正确,避免解析器报错。
  6. 把订阅源地址登记在站点的明顯位置,方便自己也方便別人找到。

订阅源不是什么神奇手段,它更像一根被遗忘的线头。重新把它接上、保持干净、跟随發布节奏更新,URL 發現這條鏈路就少了一個容易漏水的环节。