官網上線滿三個月,關鍵字都已經寫進標題與內文,Google 搜尋卻還是找不到某幾頁產品介紹。頁面內容明明用心寫過,連結卻藏得很深,新頁面只能等 Google 自己慢慢找上門,運氣不好可能拖上好幾個月都排不進搜尋結果。
WordPress sitemap 設定要處理的正是這個問題。Sitemap 是一份用 XML 格式寫成的清單,把網站上所有想被搜尋引擎看到的網址整理好直接遞給 Google,省去它自己摸索連結的時間。設定對了,新頁面被發現的速度會快上不少;沒設定好,內部搜尋結果頁、感謝頁這類不該曝光的內容反而可能被一起收錄進去。
這篇就順著這個問題往下拆,從 sitemap 本身解決什麼問題講起,一路講到 WordPress 內建版本夠不夠用、該排除哪些頁面,最後是提交進 Google Search Console 後該怎麼確認生效。先從最基本的定義講起。
Sitemap 是什麼?為什麼 WordPress 網站一定要有它
Sitemap(有時也譯作網站地圖,跟給使用者看的網站導覽頁完全是兩回事)是一份用 XML 格式寫成的清單,裡面列出網站上所有想讓搜尋引擎看到的網址。它要解決的是「抓取(crawling)」這一關的問題,搜尋引擎平常靠著網站內部的連結一路點過去發現新頁面,但只要某個頁面的連結沒接好、藏得太深,或者根本沒有其他頁面連到它,Google 就可能一直不知道這個頁面存在。Sitemap 等於直接把整份網址清單遞給搜尋引擎,跳過連結摸索的過程。
不過要先分清楚「抓取」跟「索引(indexing)」是兩件不同的事。抓取只是 Google 把頁面內容讀進系統裡,索引才是真正把這個頁面收進搜尋結果的資料庫,之後才有機會出現在搜尋結果裡。Google 在〈建立並提交 Sitemap〉這篇官方說明裡講得很直白,提交 sitemap 只是一個提示,並不保證 Google 一定會下載這份 sitemap,也不保證會用它來檢索網站上的網址。換句話說,WordPress sitemap 設定只能幫搜尋引擎更容易發現頁面,頁面會不會被索引、排名高不高,還是要看內容品質與 Google 自己的判斷,sitemap 本身不會直接推著排名往上走。

不是每個網站都同樣需要 sitemap,但幾種情況特別吃緊:網站才剛上線不久、外部連結還累積得不夠多、網站的頁面階層很深(首頁要點好幾層才會點到某個分類下的產品頁),或者站上有「孤立頁面」,也就是沒有任何內部連結指向它,只能靠 sitemap 才有機會被發現。這幾種狀況剛好就是不少中小企業官網的日常樣子,也是接下來要一路拆下去的重點。
WordPress 內建的 wp-sitemap.xml 在哪裡?怎麼確認它已經生效
WordPress 從 5.5 版開始(2020 年釋出的版本),核心本身就內建這一整套 sitemap 功能,不需要另外裝任何外掛就已經存在。要確認自己的網站有沒有生效很簡單,直接在瀏覽器網址列輸入你的網域加上「/wp-sitemap.xml」,只要沒有被 SEO 外掛接管、也沒有被手動關掉,就會看到一份 XML 格式的索引清單。

這份內建版本預設會收錄哪些內容,官方說明講得很清楚,所有公開且可被查詢的文章類型與分類法彙整頁,加上作者彙整頁與網站首頁,都會自動列進去。也就是說,不管是標準的文章、頁面,還是你另外設定的自訂文章類型,只要屬性設成公開、沒有被特別排除,都會出現在這份清單裡。網站規模夠大的話,單一份 sitemap 最多可以收納 2000 筆網址,超過的部分會自動拆成多份子 sitemap,再由一份 sitemap 索引檔統整起來,整個索引檔最多可以涵蓋 50000 份子 sitemap,一般中小型網站幾乎不會碰到這個上限。
還有一個容易被忽略的細節,WordPress 產生 sitemap 之後,會自動把它的位置寫進 robots.txt。搜尋引擎不用你特別去哪裡登記,只要讀過網站的 robots.txt,就能自己找到 sitemap 索引檔的位置,這也是不少網站管理者從沒手動設定過任何東西、sitemap 卻早就已經存在的原因。至於這份內建版本夠不夠用,還是該換成 SEO 外掛的版本,關鍵在於你需要多細的控制權。
WordPress 內建 sitemap 和 SEO 外掛的 sitemap,有什麼不同?
內建版本跟外掛版本最大的差別,不是哪一個比較厲害,而是控制權握在誰手上。內建版做得到的事很基本,外掛版才能讓你細部決定哪些內容要進 sitemap、哪些要排除在外。

