網站的 sitemap 產生器是一種工具,可將經過審核的頁面 URL 清單轉換成符合標準的 sitemap.xml 檔案。XML Sitemap Generator 採用「先有清單」的方式,整個流程都在你的瀏覽器分頁中執行,因此不會上傳任何 URL,也不會上傳任何產生的 XML。當你已經知道哪些頁面應該出現在網站地圖上時,你需要的不是爬蟲——你需要的是一個能驗證每個 URL、套用通訊協定所要求的 XML 結構、依你提供的順序去除重複項目,並回傳一個可下載檔案的工具。「從清單到 XML」的做法特別適合小型靜態網站、剛上線的部落格、人工策劃的登陸頁面集合,以及任何需要由維護者明確控管提交給搜尋引擎內容的情境。輸出結果的正確性完全取決於輸入,而這正是為什麼「先審核」的工作流程能與發布前仔細檢查重新導向、重複內容、遭封鎖頁面以及絕不應出現在搜尋引擎中的私密頁面的清單緊密搭配。

「先有清單」的產生器何時適合你的網站
大多數網站規模都不大,維護者本來就清楚每一個值得建立索引的 URL。「先有清單」的 sitemap 產生器正是為這種情況所設計。它不要求軟體去爬取網站、抓取回應、追蹤連結並推測哪些頁面應該納入,而是由維護者直接提供 URL 清單。然後工具會進行驗證、正規化、去重複並序列化結果。
有三種情境特別適合「先有清單」的工作流程:擁有數十個頁面的靜態網站,維護者可以手動列出公開的 URL;近期重新上線的部落格或作品集,先前的爬取產生了過時或失效的 URL,這些應該排除而非被重新發現;以及任何由編輯判斷決定索引範圍的網站——例如想刻意排除在 sitemap 之外的內容貧乏頁面、標籤彙整頁與內部搜尋結果。
維護者所能控管的項目
- 輸出中要出現哪些 URL,以及其輸入順序
- 是否加入共用的選擇性中繼資料(lastmod、changefreq、priority)
- 要排除哪些 URL——工具絕不會自行補上缺少的頁面
爬蟲式產生器最終可能產出相同的 URL,但它也會一併帶入重新導向、soft-404 頁面、帶參數的變體,以及任何未被你的 noindex 規則擋下的 URL。「先有清單」的作法把這樣的判斷權保留在負責網站的人手中。
工具負責的部分——以及由你負責的部分
| 工具負責 | 由維護者負責 |
|---|---|
| 將每個非空白行驗證為絕對的 HTTP 或 HTTPS URL | 挑選哪些 URL 屬於 sitemap |
| 透過瀏覽器的 URL parser 進行正規化(小寫主機、移除預設連接埠、根斜線、百分比編碼) | 檢視重新導向、狀態碼與 canonical 標記 |
| 拒絕內嵌憑證與 URL 片段 | 決定哪些頁面可被索引 |
| 依「先出現者優先」的順序去除重複,保留你指定的順序 | 移除私密頁面、內部搜尋結果與後台 URL |
| 在提供時套用共用的 lastmod、changefreq 或 priority | 如實地為所有項目指派同一個共用中繼資料值 |
| 對 XML 資料進行實體跳脫,並輸出官方的 UTF-8 urlset 命名空間 | 在所代表的網站上託管 sitemap.xml |
| 準備一個本地端下載,不上傳任何資料 | 向搜尋引擎提交該檔案並將其列於 robots.txt 中 |
閱讀這張表能讓工作流程保持誠實。產生器的職責是機械性且受通訊協定約束的;編輯面的決策仍由你掌握。如果某個 URL 不該出現在 sitemap 中,它也不該出現在輸入清單裡。
準備你審核過的 URL 清單
輸入中的每個非空白行,都必須是同一個主機的絕對 HTTP 或 HTTPS URL。像 example.com 這類裸網域、像 /about 這類相對路徑、FTP URL,以及任何帶有開頭或結尾空白的行,都會驗證失敗,而不會被靜悄悄地去除。只有空白的行會被忽略,其餘每一行都必須符合標準。
在貼上任何內容之前,請以你希望搜尋引擎看到的方式建立清單:
- 只納入可解析、會回傳 200 且預期會被索引的 URL
- 移除不應成為個別 sitemap 項目的追蹤參數與 session ID
- 移除遭 robots.txt 封鎖或標記為 noindex 的 URL
- 排除你不想曝光的私密頁面、後台端點、內部搜尋結果,以及標籤或彙整頁
- 處理 canonical——你想被索引的 URL 就是進入 sitemap 的 URL
所有 URL 應位於同一個序列化主機(主機加上非預設連接埠)。將 example.com 與 example.com:8443 混用會在單一主機檢查中失敗,即使兩者在技術上都對該主機有效。同一個主機的 HTTP 與 HTTPS 項目可以同時接受,因為通訊協定定義的是同一個主機,而非同一個來源(origin)。URL 正規化遵循 WHATWG URL 標準,該標準會在進行任何比較之前,將主機轉為小寫、移除預設連接埠,並對非 ASCII 元件進行百分比編碼。
產生 sitemap.xml 檔案
- 在瀏覽器分頁中開啟 XML Sitemap Generator。
- 在 URL 清單欄位中,每行貼上一個絕對 URL。LF、CRLF 與 CR 換行皆可接受。
- 決定是否加入選擇性的共用欄位。若你只想要僅含 loc 的項目,請將 lastmod、changefreq 與 priority 留空。
- 點擊 Generate。工具會解析每一行、將每個 URL 透過瀏覽器 URL parser 序列化、依「先出現者優先」去除重複、驗證所有選擇性中繼資料,並量測最終的 XML 大小。
- 在預覽區檢視產生的 XML。輸出內容以 UTF-8 宣告開頭,並使用官方的 http://www.sitemaps.org/schemas/sitemap/0.9 命名空間作為 urlset 元素。
- 確認數量與位元組總數。正規化後的 loc 最長為 2,047 字元;整個檔案上限為 10,000 個不重複的 URL 與 10,485,760 個 UTF-8 位元組。
- 點擊 Download 以儲存 sitemap.xml。此下載為目前結果所持有的暫時性 Object URL,因此一旦編輯任何輸入,該連結會立即失效並清除先前的 XML。
任何單一無效的行——多餘的空格、片段、內嵌憑證、非 HTTP 協定——都會讓整個產生流程失敗,而不是略過該錯誤項目。這種「全有或全無」的行為是有意為之:一個會悄悄丟掉格式錯誤行的 sitemap,比一個在每一行都正確前拒絕產生檔案的 sitemap 更難以除錯。
選擇性的共用中繼資料欄位
通訊協定允許每個 URL 帶有三個選擇性子元素:lastmod、changefreq 與 priority。「先有清單」的產生器在你提供一個值時,會對所有項目套用同一個值,因此該欄位只有在對清單中每個 URL 都為真時才算誠實。
| 欄位 | 可接受的值 | 其意義 |
|---|---|---|
| lastmod | 真實的格里高曆 YYYY-MM-DD 日期,或帶秒數以及 Z 或有效 UTC 時差完整日期時間 | 該頁面最後一次實質性的修改 |
| changefreq | always、hourly、daily、weekly、monthly、yearly、never | 該頁面通常多久變更一次的提示 |
| priority | 介於 0.0 到 1.0 之間的小數 | 在網站內相對重要性的提示 |
三者都只是提示,既不是抓取指令,也不是排名保證。搜尋引擎可能會完全忽略它們。lastmod 是編輯權重最大的一項,因為整個 sitemap 中錯誤的值,可能誤導爬蟲去重新造訪實際上並未變動的頁面。唯有當同一個日期對清單中每個 URL 都為真時,才應使用它。
硬性上限與驗證行為
Sitemap 通訊協定允許每個檔案最多 50,000 個 URL 以及 52,428,800 個未壓縮位元組。基於瀏覽器的產生器採用較低的全檔預算,以限制預覽、Blob 與記憶體用量:10,000 個不重複的 URL、5,000,000 個 UTF-16 輸入碼元,以及 10,485,760 個 UTF-8 XML 位元組。剛好等於 10,485,760 位元組的界線可被接受;再多一個位元組就會讓產生失敗。
每個上限都採「全有或全無」原則。第 10,000 個不重複的 URL 會被接受,下一個不重複的 URL 則會失敗。重複的行不會佔用輸出名額,因此在貼上之前先清理重複項目,可在不犧牲實際條目的情況下降低總數。XML 大小是在 URL 序列化、XML 跳脫、選擇性標籤、縮排與 UTF-8 編碼之後量測——而非依據你貼上的原始文字。
驗證刻意採嚴格標準。產生器不會產生截斷的 XML、省略符號、截短的預覽或部分下載。如果你需要超過單一檔案所能容納的數量,請將清單拆分到多個 sitemap 中,並另行以產生的 sitemap index 檔案串接。如需關於架構、上限與擴充模組的通訊協定細節,請參閱以 URL 清單建構時的 sitemap 通訊協定規則。整體格式與提交規則記載於 Google 的建立並提交 sitemap指南。
檢視並發布你的 Sitemap
在檔案上線之前,請走過一輪產生器無法代勞的發布前檢查清單。確認清單中每個 URL 都能解析、回傳 200 狀態,且為該頁面的 canonical 版本。移除所有會重新導向、回傳 404 或標記為 noindex 的 URL。將內部搜尋結果、後台端點,以及任何本就不該出現在清單上的私密頁面一律刪除。
將 sitemap.xml 上傳到所代表網站的根目錄,然後在 robots.txt 中以一行 Sitemap: 加以引用,讓爬蟲無需你手動提交即可找到它。對於規模非常大的網站,通訊協定允許 sitemap index——指向多個子 sitemap 的獨立 XML 檔案——但「先有清單」的產生器一次只會產生單一 sitemap.xml,因此 index 流程屬於額外步驟。
向搜尋引擎提交檔案是另一個獨立動作。產生器不會提交 sitemap、呼叫 ping 端點,也不會修改 robots.txt。這種區隔正是為什麼在產生過程中不需要將檔案上傳到任何地方——把檔案放上所代表的主機並對外公告,是你的主機代管流程、CMS 或靜態網站部署步驟的工作。