一個網站地圖 URL 擷取工具會把 urlset 或 sitemapindex XML 檔案中的 loc 值,轉成一份去重複、一行一個 URL 的清單,讓你可以貼到試算表、爬蟲佇列或稽核檢查表中。整個擷取過程都在瀏覽器中完成——你把 XML 文字貼到編輯器,解析器讀取 loc 子元素,透過瀏覽器的 URL 實作將每個值標準化,然後以第一次出現的順序回傳不重複的項目。Sitemap URL Extractor 嚴格遵循 Sitemaps 通訊協定:它只接受兩種核心結構 (urlset 與 sitemapindex),會忽略 XML 宣告與註解,支援一致的命名空間前綴 (例如 sm:urlset),並拒絕修復格式錯誤的輸入。第一次出現的順序會被保留下來,讓你可以逐行比對輸出與來源。因為什麼都沒有上傳,所以上線前的 URL 清單與測試環境的網站地圖都會留在你的裝置上,除非你自己把結果複製到別處。

當你在稽核一個經過多年成長的網站時,網站地圖通常是該網站本身希望被爬取的最權威頁面清單。把它攤平成一份清單,是重新導向對應表、內容檢視、索引狀態研究與移轉檢查的起點。這裡所介紹的工具正是為這個第一步所打造——取得一份乾淨的清單,交給下一個流程處理。

extract links from sitemap
從網站地圖擷取連結以進行稽核與移轉

Sitemap URL Extractor 的功能

這個工具圍繞著單一輸入格式運作:一次一個完整的 XML 檔,以文字形式貼上,可以是 urlset 形式,也可以是 Sitemaps 通訊協定定義的 sitemapindex 形式。對於 urlset 輸入,每個頁面項目必須包含一個直接的 loc 子元素;對於 sitemapindex 輸入,每個 sitemap 項目必須包含一個直接的 loc 子元素。選用的子元素 (例如 lastmod) 雖然會被讀取,但不會改變擷取出來的位置;而像 image:loc 這類延伸元素,絕不會被用來取代缺少的頁面 loc,因為它們描述的是不同的資源。

擷取完成後,結果面板會回報四項你可以採取行動的資訊:偵測到的根類型、接受的不重複 URL 數量、被移除的標準化重複項目數,以及完整的去重複清單本身。一個複製按鈕會把該清單放到剪貼簿,以供後續使用——爬蟲佇列、試算表匯入、重新導向稽核,或與前一個版本進行比對。解析過程在本地進行:XML 文字絕不會離開瀏覽器,這個小工具也不會發出任何網路請求。當網站地圖指向內部測試主機、草稿目錄,或你不希望外洩的上線前 URL 清單時,這一點就格外重要。

三步驟從網站地圖擷取連結

  1. 貼上 XML。在文字編輯器中開啟網站地圖檔,從一個 urlset 或 sitemapindex 檔案中選取完整的 XML 文字,然後貼到編輯器中。不要貼上遠端 URL——這個小工具不會去擷取任何東西,而貼上的文字讓你可以完全掌控被解析的內容。
  2. 擷取並檢視指標。執行擷取。結果面板會顯示找到了哪一種根類型 (urlset 或 sitemapindex)、接受了多少個不重複的 URL、移除了多少個標準化重複項目,以及以第一次出現的順序排列的完整去重複清單。如果執行失敗,錯誤訊息會指向一個特定的編號 loc 或項目,讓你可以修正來源,而不是默默地略過。
  3. 複製清單並執行後續檢查。使用複製按鈕把這份一行一個 URL 的清單放到剪貼簿,然後把它送進即時狀態檢查器、canonical 比較、robots 檢視或索引查詢中。擷取只能確認網站地圖所說的內容;剩下的則是另外一次針對實際網站的檢查。

輸出實際上會顯示哪些內容

這個擷取工具會顯示關於每次執行的一小組可靠事實。了解你解析的是哪一種根類型,就能決定你的清單包含的是頁面 URL,還是 sitemap 檔案 URL——這兩種在後續處理上的行為差異很大。

面向urlset 輸入sitemapindex 輸入
根元素urlsetsitemapindex
每個項目內的 Loc 路徑url → locsitemap → loc
清單所代表的內容要爬取或稽核的頁面 URL要另外擷取並解析的 sitemap 檔案 URL
接受處理的選用子元素lastmod、changefreq、priority (僅讀取)lastmod (僅讀取)
由工具處理的遞迴不適用無——不會擷取或展開子檔案
常見的下一步與 canonical、analytics 或索引狀態資料進行比對把每個子 sitemap 再貼回同一個工具

