無法生成 Sitemap 也無法提交 Sitemap
當您的 WordPress 網站使用 Yoast SEO 外掛來產生 Sitemap.xml 時,偶爾可能會遇到一個令人困擾的問題,當你試著查看 Sitemap 並訪問 Sitemap.xml 會轉變成頁面 404 找不到或者變成一個頁面結構的網址錯誤。特別是在使用了多國語系外掛 WPML 的情況下,如果您的永久連結設定為使用文章 ID 而非文章名稱,這個問題更為常見。
問題原因解析:
在 WPML 和 Yoast SEO 一起使用時,Yoast SEO 外掛可能無法正確生成各語系的 Sitemap。這是因為 Yoast SEO 在多語言環境下的 URL 處理與 WordPress 核心的 URL 生成方式可能不完全相容。
解決方案:
一個簡單而有效的解決方法是改變 Sitemap 的生成方式。將 Sitemap 的獲取 URL 從標準的 https://您的網站.com/sitemap_index.xml
更改為 https://您的網站.com/?sitemap=1
。這種方法可以直接指示 WordPress 以一種不受永久連結設定影響的方式來生成 Sitemap,從而避免了 404 錯誤。
實施步驟:
- 登入您的 WordPress 後台。
- 轉至「設定」>「永久連結」,並確認您的設定是以文章 ID 為主。
- 使用上述提到的
https://您的網站.com/?sitemap=1
作為您的 Sitemap URL。 - 提交新的 Sitemap URL 到 Google Search Console,以確保 Google 能夠抓取並索引您的網站。
此外,確保您的 WPML 和 Yoast SEO 外掛都是最新版本,以利用最新的改進和修復。
解釋用法
通過直接在 URL 中加入 ?sitemap=1
,WordPress 將根據當前的外掛和設定動態生成 Sitemap。這種方式不依賴永久連結的結構,因此可以在多種設定下穩定工作。但是當進入第二層,他還是會要求子目錄檔案結構,因此這已經牽涉到 NGINX 的網址 rewrite 功能,他預設看起來的卻是 https://www.example.com/sitemap_index.xml 你可以用 ?sitemap=1 來應對沒有特別 rewrite 的 NGINX 主機,但如果您可以進行 NGINX 這端的主機設定,以下可以解決這問題:
#Yoast SEO Sitemaps
location ~ ([^/]*)sitemap(.*).x(m|s)l$ {
## this rewrites sitemap.xml to /sitemap_index.xml
rewrite ^/sitemap.xml$ /sitemap_index.xml permanent;
## this makes the XML sitemaps work
rewrite ^/([a-z]+)?-?sitemap.xsl$ /index.php?yoast-sitemap-xsl=$1 last;
rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
## The following lines are optional for the premium extensions
## News SEO
rewrite ^/news-sitemap.xml$ /index.php?sitemap=wpseo_news last;
## Local SEO
rewrite ^/locations.kml$ /index.php?sitemap=wpseo_local_kml last;
rewrite ^/geo-sitemap.xml$ /index.php?sitemap=wpseo_local last;
## Video SEO
rewrite ^/video-sitemap.xsl$ /index.php?yoast-sitemap-xsl=video last;
}
試著看看吧!不然就把設定的永久連結結構從預設改成純數值 https://www.example.com/archives/123 這種模式也是一個解決方式。