網站的 XML sitemap 是一個 UTF-8 檔案,用來列出您希望被索引的頁面,並包裝在一個 urlset 元素中,該元素使用 sitemaps.org 通訊協定中官方定義的 http://www.sitemaps.org/schemas/sitemap/0.9 命名空間。XML Sitemap Generator 會將一份經過審核的頁面 URL 清單轉成完全符合規範的檔案:每一行一個絕對的 HTTP 或 HTTPS URL,依首次出現的順序去除重複,可以選擇性地加上共用的 lastmod、changefreq 或 priority,並透過瀏覽器的 URL parser 進行序列化,讓主機名稱全部小寫、移除預設連接埠、對非 ASCII 路徑元件進行 percent-encode。每個產生的檔案僅限於單一序列化的主機,包括任何非預設的連接埠,因此同一個 host 的 HTTP 與 HTTPS URL 可以並存,但 example.com 與 example.com:8443 不行。所有解析、正規化、XML escape 以及下載 blob 的建立作業都在當前的分頁中執行,這代表貼上的 URL 與最終的 XML 永遠不會被上傳到遠端伺服器。輸出結果的正確性完全取決於您所貼上的 URL,因此在發布檔案之前,必須審核重新導向、canonical 目標以及私密頁面。

generate xml sitemap for website
從審核過的 URL 清單建立經過驗證的 sitemap.xml

產生器如何將清單轉為 XML

這個產生器是一個「清單轉 XML」的工具,而不是爬蟲。它接受您事先整理好的一段文字,驗證每一個非空白行,正規化 URL,依首次出現的順序去除重複,escape 五個 XML 實體,並輸出一個完整的、可供下載的 UTF-8 XML 檔案。它不會造訪任何頁面、追蹤任何連結、檢查 canonical 標籤、讀取修改日期、探索重新導向、驗證 HTTP 狀態、判斷可索引性,也不會把結果提交給搜尋引擎。沒有 sitemap index 的產生、沒有 image、video 或 news 副檔名、沒有 hreflang 標記、沒有 gzip 檔、沒有 robots.txt 規則,也沒有 Search Console 提交。如果您貼上格式錯誤的 URL 或被禁止的片段,整個產生作業會直接失敗,而不是靜悄悄地略過那一行;如果您超出工具的安全上限,產生作業也會直接失敗,而不是截斷輸出。這個工具僅處理清單的特性,也是為什麼它可以在無法爬取網站的情境下安全使用,例如手動匯出的競爭對手網域,或是位於認證機制之後的測試環境,因為所有資料都不會離開您的分頁。

接受的輸入格式與單一主機規則

每一個非空白行都必須是一個絕對的 HTTP 或 HTTPS URL,行首與行尾不可包含空白字元。產生器接受 LF、CRLF 與 CR 換行字元,並會忽略純空白的行。裸網域、相對路徑、FTP URL、原始的控制字元、格式錯誤的 percent-escape、嵌入的認證資訊以及 URL 片段都會被拒絕。由於片段不會作為 HTTP 請求的一部分送到伺服器,如果允許片段,可能會為同一個被取得的資源產生多筆項目,這就是它們被過濾掉的原因。拒絕認證資訊是為了避免使用者名稱或密碼被不小心複製到公開的 sitemap 中。

單一主機規則直接來自 sitemaps.org 通訊協定:一個檔案只能列出同一個主機的 URL。這個瀏覽器工具透過將每個接受的 URL 序列化後,再用 WHATWG URL parser 進行處理,接著以正規化後的形態比較主機名稱來強制執行此規則。大寫的主機名稱與其小寫形式會被視為同一個 URL,明確指定的預設連接埠會被視為與其去除後的形式相同。同一個主機的 HTTP 與 HTTPS 可以一起接受,因為通訊協定不包含在主機的比較中,但 example.com 與 example.com:8443 不能出現在同一個檔案中,因為非預設連接埠會成為序列化主機的一部分。如果您需要為兩個不同的主機或兩個不同的非預設連接埠發布 sitemap,請分別產生兩個檔案,而不是嘗試合在一起。

統一套用的選擇性詮釋資料欄位