重複項目數這一行比看起來更有用。它會計算被瀏覽器標準化為相同值的 URL——例如大小寫混用的主機名稱、http URL 上明確寫出的預設連接埠 (例如 :80),或是同一個路徑的兩種 percent-encoded 變體。如果重複數量意外地高,通常代表來源 sitemap 中的標準化方式不一致。

擷取出來的清單在什麼時候值回票價

當你把輸出當作大型稽核中的一個輸入 (而非最終答案) 時,它最能發揮價值。常見的後續用途包括:

  • 移轉期間的重新導向稽核。把清單與你的重新導向對應表排序比對,找出對應到同一目的地的頁面、完全沒有對應的頁面,以及對應到自己的頁面。
  • 爬蟲檢查清單。把清單交給無頭爬蟲、記錄檔,或需要網站所宣稱之每一個 URL 的伺服器端腳本。
  • 試算表匯入。一行一個 URL 是大多數試算表和 CSV 在單欄匯入時所預期的格式。
  • 與前一個版本進行比對。把目前的清單與前一版的清單進行 diff,找出新增、移除或變更的位置。
  • 與 canonical 及 analytics 來源交叉檢查。與資料庫中的 canonical URL、爬取結果或 analytics 登陸頁進行比對,可以凸顯出網站地圖與實際網站不一致之處。

這個工具不會檢查的事項

擷取只能確認在貼上的 XML 中出現了一個有效的 loc,且通過了工具所揭露的驗證。它不會確認以下任何一項,這些全都需要對網站發出即時請求:

  • HTTP 狀態、重新導向或回應碼
  • canonical 標籤、robots 指令或 noindex 規則
  • 搜尋引擎是否接受了來源檔案
  • 該 URL 是否可被爬取、有價值、已被索引或排名
  • 磁碟上的 UTF-8 位元組大小、所有權或內容品質

Sitemaps 通訊協定與 Google 說明文件都把 sitemap 描述為探索提示,而非索引的保證。根據 Google Search Central 的 sitemap 指南,一份正確格式化的 sitemap 能幫助爬蟲探索 URL,但並不保證會被索引。把擷取出來的清單當作大型稽核中的證據,而不是最終裁決。

貼上之前先準備好 sitemap

有幾個邊角情況會讓直接貼上真實世界的 sitemap 的人踩坑。事先處理這些狀況,可以把令人困惑的失敗變成一次乾淨的執行。

  • 壓縮的 .gz 檔案必須先解壓縮。解析器讀取的是文字,所以在貼上之前,請在終端機中用 gunzip 解壓,或用本機的壓縮工具處理。
  • 一次貼一份檔案。一份 sitemap index 是 sitemap 檔案的目錄,而不是一個遞迴的整包內容。先貼上 index 以取得子 sitemap 的 URL,然後再分別貼上每個子檔案以取得頁面 URL。
  • 自訂的 DTD 與實體宣告會導致執行失敗。解析器刻意拒絕 DTD 宣告與自訂的實體宣告,避免讓實體展開變成隱藏的產品邏輯。如果你可以控制來源,請把這些內容移除。
  • 注意大小限制。這個小工具最多接受 50,000 個不重複的 URL,以及五百萬個 UTF-16 輸入碼元。超過任一上限會讓整次執行失敗,而不是截斷處理。如果實際運作的 sitemap 接近通訊協定所規定的 50 MB 未壓縮上限,請驗證實際的未壓縮位元組大小,並考慮把它拆成較小的檔案,再用一個 sitemap index 來引用。
  • 無效的 loc 值會導致整次執行失敗。每個解碼後的 loc 必須是長度小於 2,048 字元的絕對 HTTP 或 HTTPS URL,不能包含憑證、片段、未編碼的空白字元、格式錯誤的 percent escape 或反斜線。瀏覽器無法解析的 URL 會觸發 fail-fast 錯誤,並指向該編號項目,而不是默默地略過。

如果你在貼上之前需要從遠端 sitemap 取得 XML 文字,比較實際的做法是透過瀏覽器的「檢視原始碼」或「另存網頁」來下載,在本地解壓縮,然後再貼上檔案內容。一份關於如何以純文字形式取得網站 sitemap XML的獨立指南,會逐步說明如何下載可公開存取、需要驗證,或是經過壓縮的 sitemap。

延伸閱讀:從已審核的 URL 清單建立經過驗證的 sitemap.xml