內建版本能控制的範圍很有限
WordPress 核心版的 sitemap,每一筆網址只列出一個必要欄位,也就是網址本身。像 priority(優先權)、changefreq(更新頻率)這類早期 sitemap 協定裡常見的欄位,核心版乾脆不放進去。官方說明的理由是,這些欄位屬於選填,而且大多數搜尋引擎根本不會真的採用它。Yoast 官方文件也提到,他們在 3.5 版把 priority 從自家 sitemap 整個移除,原因是 Google 已經公開表示,多數網站上根本用不到這個欄位。
核心版也沒有任何後台介面可以讓你勾選「這個文章類型不要進 sitemap」「這個分類法不要收錄」,想調整只能透過 functions.php 寫一段程式碼濾鏡(下一節會示範怎麼寫)。另外還有一個不少人會踩到的細節,WordPress 後台如果把「網站能見度」設成「不建議搜尋引擎收錄本網站」,sitemap 功能就會整個被自動關閉,不是空白,是直接不存在。

外掛版本多了哪些控制權?
裝了 Yoast SEO、Rank Math 這類 SEO 外掛之後,通常會發生一件事,外掛啟用當下就會自動接管,把核心版的 wp-sitemap.xml 停用,換成自己產生的那一份。外掛版多出來的能力,包括後台介面可以逐一開關「這個文章類型要不要進 sitemap」「這個分類法要不要進 sitemap」,被標記成 noindex 的內容會自動被排除在外,大型網站的網址也會自動分頁管理,不會擠在單一份檔案裡。
這裡有一個提交前一定要弄清楚的細節,兩種版本的網址並不一樣。核心版是 /wp-sitemap.xml,Yoast、Rank Math 常見的則是 /sitemap_index.xml。提交進 Google Search Console 之前,先確認自己網站實際生效的是哪一個,別提交錯的那一份,也別讓兩份同時存在互相打架。
什麼情況該留用內建、什麼情況該換外掛?
判斷不難。網站架構單純、文章類型單一、沒有什麼頁面特別需要排除,內建版就夠用,不必再多裝一支專門處理 sitemap 的外掛。如果你的網站有多種自訂文章類型、常態會把某些頁面設成 noindex、或者想要更細的排除控制,直接用你手上已經在用的 SEO 外掛(多數 WordPress 網站本來就會裝 Yoast、Rank Math 或 AIOSEO 來處理 meta 資料)產生的版本即可,不需要為了 sitemap 這件事再額外裝一支新外掛。不管留用哪一種,接下來的問題都一樣,站上有些頁面終究不該被搜尋引擎看到,這時候就要動手排除。
不想被收錄的頁面類型,要怎麼從 sitemap 排除?
不是網站上每個網址都該讓搜尋引擎看到。有些頁面本身沒有內容價值,收錄進 sitemap 反而在浪費 Google 抓取的資源,也可能拉低整體網站的內容品質觀感。排除的做法分兩條路,有裝 SEO 外掛的直接用後台開關,沒裝外掛或想針對特定文章類型精準控制的,則用 WordPress 核心本身就提供的程式碼濾鏡。
有裝 SEO 外掛,直接用後台開關排除不想收錄的頁面類型
以 Yoast SEO 為例,XML sitemaps 相關的設定放在「Yoast SEO」→「Settings」→「Site features」底下的「Technical SEO」區塊,每種文章類型與分類法都可以個別切換要不要顯示在搜尋結果裡,而這個開關會連動它要不要出現在 sitemap 中。不同外掛的選單命名方式不太一樣,但基本上都能在「SEO 設定」裡跟 sitemap、文章類型(taxonomies)相關的頁面找到對應開關。
沒裝外掛,用一段程式碼濾鏡排除特定文章類型
WordPress 核心本身就提供了幾個正式的 hook,可以直接寫進子佈景主題的 functions.php,不需要額外裝外掛,也不是自己土法煉鋼想出來的做法。
排除單一個文章類型,例如把「頁面」整個排除在 sitemap 之外:
function exclude_page_from_sitemap( $post_types ) {
unset( $post_types['page'] );
return $post_types;
}
add_filter( 'wp_sitemaps_post_types', 'exclude_page_from_sitemap' );Code language: PHP (php)
如果要一次排除多個文章類型,把要排除的項目都列進同一個函式:
function exclude_multiple_post_types_from_sitemap( $post_types ) {
unset( $post_types['page'] );
unset( $post_types['attachment'] );
return $post_types;
}
add_filter( 'wp_sitemaps_post_types', 'exclude_multiple_post_types_from_sitemap' );Code language: PHP (php)
只想排除某一篇特定文章,不想動整個文章類型,可以改用 wp_sitemaps_posts_query_args 這個濾鏡,直接把該篇文章的 ID 排除在查詢結果之外:
function exclude_single_post_from_sitemap( $args ) {
$args['post__not_in'] = array( 123 );
return $args;
}
add_filter( 'wp_sitemaps_posts_query_args', 'exclude_single_post_from_sitemap' );Code language: PHP (php)
上面這三段程式碼都是修改 sitemap 的查詢條件,如果想連某個內容類型的整個 sitemap 提供者都拿掉(例如覺得作者彙整頁完全沒有存在必要),WordPress 也提供 wp_sitemaps_add_provider 這個濾鏡可以直接移除整個 provider,用法跟上面類似,把想排除的 provider 名稱判斷掉再回傳即可。
這幾種頁面,多數網站都建議排除在外
幾種頁面類型,多數網站都建議直接排除,不必猶豫:
- 附件與縮圖頁,本身沒有獨立的內容價值,單獨被收錄只會變成搜尋結果裡的一堆空殼頁面。
- 內容單薄的分類法彙整頁,像是標籤頁,網站規模還小的時候,標籤頁常常只掛了一兩篇文章,很容易被判定成重複內容。
- 純粹後台用途的自訂文章類型,例如表單提交紀錄,這類內容本來就不是寫給訪客看的。
- 結帳頁、感謝頁這類流程頁,這些頁面不該公開讓搜尋引擎收錄,也不該出現在搜尋結果裡讓陌生訪客直接點進來。

