robots meta 標籤是一個 HTML meta 元素,其 name 屬性設定為目前已記錄的三個代號之一——robots、googlebot 或 googlebot-news——而該單一代號會決定後續指令適用於哪個爬蟲。這個代號就是讀者在使用 robots 產生器時所選擇的「名稱」,因為所有其他指令(noindex、nofollow、nosnippet、max-snippet、max-video-preview、max-image-preview、notranslate、noimageindex、indexifembedded)都依附於它。一開始就選對代號,是區分「針對所有一般爬蟲」、「將規則縮限到 Google 文字搜尋結果」或「僅限 Google 新聞」的關鍵,而 Meta Robots Generator 能從同一組經過驗證的選項,同時產生 HTML 元素與對等的 X-Robots-Tag HTTP 標頭。

names for robots generator
Robots Meta Tag Names: Pick the Right Crawler Target

name 屬性在 robots meta 標籤中實際控制了什麼

在 HTML 中,meta 元素的意義是由兩個屬性承載:name(或 http-equiv)與 content。對爬蟲指令而言,name 永遠是 Google 目前文件中記錄的三個值之一,而 content 字串則存放指令本身。根據 WHATWG HTML 規格,name 屬性使用如 robots、googlebot 或 googlebot-news 等代號,讓頁面得以在不必為每個爬蟲各自撰寫元素的情況下,指向一個特定的爬蟲範圍。所選的代號會決定指令是套用至所有相容的爬蟲、Google 文字結果管線,還是僅限 Google 新聞管線。

這個代號也是目標爬蟲在處理頁面時能讀懂規則的關鍵。一個寫成 <meta name="robots" content="noindex"> 的頁面,是在對所有遵守 meta robots 規格的爬蟲說話;而 <meta name="googlebot" content="noindex"> 則把規則縮限到 Googlebot 的網頁搜尋管線。僅限新聞的規則使用 googlebot-news 作為代號,Google 在文件中將其提供給希望將特定網址從 Google 新聞排除、卻不影響其一般搜尋呈現的發布者使用。

三個爬蟲目標與其對應的 HTTP 標頭

每個 meta name 都有對應的 X-Robots-Tag 標頭形式;在產生器中選對 name,就等於同時選對了標頭值。一般目標會輸出一個 name 為 robots 的 meta 元素,以及一個未經限定的 X-Robots-Tag 標頭。另外兩個 Google 專屬的目標則以 googlebot 或 googlebot-news 作為 meta name,並在使用者代理代號前加上冒號,作為 HTTP 標頭值的一部分。Google 的 robots meta 標籤文件 列出這兩個使用者代理代號——googlebot 與 googlebot-news——分別用於文字與新聞結果。其他爬蟲名稱與各家廠商特有的行為並不在產生器所聚焦的介面範圍內,因此選擇 googlebot 並不能用來對 Bing 或 DuckDuckGo 發出指示;這些引擎並不會理會名為 googlebot 的 meta 標籤。

當規則需要套用至每個相容的爬蟲時,正確的代號是 robots;當規則僅需套用至 Google 的網頁搜尋管線時,正確的代號是 googlebot;當規則僅需套用至 Google 新聞時,正確的代號是 googlebot-news。選錯代號是一種常見的靜默失敗——頁面仍然會載入,標記也仍然有效,但指令根本不會被預定的爬蟲讀取。

爬蟲範圍 meta name 屬性 X-Robots-Tag 標頭值 典型用途
一般爬蟲 robots X-Robots-Tag: noindex (未限定) 適用於每個相容爬蟲的全站或頁面層級規則
Google 文字結果 googlebot X-Robots-Tag: googlebot: noindex 將指令縮限至 Google 的網頁搜尋管線
Google 新聞 googlebot-news X-Robots-Tag: googlebot-news: noindex 將特定網址加入或排除於 Google 新聞,而不變更標準搜尋呈現

如何建立一個經過驗證的 robots meta 標籤

