手動建立的 XML sitemap 是一個 UTF-8 檔案,內含一個 <urlset> 元素,該元素透過每個 <loc> 元素列出絕對頁面 URL,並可選擇性地標記 <lastmod>、<changefreq> 與 <priority>,而且是由 URL 清單產生,而非透過爬梳網站而來。由於每個產生的檔案僅限於單一主機(包括任何非預設連接埠),且必須遵循Google Search Central 所說明的官方 sitemap 通訊協定,因此產出符合標準檔案的務實做法,是從一份經過審核的絕對 HTTP 或 HTTPS URL 清單出發,判斷單一共享的選用值是否屬實,再交由瀏覽器端的清單轉 XML 工具處理序列化、逸出與 XML 組裝作業。如此得到的 sitemap.xml 檔案,可託管在所代表的網站上,並透過一般管道提交,而無需將 URL 清單或產生的 XML 暴露給遠端服務。
此處「手動」的定位相當關鍵。以外掛為基礎的 sitemap 與以爬蟲為基礎的產生器不需 URL 清單即可運作——它們會代您探索頁面並輸出 XML。手動建立則反轉這個流程:由您提供 URL,因為您已確知哪些頁面屬於 sitemap,並希望檔案能完全符合該判斷。清單轉 XML 工具是天然的選擇,因為所有其他決策(主機篩選、通訊協定規則遵循、去重複、字元逸出)都直接源自您貼上的清單。