頁面排除設定好之後,sitemap 內容才算真正乾淨,接下來就是把它交到 Google 手上。
Sitemap 做好之後,要怎麼提交給 Google Search Console?
Sitemap 做好只是第一步,多數情況下 Google 早晚會自己找到它,但主動提交進 Search Console,能讓這個被發現的過程快上不少。這一節走一次實際的操作流程,從確認網址到送出提交。
先確認你實際要提交的是哪一個 sitemap 網址
呼應前面提過的差異,核心版是 /wp-sitemap.xml,外掛版通常是 /sitemap_index.xml,或外掛自訂的其他路徑。提交前,先直接在瀏覽器打開這個網址,確認畫面能正常顯示 XML 內容,不是一片空白或錯誤訊息。也順便檢查裡面列出的網址是不是完整的絕對網址,也就是從 https 開頭、帶著完整網域,而不是只有 /page-name 這種相對路徑。Google 官方文件講得很明確,sitemap 裡的網址要用完整的絕對網址,Google 會照著清單上寫的網址原封不動去抓取;也建議 sitemap 放在網站根目錄下,這樣才能涵蓋到全站的所有頁面,不會因為放在子目錄裡而只影響到該目錄底下的內容。
怎麼把 sitemap 網址提交進 GSC 的 Sitemap 報表?
登入 Google Search Console,選擇已經驗證過的資源,左側選單點進「Sitemap」報表,在「新增 Sitemap」的欄位貼上你剛才確認過的 sitemap 路徑,按下提交。提交後系統通常會馬上去讀取,但這不代表 Google 保證會下載或使用這份 sitemap 來檢索你的網站,提交終究只是一個提示訊號,實際會不會被用上,還是由 Google 自己判斷。另外要提醒,提交這個動作需要你擁有這個資源的擁有者權限;如果你手上沒有這個權限,也還有替代方案,可以改在 robots.txt 裡直接宣告 sitemap 的位置,一樣能讓搜尋引擎找到它。提交送出之後,故事還沒結束,還要回頭確認 Google 有沒有真的把它讀進去。

