為 WordPress 網站產生 robots.txt 意味著在您的配置、網域主機與連接埠的「完全根目錄」上,產生一個以 UTF-8 編碼的純文字檔,該檔案會使用 RFC 9309 標準化的「群組與規則」結構來列出爬蟲請求。像 Robots.txt Generator 這種瀏覽器型的產生器,會將您設定檔中的每一個位元組保留在當前的分頁中——不會上傳到後端、不會從上線中的網站擷取、也不會傳送給任何搜尋引擎。該檔案本身包含一個以萬用字元 (wildcard) 表示的 User-agent 群組、一個您選擇的 Allow 或 Disallow 政策,以及一行根據您所輸入的網站來源 (origin) 自動產生的 sitemap 行。由於這個通訊協定是區分大小寫 (case-sensitive)、採用最長匹配 (longest-match)、並從 URL 路徑的第一個八位元組 (octet) 開始比對,因此每一條規則都必須以斜線開頭、完全重複的條目會依「先出現」順序合併,而 `/Private` 與 `/private` 兩者不可互換。這些限制條件,加上刻意設定的 50 條規則上限,以及拒絕輸出 Crawl-delay 的設計,正是讓輸出結果誠實(而非紙面上好看)的原因;本文接下來會說明如何在不使用外掛的情況下,將這個產生器整合進 WordPress 的工作流程中。

how to generate robots txt in wordpress
how to generate robots txt in wordpress

為什麼 WordPress 網站需要一份符合標準的 robots.txt

WordPress 長期以來會在使用者沒有上傳檔案時,自動提供一份「虛擬的」robots.txt,這代表許多 WordPress 安裝在站長自行建立檔案之前,根本不會在磁碟上看到一個實體檔案。那些會輸出 sitemap、內部搜尋範本、摘要 (feed) URL,以及預覽連結的外掛,都會擴大爬蟲可發現的 URL 表面。在缺乏一份刻意設定的檔案時,這些 URL 預設會被爬取;而一組少量但可預測的管理後台、登入頁與佈景主題路徑,對於任何遵守協定的爬蟲來說都僅有一鍵之遙。

一份符合標準的 robots.txt 提供了一個單一、可版本控管的場所,讓您表達合規的爬蟲應當避開哪些內容。它本身不做任何身分驗證、不隱藏任何東西、也不加密任何東西——這些責任仍屬於應用程式——但它劃定了主流搜尋引擎會優先讀取的禮貌邊界。Robots.txt Generator 恰好會產生這樣一份檔案:一份 UTF-8 純文字文件,包含一個以萬用字元表示的 User-agent 群組、一個由您選擇的 Allow 或 Disallow 政策,以及一行指向您所輸入來源的 sitemap。

對 WordPress 來說,產生器「應該」與「不應該」做什麼

一個值得信賴的瀏覽器端產生器,應當在不模仿各家爬蟲私有擴充的前提下,遵守 RFC 9309 的限制。對 WordPress 工作流程而言,這代表:

  • 將您貼上的 URL 正規化為一個不帶認證資訊的來源 (origin),避免 sitemap 行不小心繼承到來自瀏覽器分頁的路徑、查詢字串或片段。
  • 輸出一個萬用字元群組,在沒有更具體的匹配時套用,而不是堆疊自行發明的指令。
  • 只接受以斜線開頭的規則格式,保留 `*` 與結尾 `$` 等通訊協定所定義的特殊字元,並拒絕 `#`,以避免一個多餘的字元悄悄地把某段規則變成註解。
  • 依「先出現」的順序移除完全重複的條目,並將規則總數控制在 50 條以內,讓結果可以在單一畫面內完成稽核。
  • 拒絕加入 Crawl-delay,因為 RFC 9309 標準規則並未納入這個指令,而且各家爬蟲對它的支援也不一致。