為何清單轉 XML 方式適合手動建立
當您不知道網站上有哪些內容時,以爬蟲為基礎的產生器相當實用。與之相反的問題——確切知道哪些 URL 屬於 sitemap——正是手動建立所處理的場景。對於靜態網站、人工策劃的登陸頁、建置中的微型網站,或是移轉後的清理作業來說,一份經過審核的絕對 URL 清單會比讓爬蟲探索更快也更精確,因為爬蟲同樣會一併抓取您不希望被索引的重新導向、封鎖頁面、測試環境 URL、分頁變體以及後台路徑。
XML Sitemap Generator 即圍繞此清單轉 XML 模式所打造。您將 URL 貼入編輯器,選擇性地套用單一共享的 lastmod、changefreq 或 priority,接著產生、檢閱並下載 sitemap.xml。不會上傳任何資料——所有解析、正規化、逸出與寫入作業都在當前瀏覽器分頁中執行,因此 URL 清單絕不會離開您的機器。這使其適用於 sitemap 作者同時也是 URL 清單策劃者的情境——也就是手動建立的場景。
貼上之前須遵循的 Sitemap 通訊協定規則
Sitemap 通訊協定對檔案設有若干強制限制。每個 <loc> 必須是長度少於 2,048 字元的絕對 URL。每個產生的檔案僅限於單一主機(符合通訊協定的單一主機規則),而非預設連接埠會計入主機的一部分,因此混用 example.com 與 example.com:8443 將會失敗。同一主機的 HTTP 與 HTTPS URL 可接受共存於同一檔案,因為通訊協定比較的是主機而非來源;但不同主機或不同非預設連接埠則必須分別建立 sitemap 檔案。
該通訊協定亦將每個檔案上限設為 50,000 個 URL 與 52,428,800 位元組的未壓縮大小。XML Sitemap Generator 採用較低的整檔預算——10,000 個獨立 URL 與 10,485,760 位元組的 UTF-8 內容——以便在瀏覽器中限制預覽與 Blob 記憶體用量。超過上限時會使整次產生作業失敗,而非默默截斷,這代表一份超出上限的清單能明確告訴您該如何拆分後再行貼上。本工具不會檢查跨網站提交權限:產生器無法判斷 sitemap 是否會託管於其 URL 所描述的主機,因此請在發布前先規劃託管位置。
輸入的整潔度同樣重要。裸網域、相對路徑、FTP URL、原始控制字元、格式錯誤的百分比逸出、內嵌的憑證與片段皆會被拒絕,而非默默修正。僅含空白的行會被忽略,但非空白行若出現多餘的前後空白則視為錯誤。無效的行會使整次產生作業失敗——絕不會被略過,而多餘的有效 URL 也不會被默默捨棄,因此預覽結果必定與最終檔案一致。
如何從 URL 清單建立 sitemap.xml
- 彙整一份經審核的絕對 HTTP 或 HTTPS 頁面 URL 清單,每行一筆,且任何非空白行皆不得有前後空白。僅含空白的行會被忽略,但 URL 之前或之後出現的多餘空白則視為錯誤。
- 確認清單僅包含單一已序列化主機,包括任何非預設連接埠。請移除裸網域、相對路徑、FTP URL、內嵌憑證、片段、原始控制字元與格式錯誤的百分比逸出——產生器會拒絕所有上述項目,而非默默修正。
- 開啟 XML Sitemap Generator,將清單貼入 URL 欄位。
- 若僅需要 loc 項目,請將選用的 lastmod、changefreq 與 priority 欄位留空;若該單一共享值對清單中每個 URL 皆屬實,則填入一個共享值。選用欄位會套用至所有項目;不提供個別 URL 的覆寫設定。
- 點擊 Generate 並檢視結果。本工具會顯示完整的 XML、獨立 URL 數量、被忽略的重複數,以及任何行層級的驗證錯誤。無效的行會使整次產生作業失敗,而非被略過。
- 下載 sitemap.xml,接著將其託管於所代表的網站上,並透過您偏好的管道提交。
選用中繼資料:共享的 lastmod、changefreq 與 priority 何時屬實
選用標籤僅在其值屬實時才有助益。lastmod 應反映頁面實際的重大修改——而非重新產生的時間戳記,亦非刻意挑選以營造活躍感的近期日期。由於產生器會將同一個值套用於每個 URL,lastmod 唯有在單一日期適用於清單上所有項目時才算屬實,而這在任意網站中並不常見。當各項目具備不同的實際修改日期時,請將其留空。
changefreq 接受七種通訊協定定義的權杖,priority 則接受介於 0.0 到 1.0 之間的小數。兩者皆為提示,而非 crawl 指令或排名保證,搜尋引擎會彈性地加以解讀。請將其視為說明文件,而非指示。
| 標籤 | 是否必填 | 格式 | 納入時機 |
|---|---|---|---|
| loc | 是 | 絕對 HTTP 或 HTTPS URL,< 2,048 字元 | 每個項目一律納入 |
| lastmod | 否 | YYYY-MM-DD 或含時區的完整日期時間 | 僅在單一真實的共享日期適用於所有項目時 |
| changefreq | 否 | 七種權杖之一 | 僅在單一共享更新頻率屬實時 |
| priority | 否 | 介於 0.0 到 1.0 之間的小數 | 僅作為清單中相對重要性的提示 |
| changefreq 值 | 依通訊協定之意義 |
|---|---|
| always | 每次存取時頁面皆會變更 |
| hourly | 頁面大約每小時變更 |
| daily | 頁面大約每天變更 |
| weekly | 頁面大約每週變更 |
| monthly | 頁面大約每月變更 |
| yearly | 頁面大約每年變更 |
| never | 頁面已封存 |
無效的選用中繼資料會使整次產生作業失敗,而非被默默裁切,因此 lastmod 欄位僅含空白、changefreq 權杖不受支援,或 priority 超出 0.0 到 1.0 範圍,皆會阻止下載。這強制要求誠實:若中繼資料對每個項目並不屬實,便根本不應出現於檔案中。
下載前檢視產生的 XML
XML 輸出以 UTF-8 宣告開頭,並使用官方命名空間 http://www.sitemaps.org/schemas/sitemap/0.9 的 <urlset> 元素。每個項目包含一個 <url>,內含 <loc>,而您所提供的選用標籤會出現於每個項目中。位置會在 URL 正規化後進行 XML 逸出,產生器依下列順序逸出五個 XML 實體:先處理 & 符號,接著為單引號、雙引號、大於符號與小於符號。先處理 & 符號代表像 ' 此類實體不會被重複逸出。
逸出順序的具體運算範例:從原始 URL https://example.com/products?id=12&cat=O'Brien 開始。步驟一,先逸出 & 符號:https://example.com/products?id=12&cat=O'Brien。步驟二,逸出單引號:https://example.com/products?id=12&cat=O'Brien。此即下載前預覽中 <loc> 元素內所應呈現的精確序列化結果。本工具亦會回報獨立 URL 數量與重複數量,以便您確認單一主機規則未受破壞。
去重複作業於 URL 序列化後進行,並由首次出現決定輸出順序。大寫主機與其小寫形式會被視為同一 URL,明確指定的預設連接埠與其正規化形式亦同。編輯 URL 或任何選項會立即撤銷先前的下載並清除舊 XML,因此預覽與下載檔案必定與當前輸入一致。
下載 sitemap.xml 後的後續作業
手動建立止於一個檔案,但發布則是另一個獨立步驟。請將 sitemap.xml 託管於其 URL 所描述的主機上,理想位置為根目錄,以使路徑解析為 https://example.com/sitemap.xml。於 robots.txt 中以 Sitemap: 一行引用該檔案,接著透過 Google Search Console 或其他搜尋引擎的對應介面提交 URL。提交步驟不在任何清單轉 XML 工具的範圍內——產生器僅負責產出檔案,託管與提交則由您自行處理。
發布前,請再次檢查 URL 清單中是否有重新導向、重複內容、封鎖頁面與私密路徑。檔案的精確度僅取決於您所提供的清單與選用中繼資料。檢閱預覽的 XML 與計數是最後一項自動化檢查;編輯層級的審核則由您負責。
延伸閱讀:Bulk URL Generator Example: Seven Patterns From One Template。