提交之後,要怎麼確認 Google 真的有讀到 sitemap?
GSC 的 Sitemap 報表,提交完之後就會顯示這份 sitemap 目前的處理狀態,看懂這些狀態,才知道下一步該不該處理。
「成功」與「有錯誤」,狀態分別代表什麼?
狀態顯示「成功」,代表 Google 已經把這份 sitemap 讀取並處理完畢,沒有發生任何錯誤,裡面所有的網址都會被加進檢索佇列。不過加進檢索佇列,跟頁面真的被索引,是兩件事,索引與否還要看個別網頁本身的內容品質,以及 Google 自己的判斷,不是進了佇列就等於上了搜尋結果。狀態顯示「有錯誤」,則代表 Google 在讀取或解析這份 sitemap 的過程中出了狀況,需要點進去看詳細的錯誤類型才能知道問題出在哪裡。
最常見的幾種擷取錯誤,代表什麼問題?
幾種 WordPress 網站的站長最容易踩到的錯誤類型,先弄懂它們代表什麼,排查起來會快很多。
「無法存取網址」,代表 sitemap 裡列出的網址本身連不上,常見原因是網址本身打錯了,或者伺服器把 Google 的檢索請求擋掉了。「不允許的網址」,代表 sitemap 裡的網址,跟 sitemap 檔案本身所在的網域或路徑層級對不上,常發生在換過網域、搬過家,或者 http 跟 https 沒有統一之後忘記重新提交這幾種情況。「Sitemap 中沒有內容」,代表 sitemap 裡完全沒有列出任何網址,最常見的原因是網站可見度被設成「不建議搜尋引擎收錄」,導致整個 sitemap 功能被停用,清單自然是空的。把這幾種狀態顧好,sitemap 對傳統搜尋引擎這一塊就穩了,剩下一個近年常被問到的問題是,AI 爬蟲會不會也讀這份 sitemap。
AI 爬蟲也會讀 sitemap 嗎?跟常聽到的 llms.txt 有什麼不同?
這兩個概念常被混在一起講,但它們要解決的問題其實不一樣。Sitemap 服務的對象是傳統搜尋引擎的爬蟲,也包括會遵守 robots.txt 與 sitemap 協定的 AI 爬蟲,它解決的是「發現(discovery)」層的問題,也就是告訴爬蟲網站上有哪些頁面存在、該去哪裡找。llms.txt 則是近年才出現的做法,目的是把網站上最值得參考的內容整理成一份乾淨的文字摘要,給 AI 模型或 AI 助理直接讀取,解決的是「脈絡(context)」層的問題,也就是幫 AI 更快抓到這個網站在講什麼重點。兩者要解決的問題不一樣,不能互相取代,也不需要二選一。
不過有一件事要老實講清楚,目前沒有任何主要的大型語言模型或 AI 搜尋服務正式宣布,會把 llms.txt 當成索引或引用的訊號來使用。這仍然是網路社群自行提出的一種做法,還不是正式的技術標準。把 WordPress 的 sitemap 設定好、內容乾淨、涵蓋範圍正確,才是目前真正有明確依據、該優先做好的事;llms.txt 可以當成額外的加分項慢慢補上去,不必把它捧得比 sitemap 還重要。
Sitemap 不是設定一次就永遠不用管的東西。網站之後新增了自訂文章類型、換了一套新的 SEO 外掛,或者砍掉了某個分類,都該回頭檢查 WordPress sitemap 設定有沒有跟著更新,是不是還準確反映網站現在的樣子。GSC 的 Sitemap 報表狀態,就是最簡單也最直接的健檢工具,定期回去看一眼,比等到某天發現新頁面怎麼都搜不到才回頭補救,划算得多。Sitemap 顧好了,內容才輪得到被搜尋引擎與 AI 真正看見。