同一個工具也應該誠實說明它「做不到」什麼。它不會擷取現有的上線檔案、不會把產生的檔案提交給搜尋引擎、不會驗證伺服器的回應,也不會確認爬蟲已重新整理其快取。這些動作都需要存取已部署的 WordPress 網站與搜尋引擎本身工具的權限;若假裝能夠做到,反而會讓設定檔因為背景擷取而被悄悄損毀。

為 WordPress 產生一份 Robots.txt 檔案

  1. 開啟產生器並貼上您的網站來源。輸入您希望這份檔案管轄的 WordPress 網站之完整 HTTP 或 HTTPS URL。貼上前請先移除任何路徑、查詢字串或片段,讓工具把這個值化簡為一個乾淨的來源;明確指定的連接埠會予以保留。
  2. 選擇整體的爬蟲政策。Allow all 會寫出 `Allow: /`;選 Block all 會寫出 `Disallow: /`;或選 Selective 來保留預設的 allow 行為,並額外加入明確的 disallow 行。
  3. 在選擇性模式下,每行輸入一個要禁止的路徑。每一條非空白的規則都必須以斜線開頭;完全重複的條目會依「先出現」順序合併;整份清單上限為 50 條。萬用字元星號與結尾的 `$` 會依通訊協定定義,作為特殊比對字元予以保留;井字號則會被拒絕。
  4. 產生並檢視文字內容。請檢查輸出中是否包含一個以萬用字元表示的 User-agent 群組、您所選擇的 Allow 或 Disallow 規則,以及一行 `Sitemap:`,指向經過正規化的來源再加上 `/sitemap.xml`。
  5. 與目前線上的正式檔案進行比對。在上線之前,先下載產生的文字、開啟上線中的 robots.txt,並將兩者並排 diff。請保留產生器並未寫入、但您刻意設定的爬蟲專屬群組,並留存一份舊檔以便日後回復。
  6. 把檔案發布到其管轄範圍的「完全根目錄」。以全小寫將該文字檔以 `/robots.txt` 這個名稱上傳到相同的配置、網域主機與連接埠,並以 `text/plain` 形式提供。放在子目錄、不同子網域或不同協定下的檔案,將不會管轄您的 WordPress 來源。
  7. 測試公開與被封鎖的 URL。使用相關搜尋引擎的測試工具,確認幾個具代表性的路徑仍如您預期般運作;在每次更新會影響到 sitemap 或 rewrite 規則的 WordPress 外掛後,也應重新檢查。

檢視 WordPress 網站產生的輸出內容

當文字攤在您面前時,有四項檢查可以幫助您避開最常見的 WordPress 錯誤。第一,大小寫:RFC 9309 明確規定爬蟲應以區分大小寫的方式比對路徑,因此 `/Private` 與 `/private` 是兩條不同的規則,只有其中一條會與 CMS 實際提供的 URL 匹配。第二,錨點:`Disallow: /draft` 與 `Disallow: /draft$` 表達的意圖並不相同——後者會停在段落 (segment) 的邊界,而前者是前綴匹配。第三,最長匹配:當多個群組都可能套用時,最明確的那一個會勝出,因此您排列規則的順序,重要性反而不及規則本身的明確度。第四,sitemap 行:它是由您經過正規化的來源加上 `/sitemap.xml` 構成;若您真正的 sitemap 實際位於別處——例如在會輸出 `/sitemap_index.xml` 的外掛後方,或在另一個 `/news-sitemap.xml` 中——請在上線前編輯這一行。

政策模式產生器寫入的內容在 WordPress 網站上的實際用途
Allow allUser-agent: *Allow: /Sitemap: …/sitemap.xml希望所有 URL 都能被發現的公開部落格與內容網站。
Block allUser-agent: *Disallow: /Sitemap: …/sitemap.xml預備上線環境、上線前的網域,或私人版本。
SelectiveUser-agent: *Disallow: /first-pathDisallow: /second-pathSitemap: …/sitemap.xml正式上線的 WordPress:必須讓管理後台、搜尋或內部面向 (facet) 保持不可爬取,但其餘部分仍可被索引。