三個選擇性欄位分別是 lastmod、changefreq 與 priority。如果您留白,產生器會輸出僅含 loc 的 XML。如果您填寫,則同一個值會套用到檔案中的每一個 URL,這也是為什麼這個工具堅持要求一個真實的共用值,而不是替每個 URL 猜測一個預設值。最後修改時間接受真實的 Gregorian YYYY-MM-DD 日期,或包含秒數以及 Z 或合法 UTC 時差偏移的完整日期時間,並會檢查日曆日期、閏年、時鐘欄位範圍以及時區限制。欄位前導或尾端的空白會被拒絕,而不是自動去除。更新頻率僅接受通訊協定定義的七個字串:always、hourly、daily、weekly、monthly、yearly 或 never。Priority 接受 0.0 到 1.0 之間的小數。

這三個欄位是通訊協定的提示,而非爬取指令或排名保證;它們告訴爬蟲您對該頁面的主張,而不是該頁面的價值。無效的選擇性詮釋資料會導致整個產生作業失敗,因此錯誤的日期或超出範圍的 priority,與格式錯誤的 URL 一樣致命。如果想更深入了解每個選項與通訊協定之間的互動,建立 XML sitemap 的實用指南 會在實際工作流程中說明相同的詮釋資料選擇。

如何產生經過驗證的 sitemap.xml

  1. 彙整一份經過審核、全部屬於同一個主機(包括任何非預設連接埠)的絕對頁面 URL 清單,並決定要依主機或依通訊協定群組分別發布檔案。
  2. 開啟 XML Sitemap Generator,將每個 URL 一行貼入編輯器。請手動刪除前導或尾端的空白,因為工具不會自動移除它們。
  3. 決定要將選擇性欄位留白以產生僅含 loc 的 XML,還是要套用一個真實且適用於每一筆項目的共用 lastmod、changefreq 或 priority。
  4. 點擊 generate 並檢視最終的 XML、不重複的 URL 數、重複數以及任何錯誤行。預覽內容即為將被下載的完整位元組。
  5. 下載 sitemap.xml,將它發布在與其代表的主機相同的位置,並透過您所使用的搜尋引擎支援的管道提交該 URL。Google 的 建立並提交 sitemap 說明文件會說明最後這個步驟。

瀏覽器工具在通訊協定之下額外強制執行的限制

sitemaps.org 通訊協定允許每個 loc 少於 2,048 個字元、每個檔案最多 50,000 個 URL,以及最多 52,428,800 個未壓縮位元組。這個瀏覽器工具刻意採用較低的整檔上限,因為每個限制都受到單一分頁可用記憶體(用於預覽、Blob 與解析)的限制:

限制通訊協定上限瀏覽器工具上限
每個檔案的不重複 URL 數50,00010,000
未壓縮的檔案大小52,428,800 bytes10,485,760 bytes (10 MiB)
每個 loc 的字元數少於 2,048正規化後最多 2,047
輸入大小未指定5,000,000 個 UTF-16 code units

每一個限制都是全有或全無:第 10,000 個不重複的 URL 會被接受,下一個不重複的 URL 會失敗;剛好 10,485,760 bytes 的邊界會被接受,再多一個位元組就會被拒絕;重複的行不會占用輸出名額。工具不會回傳截短的 XML、省略符、被截斷的預覽或部分下載。XML 的大小是在 URL 序列化、XML escape、選擇性標籤、縮排以及 UTF-8 編碼之後才進行計算,這也是為什麼在編輯器中看起來很小的檔案,在 escape 之後可能會接近上限。如果您的網站擁有超過 10,000 個不重複的 URL,請將清單拆分為多個依主機對齊的檔案並使用 sitemap index,而這個工具並不會為您產生 sitemap index。

在發布 sitemap.xml 之前需要驗證的事項

這個產生器無法告訴您哪些頁面應該收錄在檔案中。在發布之前,請審核重新導向、重複內容、被封鎖的頁面、私密頁面、測試 URL 以及遺漏的頁面。確認每個 loc 確實會回傳 200 狀態,canonical 標籤指向您預期的位置,任何 noindex 指示是有意設定的,而不是遺留下來的範本。您所提供的選擇性 lastmod、changefreq 與 priority 值會成為對外公開的頁面主張,因此請克制將所有 URL 都設為 priority 1.0、或將所有頁面都設為 daily 的衝動;真實的共用值才能隨著時間建立與爬蟲之間的信任。檔案上線後,請持續監控涵蓋率與爬取報告,而不是把 sitemap 視為一次性交付物,因為 sitemap 是提示,並非保證索引的承諾。

延伸閱讀:從 URL 萃取 sitemap:貼上與解析的工作流程