使用產生器建立 robots meta 標籤是一個三步驟的工作:選擇爬蟲範圍、同時產生 HTML 與 HTTP 語法,然後在允許爬取的前提下部署。

  1. 選擇爬蟲目標,並僅勾選符合資源政策的索引、追蹤與預覽限制。在產生器中,針對一般爬蟲選擇 robots,針對 Google 文字結果選擇 googlebot,針對 Google 新聞選擇 googlebot-news。只勾選真正符合該頁面意圖的指令——noindex 用來將網址排除於結果之外,nofollow 用來要求爬蟲不要追蹤其連結,nosnippet 用來抑制文字與影片預覽片段,max-snippet 搭配一個數字字元限制,max-video-preview 以秒為單位,max-image-preview 設定為 none、standard 或 large,notranslate、noimageindex,以及 indexifembedded 僅能與 noindex 並用。將其他所有選項留空。產生器會拒絕同時輸出 nosnippet 與一個數字 max-snippet,因為限制性更高的規則會讓數字選項產生誤導;同時也會拒絕在沒有 noindex 的情況下使用 indexifembedded,因為 Google 已聲明這種組合本身並無效果。
  2. 產生並複製適用於頁面的 HTML meta 元素,或是適用於伺服器回應的 X-Robots-Tag 標頭。產生器會根據同一組選擇同時輸出兩種形式:HTML meta 元素放入您能控制標記的頁面 <head> 中,而 X-Robots-Tag 那行則由網頁伺服器、應用程式或 CDN 作為 HTTP 回應的一部分送出。在您可直接編輯的 HTML 頁面上使用 HTML 元素;在 PDF、圖片、影片檔案,或任何以回應標頭為可控管道的部署情境中,則使用標頭。max-snippet 欄位接受 -1 或非負整數,其中 zero 等同於沒有片段,而 -1 代表由 Google 自行決定有效長度。Max-video-preview 以秒為單位,zero 僅允許一張靜態圖片,-1 表示沒有限制時長。Max-image-preview 接受 none、standard 或 large,其中 large 允許放大至檢視區寬度大小的預覽。任何超出其文件記載範圍的值都會被拒絕,而不是被複製到 Google 會忽略的規則中。
  3. 在允許爬取的前提下部署,然後檢查公開的原始碼與標頭中是否有重複或衝突的規則,直到重新爬取發生為止。爬蟲必須先能夠擷取資源,才有機會讀取這兩種形式中的任何一個。若 robots.txt 禁止對該網址進行爬取,Google 可能永遠看不到這條規則,因此即使網址會因為外部連結而存在,內容卻不會被處理。若要讓一個可存取的頁面自搜尋結果中移除,請允許爬取並持續提供該指令,直到搜尋引擎處理完畢。部署完成後,以目標使用者代理實際會使用的方式擷取該公開網址,檢查所送出的 HTML 與回應標頭,並確認沒有來自 CMS、SEO 外掛、反向代理或 CDN 的相互矛盾的宣告。

讓 HTTP 語法與 X-Robots-Tag 標頭對應

X-Robots-Tag 是 HTML meta 元素在回應標頭中的對應版本。產生器會以兩種形式序列化同一組指令,因此 name 屬性的選擇也會一併決定標頭值。選擇一般爬蟲會產生未限定的標頭值,例如 X-Robots-Tag: noindex;選擇 googlebot 會產生 X-Robots-Tag: googlebot: noindex;選擇 googlebot-news 則會產生 X-Robots-Tag: googlebot-news: noindex。此標頭設定於伺服器、應用程式或 CDN 層,將顯示出的標頭文字貼到 HTML 頁面內容中完全沒有作用——它必須以真正的 HTTP 回應標頭形式傳送。

標頭形式是非 HTML 資源(例如 PDF、圖片與影片檔案)的正確管道,也是任何以標頭管理比標記更方便之部署的正確管道。當反向代理或 CDN 代為寫入指令時,標頭形式也是正確的管道,因為檢查實際送出的標頭是唯一能看見最終值的方式。當資源規則可能被隱藏在 CMS 外掛或伺服器設定中時,務必檢查公開使用者實際收到的回應,而不只是編輯器中的設定。產生器中顯示的標頭文字正是您在伺服器層級需要設定的那一行;不要把它貼到頁面中,然後期待爬蟲會遵守。

部署、驗證與處理衝突規則

部署完成後,以目標使用者代理實際能使用的方式擷取該公開網址,並檢查所送出的原始碼或回應標頭。留意重複或相互矛盾的宣告:CMS、SEO 外掛、反向代理與 CDN 各自都可能加上自己的 robots meta 標籤或 X-Robots-Tag 標頭,因此編輯器畫面並非唯一的真實來源。Google 表示,當規則發生衝突時,限制性較高者優先適用,這代表來自某個管道的 noindex 與來自另一個管道的 index 並存時,該頁面仍會處於 noindex 狀態。在新增任何標籤之前,請先盤點所有現有指令,因為單一放錯位置的規則就可能覆蓋其餘規則。

產生器內建的衝突規則能在標籤送出前預先防範最嚴重的矛盾。它拒絕將 nosnippet 與數字 max-snippet 並用,因為限制性更高的 nosnippet 會讓數字選項產生誤導。Indexifembedded 以 noindex 為前提,因為 Google 已聲明它僅在與 noindex 並用時才會生效。產生器也會拒絕非整數的數字值、低於文件記載下限的值,以及任何超出 Google 文件記載範圍的 max-snippet 或 max-video-preview 輸入——它會顯示這些拒絕結果,而不是把 Google 會忽略的值複製到規則中。

產生過程完全在本地端完成,輸出內容可在不聯絡任何搜尋服務的情況下直接複製,這符合 Create Valid Robots Meta Tags Without an API 中所描述的工作流程,適合不希望將網址傳送給第三方的發布者。產生器能產出正確的語法,但它無法保證實際下架、重新爬取的時機,或規則生效後的特定搜尋結果呈現——搜尋引擎會依其自身的排程處理變更,其他引擎對 Google 專屬指令的解讀也可能不同。

延伸閱讀:Meta Tag Generator for Blogger: A Basic Head Block。