在 WordPress 中替換或新增檔案

WordPress 只會接受位於您所設定來源「根目錄」的 robots.txt。若您將檔案上傳到像 `/wp-content/` 這樣的子目錄,或上傳到 `www.` 子網域,而您的標準來源卻是頂級網域 (apex),那麼合規的爬蟲仍會繼續讀取 WordPress 所產生的虛擬檔案。實際上有兩條可行路徑,可讓您把產生的文字放上線:透過 SFTP、SSH 或主機商提供的檔案管理員來編輯或上傳實體檔案;或者,在主機商封鎖根目錄寫入時,使用一款會「依需求」寫入檔案的 robots.txt 外掛,並驗證最終結果可在「裸來源」(bare origin) 上正確解析。

在覆寫任何檔案之前,請依逐步操作章節所描述的方式,將新的文字與目前線上的正式檔案進行比對。外掛有時會加入它們自己的指令(例如 WooCommerce 的購物車 disallow,或 multilingual 切換器的排除),而一個刻意只輸出一組通用群組的產生器並不會重現這些內容。請留存一份舊檔備份;若您真正的 sitemap 位於不同的 URL,請編輯產生的 `Sitemap:` 行;並確認伺服器送出的 Content-Type 是 `text/plain`,且檔名為小寫。這種小型檔案也正是當您將 WordPress 遷移到新網域、從 HTTP 切換到 HTTPS,或從 `www` 改用頂級網域時,應該重新檢視的地方,因為它的作用範圍僅限於特定的單一配置、主機與連接埠。

常見的 WordPress robots.txt 模式及其意義

WordPress 網站通常只會考慮一小組可預測的路徑。下表列出人們最常貼進產生器的模式,以及它們在 RFC 9309 下的實際意義;它不會為您代勞運算出一份清單,因為每個網站的爬取預算 (crawl budget) 與內容策略各不相同。

模式它會匹配到什麼為何 WordPress 網站會考慮它
/wp-admin/所有以 /wp-admin/ 開頭的 URL管理後台本就不是設計給爬蟲的,結尾的斜線可避免與外掛目錄產生部分匹配。
/wp-includes/所有以 /wp-includes/ 開頭的 URL核心 PHP 與 JavaScript 檔案,幾乎不會變動;爬取它只是浪費預算。
/?s=透過 s 參數進行的內部搜尋查詢搜尋結果頁通常內容薄弱,而且會產生大量近似重複的內容。
/search/經過美化 (pretty permalink) 的搜尋結果在改寫過搜尋 URL 的網站上,目的與上一項相同。
/author/作者彙整頁在多人共筆的部落格中相當實用,可讓彙整面向 (archive facet) 不會進入索引。
/feed/RSS 與 Atom 的 feed URL選用性質;有些發布者會讓 feed 保留在索引中,有些則會加以封鎖。

上線後請記住:封鎖爬取並不保證從搜尋結果中移除。搜尋引擎仍可能透過反向連結發現某個 URL,並在不下載被封鎖頁面的情況下,保留一段有限的摘要。當您的目標實際上是「不讓某個頁面出現在結果中」時,請使用適當的索引或移除控制機制——例如頁面層級的 noindex meta 標籤、HTTP 標頭,或身分驗證的存取控管。RFC 9309 規格明確指出,這些規則並非存取授權機制,而 Google 爬蟲基礎架構說明文件則描述了它的爬蟲實際上如何讀取這份檔案。若想獲得更廣泛、與環境無關的逐步解說,說明這份檔案如何運作,以及如何稽核一份既有的檔案,請參考 如何在 WordPress 中建立 robots.txt 檔案的實用指南,該文與前文以產生器為核心的流程相輔相成。

若想進一步深入了解,請參考 Generate llms.txt From a Storybook Docs Site