// 免費工具 · XML 網站地圖檢查
XML 網站地圖檢查工具
貼上你的 sitemap.xml,或直接把檔案拖進來,就會列出每一個協定錯誤並標上行號與改法:loc、lastmod、priority、changefreq、hreflang 的雙向對應,以及 50,000 筆網址的上限。免費、全程在瀏覽器裡跑、不上傳任何內容。
其他語言:EnglishDeutschEspañolFrançais日本語한국어Português (Brasil)繁體中文
一邊打字一邊檢查。你也可以把 sitemap.xml 或 sitemap.xml.gz 直接拖到這個框裡 —— 讀檔和解壓縮都由你的瀏覽器完成,檔案不會離開。
怎麼檢查一份 XML 網站地圖
三個步驟,全部在這一頁完成。這個檢查工具讀的是你交給它的檔案 —— 它不會去抓你的網站,所以請貼上 XML 或把檔案拖進來,而不是輸入網址。
- 貼上,或把檔案拖進來。 把 XML 貼進左邊的框,或把 sitemap.xml(或 sitemap.xml.gz,你的瀏覽器會自己解壓)拖到上面。每打一個字就檢查一次,不用按任何按鈕。
- 照著發現一條一條修。 每一條發現都帶行號和改法。錯誤是檢索器會拒絕或讀錯的東西;警告是 XML 合法、但仍然讓你付出代價的東西,例如未來日期的 lastmod 或重複的網址。
- 複製報告、修完、再檢查一次。 右邊那格是一份純文字報告 —— 檔案類型、離 50,000 筆與 50 MB 上限還有多遠、每一條發現 —— 可以直接貼進工單。修好後把新檔案貼回來,確認它乾乾淨淨地回來。
這個網站地圖檢查工具會看什麼
對你貼進來的檔案跑三輪。第一輪是 XML 本身是否良構:沒關的標籤、交錯的巢狀、查詢字串裡沒跳脫的 &、沒宣告的命名空間前綴 —— 每一條都回報在它發生的那一行,而不是丟一句籠統的「解析失敗」。第二輪是 sitemaps.org 協定:根元素是 http://www.sitemaps.org/schemas/sitemap/0.9 命名空間下的 <urlset> 或 <sitemapindex>、每一筆剛好一個絕對網址的 <loc>、<lastmod> 是真正的 W3C Datetime、<priority> 落在 0.0 到 1.0 之間、<changefreq> 是那七個允許的英文字之一。第三輪是上限與交叉參照:50,000 筆網址、未壓縮 50 MB、重複網址、主機混用,以及 xhtml:link 的 hreflang 標註 —— 雙向都查。
XML 網站地圖是一份放在固定網址的檔案,把你希望被檢索的頁面一頁一頁列出來:每一頁是一個 <loc> 元素,需要的話再加上 <lastmod>,全部收在 <urlset> 這個根元素底下;若要指向多份網站地圖,根元素就換成 <sitemapindex>。 整個協定就這麼多,而且到現在都還是各家搜尋引擎當年談定的 0.9 結構。也正因為如此,網站地圖只要在「產生器改動時檢查一次」就夠了:失敗是機械性的,只要有人告訴你哪一行,每一條幾乎都是一行就能修好。
相對地,這個工具答不出來的事也先講清楚:<loc> 裡的頁面是不是真的回 200、有沒有掛 noindex、robots.txt 有沒有指向這份檔案 —— 這些每一個網址都要抓一次,是伺服器端的工作,瀏覽器裡的一個頁面在原理上做不到(原因寫在下面)。格式對,跟內容對,是兩件事;這一頁負責的是前者。
一站兩域(.com.tw 與 .com):把 hreflang 當成一張圖來查
台灣的網站常常長成兩個網域:example.com.tw 給台灣,example.com 給海外或英文。這個結構本身沒有問題,Google 也支援以網域區分語言版本 —— 問題出在把兩邊接起來的那幾行 xhtml:link。兩個網域通常由兩套流程、有時甚至由兩個團隊產生網站地圖,於是台灣站列了海外站,海外站卻沒有列回台灣站。這種單向標註 Google 不會退而求其次採用一半,而是整組丟掉,而且 Search Console 不會為此跳出什麼明顯的警告。這就是「上線半年才發現繁中版一直搶不到自己的品牌詞」那類故事的常見版本。
所以這個檢查工具不是逐條看 xhtml:link 的格式,而是把整份檔案的 hreflang 標註組成一張圖再檢查。它會確認每一筆有沒有列出自己的 <loc>、每一條指向本檔案內網址的語言版本有沒有被指回來、同一個語言代碼有沒有出現兩次、以及每個代碼是不是真的 ISO 639-1 語言。要讓它幫你查兩域之間的回指,做法很直接:把兩個網域的網址放進同一份檔案再貼進來。 那時你會同時看到兩件事,而它們並不矛盾:
- 錯誤:單向。「
https://example.com/pricing/那一邊沒有指回https://example.com.tw/方案/」—— 這就是你要修的東西,而且它會告訴你對方那一筆從第幾行開始。 - 警告:主機混用。「這一筆在 example.com,但檔案開頭是 example.com.tw」—— 這是在提醒你協定的規則:一份網站地圖要列出別的主機的網址,前提是你在 Search Console 驗證過那個網域,或那個主機的 robots.txt 指向這份檔案。跨網域提交是允許的,但要先滿足這個條件。
如果你不想(或不能)把兩邊放進同一份檔案,那就會看到「這個網址不是本檔案裡的 <loc>,所以在這裡查不到它的回指連結」這一條警告。這是故意的:查不到就說查不到,不會假裝查過。真正的做法是把另一份網站地圖也貼進來跑一次,兩邊都乾淨才算數。
還有兩個繁中站特別容易踩的細節。第一,只差一個結尾斜線就算不同網址:/方案 和 /方案/ 在 hreflang 的比對裡是兩個字串,這個工具會直接指出「找不到這一筆,但檔案裡有另一個只差斜線的」。中文路徑本身也建議做百分比編碼再輸出,否則不同檢索器正規化的方式不一定一樣(這時你會看到「網址裡有非 ASCII 字元」的警告)。第二,hreflang="tw" 不會被任何工具擋下來:tw 在 ISO 639-1 裡是存在的代碼,只是它代表的是迦納的 Twi 語,不是台灣。這個檢查工具對 tw 也不會出聲 —— 規格上它合法。繁體中文要寫 zh-Hant(以書寫系統區分,同時涵蓋台港澳)或 zh-TW(以地區區分);zh_TW 這種底線寫法會被判為錯誤,zh-tw 全小寫會給警告。要一次把整組標註做對,可以先用 hreflang 產生器從一個網址樣式產生完整的一組,再貼到這裡驗收。
為什麼這個工具收檔案,而不是收網址
其他免費的網站地圖檢查工具幾乎都要你填一個網址,然後由它們的伺服器去抓。這一個完全在你正在看的這個頁面裡執行,而瀏覽器不被允許讀取另一個網域的檔案 —— 除非那個網域主動開放,也就是同源政策與 CORS。幾乎沒有網站會為自己的 sitemap.xml 送出 Access-Control-Allow-Origin,所以這裡就算放一個網址欄,大部分人輸入自己的網址都只會拿到錯誤。與其交付一個多數時候會失敗的欄位,不如直接收檔案。
而這個選擇剛好蓋住了網址欄根本碰不到的情境:
- 還沒上線 —— 產生器剛在你本機寫好的那份檔案,在部署之前。
- CI 產物 —— pipeline 產出的成品,在它抵達任何主機之前就先驗收。
- 登入、VPN 或測試站密碼後面 —— 會去抓的檢查器只會拿到登入頁,然後回報「這是壞掉的 XML」。
- 內網或不能外傳 —— 檔案不會離開你的電腦,所以一份不能交給第三方伺服器的網站地圖,在這裡仍然檢查得到。
代價也直說:這個工具沒辦法告訴你 https://yourdomain.com.tw/sitemap.xml 是不是真的回 200、robots.txt 有沒有指向它、裡面的網址是不是還活著。它讀的是你交給它的位元組。要檢查一份已經上線的檔案,自己抓下來 —— curl -s https://yourdomain.com.tw/sitemap.xml,如果是壓縮檔就 curl -s https://yourdomain.com.tw/sitemap.xml.gz | gunzip —— 再把輸出貼進來。解析之後的每一件事都是伺服器端的工作,那正是 Agent SEO 負責的部分。
檔案通過之後:sitemap ping 已經沒了
還是有工具在檔案通過後提供「ping Google」。那個端點 —— google.com/ping?sitemap= —— 已於 2023 年停用,現在打它什麼都不會發生。如果哪個檢查工具還把它當賣點,那大概只說明了那個頁面上次更新是什麼時候。
取而代之的做法比較無聊,但有效。把網站地圖的絕對網址寫進 robots.txt 的 Sitemap: 那一行,每個檢索器都會照自己的節奏去讀,而且不需要任何帳號。在 Search Console 與 Bing Webmaster Tools 各提交一次,然後就別再管它 —— 重複提交不會讓任何事情變快。把 <lastmod> 保持正確,因為那是 Google 明說它會用的唯一欄位,而一個正確的值才是它值得排一次重新檢索的理由。如果你有在用 IndexNow,發布時就通知它 —— 那個還活著。
然後,用量的,不要用猜的。clize seo check --domain yourdomain.com.tw 會把你的網站地圖和 Search Console 資源一起讀,列出檔案裡有、卻從來沒拿過一次曝光的頁面,並附上它們當下的 HTTP 狀態與索引狀態 —— 「提交了到底有沒有用」這個問題,沒有任何檢查工具答得出來,這個指令答得出來。既然講到機器讀的檔案,旁邊兩個工具跟這一個共用同一條規則:檔案應該從單一來源產生,而不是用手改 —— 給 AI 讀的索引檔用 llms.txt 檢查工具,必須跟畫面上的字一字不差的標記用 FAQ Schema 產生器。
// 常見問題
XML 網站地圖檢查工具會檢查什麼?
三件事。檔案是不是良構的 XML —— 標籤有沒有關、巢狀對不對、& 有沒有跳脫、命名空間前綴有沒有宣告。有沒有遵守 sitemaps.org 協定 —— 根元素是 0.9 命名空間下的 <urlset> 或 <sitemapindex>、每一筆剛好一個絕對網址的 <loc>、<lastmod> 是有效的 W3C Datetime、<priority> 在 0.0 到 1.0 之間、<changefreq> 是允許的值。以及有沒有超過上限、內部是否一致 —— 少於 50,000 筆網址與未壓縮 50 MB、沒有重複網址,還有 hreflang 的各語言版本有沒有互相指回去。
主站 .com.tw、海外站 .com,可以放在同一份網站地圖裡嗎?
可以,但有前提:協定允許一份網站地圖列出其他主機的網址,條件是你在 Search Console 驗證過那個網域,或那個主機的 robots.txt 指向這份檔案。滿足條件之後,把兩邊放進同一份檔案其實有好處 —— 這個工具就能真的幫你查兩域之間的 hreflang 是不是雙向的,單向的那一條會被指名出來。如果你把它們分成兩份檔案,那就兩份都各貼一次,並注意那條「這個網址不在本檔案裡,所以查不到回指」的警告。
繁體中文的 hreflang 該寫 zh-Hant 還是 zh-TW?
兩個都有效,差別在你要用書寫系統還是地區來區分。zh-Hant 指的是繁體字,台港澳的使用者都會對上;zh-TW 指的是台灣這個地區。如果你只有一個繁體版本,zh-Hant 的涵蓋範圍比較穩妥;如果你同時有台灣版和香港版,那就寫 zh-Hant-TW 和 zh-Hant-HK 把兩件事都說清楚。要特別注意的是不能只寫 tw:tw 在 ISO 639-1 裡是存在的代碼,但它代表 Twi 語,所以沒有任何工具會把它當錯誤擋下來,包括這一個。
<loc> 可以直接放中文網址嗎?
可以,但這個工具會給你一個警告,建議把路徑做百分比編碼、把主機轉成 punycode。理由不是中文不合法,而是不同檢索器對非 ASCII 網址的正規化方式不一定一樣,而網站地圖裡的字串必須跟你頁面上的正式網址一字不差 —— 尤其當這些網址還要在 hreflang 裡互相比對的時候。輸出編碼過的形式,你和檢索器讀到的就會是同一個字串。
這個工具可以檢查網站地圖索引檔嗎?
可以。貼上一份根元素是 <sitemapindex> 的檔案,檢查規則會自動切換成索引規則:每一筆必須是 <sitemap>,只有一個 <loc>,最多再加一個 <lastmod>,不能混入 <priority>、<changefreq> 或 <url>。它沒辦法往下追子網站地圖,因為它從不抓取任何東西 —— 子檔案請一份一份貼進來檢查。
壓縮過的 sitemap.xml.gz 也可以嗎?
可以。把 .gz 檔拖到框裡,或用檔案按鈕選擇,你的瀏覽器會在本機解壓縮之後才開始檢查。要注意 gzip 不會改變大小上限:50 MB 是對未壓縮檔案量的,報告上顯示的也是那個數字。
我的檔案會被上傳嗎?為什麼不能直接輸入網址?
不會上傳。這個檢查工具是跑在你瀏覽器裡的一段程式:你貼上或拖進來的東西不會離開這個頁面,沒有帳號也不用註冊,頁面載入之後即使離線也能用。這同時也是它沒辦法去抓網址的原因 —— 同源政策不允許一個網域的頁面去讀另一個網域的檔案,除非對方送出 CORS 標頭,而幾乎沒有網站會為 sitemap.xml 這麼做。請自己用 curl 抓下來再貼上;換來的是你也可以檢查還沒上線、在 CI 裡產生、或藏在登入後面的檔案。
檔案有效只是地板。接下來要看的是什麼被索引了。
檢查自己的網站不用錢:它會把你的網站地圖和 Search Console 資源一起讀,列出每一頁當下的 HTTP 狀態與索引狀態,標出那些從來沒拿過一次曝光的頁面,並把流量按來源拆開、AI 引擎單獨計算。在你的代理人裡一行指令就跑完。
$ npm i -g @clize/clize && clize install $ clize seo check --domain yourdomain.com.tw[ Agent SEO by Clize → ]