SEO 完整攻略

探索 SEO 的最佳實踐,提升網站能見度與流量。

robots.txt 與 sitemap.xml

告訴搜尋引擎該抓哪裡、不要抓哪裡,讓爬蟲跑得更順。

robots.txt 與 sitemap.xml

robots.txt:讓搜尋引擎知道你不想被抓的地方

什麼是 robots.txt?為何它重要

robots.txt 是什麼?

在網站上,robots.txt 就是搜尋引擎機器人(爬蟲)看到的「門禁卡」,告訴它們哪些地方可以進去、哪些地方要留在外面。這個檔案放在你網站根目錄最外層,例如 https://example.com/robots.txt

主要用途

  • 控制爬蟲抓取範圍,避免無謂的資源浪費。
  • 防止重複內容被索引,保持搜尋結果乾淨。
  • 保護機密或開發中的頁面不被公開。

基本語法

這是一個 robots.txt 範例

User-agent: * # 所有爬蟲都適用
Disallow: /admin/ # 不允許抓取 admin 目錄
Allow: /admin/public/ # 但允許抓取 public 子目錄
Sitemap: https://example.com/sitemap.xml # 提供 sitemap 位置

常見指令說明

指令 含義 範例
User-agent 指定目標爬蟲(* 為全部) User-agent: Googlebot
Disallow 禁止抓取的路徑 Disallow: /tmp/
Allow 允許抓取的路徑(可覆蓋 Disallow) Allow: /blog/
Sitemap 提供 sitemap 的 URL Sitemap: https://example.com/sitemap.xml

為什麼要寫 robots.txt?

  • 節省頻寬:搜尋引擎每抓一次都會佔用你伺服器的資源,對小站尤其重要。
  • 避免重複內容:像是 /index.php?page=1/page/1 兩種寫法,如果沒加限制,搜尋結果可能被分散。
  • 保護隱私:不想讓 https://example.com/admin/login.php 被公開索引。

常見錯誤

  • 路徑大小寫問題:Linux 伺服器區分大小寫,確定路徑正確。
  • 忘記加斜線Disallow: /adminDisallow: /admin/ 的差別在於是否包含子目錄。
  • 使用萬用字元錯誤* 只能放在路徑末端,不能寫成 */tmp/*

快速參考表格

指令 說明 範例
User-agent: * 所有爬蟲 User-agent: *
Disallow: /private/ 禁止抓取 /private/ 目錄及其子頁面 Disallow: /private/
Allow: /public/ 允許抓取 /public/,可覆蓋前面的 Disallow Allow: /public/
Sitemap: https://example.com/sitemap.xml 告訴爬蟲 sitemap 的位置 Sitemap: https://example.com/sitemap.xml

建議實作流程

  • 第一步:列出你不想讓搜尋引擎抓的路徑。
  • 第二步:在根目錄新建或編輯 robots.txt,寫入上述指令。
  • 第三步:用瀏覽器打開 https://example.com/robots.txt 確認內容正確。
  • 第四步:使用 Google Search Console 的「Robots.txt 測試工具」確認設定無誤。

小提醒

  1. robots.txt 只是一種建議,並非絕對封鎖;若你想完全阻止抓取,可在伺服器上加 .htaccess 或其他方式。
  2. 定期檢查 robots.txt,確保新增或刪除的頁面不會被意外公開。

語法大揭密:User-agent、Disallow、Allow 等指令

在 robots.txt 裡,最常見的三個指令就是 User-agent、Disallow 與 Allow。這些字眼聽起來像程式碼,但其實它們只是在告訴搜尋引擎「哪個爬蟲可以走哪段路」。

User-agent 指令

User‑agent 代表的是你想要控制的爬蟲名稱,最常見的如 googlebot、bingbot 等。若想一次對所有爬蟲生效,只寫 *。

Disallow 指令

Disallow 後面接路徑,即表示「不要抓取這條路徑」。如果後面不跟任何字元,代表允許全部抓取。

Allow 指令

Allow 只在某些搜尋引擎(尤其是 Google)支援,它能覆寫前面的 Disallow。舉例:

User-agent: *
Disallow: /private/
Allow: /private/公開.html

Crawl-delay 指令

Crawl‑delay 可以讓你設定爬蟲抓取的速率,單位為秒。例如 3 表示每三秒抓一次。

Sitemap 指令

Sitemap 用來告訴搜尋引擎你的 sitemap 檔案位置,通常放在檔尾:

Sitemap: https://example.com/sitemap.xml
小結

記住:指令順序不影響效力,但同一個 User-agent 內的 Allow 必須寫在 Disallow 之後才能覆寫。

常見陷阱與解法

  1. 大小寫敏感:路徑必須跟實際檔案相符,/Home/ 與 /home/ 可能被視為不同。
  2. 重複 User-agent:若同一個爬蟲在多段宣告,只會以最後一次設定生效,最好只寫一次。
  3. 結尾斜線:Disallow: /folder 與 Disallow: /folder/ 的差別是前者阻止整個資料夾及子路徑,而後者僅阻止該資料夾本身(如果有 index)。

先進技巧

  • 使用正則表達式:Google 支援簡易的正則,例如 Disallow: /*.php,表示所有 php 檔案都不抓。
  • 分層管理:將 robots.txt 拆成多個檔案,用 <meta> 標籤或伺服器重寫導向動態產生,能更靈活控制。

測試與驗證

Google Search Console 的「robots.txt 測試工具」可以即時告訴你某條路徑是否被允許。步驟:

1. 登入 GSC -> 索引 -> robots.txt 測試
2. 輸入 URL,點擊測試即可。

結語

robots.txt 不是安全機制,也不會阻擋惡意爬蟲;它只是搜尋引擎的禮貌協議。正確寫法能避免被抓到重複內容、保護私密資料,同時保持網站效能。

常見例子:防止重複內容、保護管理後台

在網路開發中,robots.txt 不只是一個簡單的檔案,它能幫你告訴搜尋引擎哪些地方不要抓取。

防止重複內容 (Duplicate Content)
當網站有多個 URL 指向同一篇文章時,搜尋引擎可能會因為「哪條連結最值得推薦」而分散權重。常見情況包括:

  • 產品頁面可以在 product.htmlproduct.php?id=123 兩個網址同時存在。
  • 分類目錄同時有 /category/1/cat/1 的路徑。
  • 資料庫產生的動態頁面,例如 /article?slug=hello-world/blog/hello-world

解決方法:

  • 在 robots.txt 內用 Disallow 封鎖所有非正式的或動態生成的 URL,僅保留主頁面路徑。
  • 或者使用 canonical 標籤在 HTML 裡宣告「正式」URL;這是更常見且搜尋引擎友善的做法,但 robots.txt 仍可作為額外防護。

保護管理後台 (Admin Backend)
大多數網站都會有 /admin, /backend/dashboard 等路徑,這些地方不應該被搜尋引擎抓取,也不要讓外部人輕易找到。
常見做法:

  • 在 robots.txt 加入 Disallow: /admin/Disallow: /backend/ 等指令,告訴爬蟲這些目錄不需要索引。
  • 搭配 IP 限制或 HTTP Basic Auth 進一步保護;robots.txt 只是一層「宣告」而已,真正的安全還是要靠身份驗證。

robots.txt 範例

User-agent: *
#### 防止重複內容的動態參數
Disallow: /*?*
#### 保護管理後台
Disallow: /admin/
Disallow: /backend/

常見錯誤

  • robots.txt 放在 /public/robots.txt,但實際上搜尋引擎會尋找根目錄下的檔案,導致無效。
  • 忘記更新 robots.txt 後沒有重新抓取;可以用 Google Search Console 的「索引覆蓋」工具手動請求重新抓取。

小結
robots.txt 只是告訴搜尋機器人你不想讓它們去哪裡,真正的安全還需要身份驗證、權限控制等措施;但對於防止重複內容和保護後台,它是一個簡單且有效的第一道防線。

測試工具介紹:Google Search Console 與其他檢查器

測試工具介紹:Google Search Console 與其他檢查器

在 SEO 的日常工作裡,測試與驗證的步驟就像是烹飪前先嘗味一樣重要。這篇文章會帶你快速了解兩大類工具:Google Search Console(GSC) 與一些常見的第三方檢查器。從「robots.txt」到「sitemap.xml」,只要掌握正確使用方式,網站就能順利被搜尋引擎抓取,也能避免不必要的錯誤。

以下分章節說明:

  • Google Search Console 的核心功能與操作流程
  • 常用的第三方檢查器(如 Screaming Frog、Sitechecker 等)
  • 兩者如何互補,協助你快速定位問題

使用 Google Search Console 進行 robots.txt 與 sitemap.xml 檢查

1️⃣ 先把網站驗證:登入 GSC 後,選擇「新增屬性」輸入你網站的網址,依照提示完成 Domain、HTTP(S) 或 HTML 標籤驗證。若已驗證過,只需進入對應屬性即可。

2️⃣ 查看 robots.txt:在左側選單點擊「覆寫設定」->「robots.txt 測試工具」。

  • 在右上角輸入你想測試的 URL(例如 https://example.com/blog/),按下「測試」即可看到搜尋引擎對該頁面的存取權限。
  • 若顯示 允許,表示 robots.txt 允許抓取;若顯示 禁止,則需要檢查是否因為 Disallow: 設定或是 User-agent: * 的範圍造成。

3️⃣ 提交 sitemap.xml:點擊「站台地圖」->「新增/測試」。輸入 sitemap 位置(通常是 /sitemap.xml),系統會自動抓取並檢查格式正確性。若有錯誤,GSC 會指出是哪一筆 URL 無法被索引。

4️⃣ 查看覆蓋狀態:左側選單的「覆蓋」報表能告訴你哪些頁面因 robots.txt 或其他原因無法抓取。這裡還有「問題」與「成功」兩欄,方便快速辨識。

範例:robots.txt 常見寫法
  • 允許所有搜尋引擎爬蟲抓取整站
User-agent: *
Disallow:
  • 禁止特定目錄(如 /admin/
User-agent: *
Disallow: /admin/
  • 僅允許 Googlebot 抓取,其他禁止
User-agent: Googlebot
Allow: /
User-agent: *
Disallow: /

常見第三方檢查器:Screaming Frog、Sitechecker 與 Robots.txt Checker

  • Screaming Frog SEO Spider:這個桌面工具能快速抓取整站,並自動列出 robots.txt 設定。只要在「設定」->「robots.txt」開啟,即可看到哪些 URL 被拒絕。

  • Sitechecker:線上服務提供即時 robots.txt 與 sitemap.xml 驗證。它還能告訴你檔案大小、存取權限,以及是否符合 XML Schema。

  • Robots.txt Checker(免費工具):只需輸入網站網址,即可快速回傳一份簡易報表,說明哪些 User-agent 被允許或禁止。對於小型站台而言,是個省時的好幫手。

例子:使用 Screaming Frog 把握抓取範圍
  • 開啟工具,輸入 https://example.com/,按下「Start」開始抓取。

  • 抓取完成後,點擊左上角的「Configuration」->「Robots.txt」,可以看到工具已讀取該檔案並列出所有規則。若有錯誤,會在報表中標記為 Error

  • 在「Internal」分頁中,你可以篩選出被拒絕抓取的 URL(Status Code 403 / 404Robots.txt Blocked),方便你進一步檢查或修改 robots.txt。

如何把 Google Search Console 與第三方工具結合使用

1️⃣ 先在 GSC 確認基礎設定:確認 sitemap 已提交且 robots.txt 無重大錯誤。

2️⃣ 用 Screaming Frog 深度抓取:檢查是否有漏抓的頁面、重複內容或 broken link。結果可以匯出成 CSV,方便後續分析。

3️⃣ 利用 Sitechecker 進行品質掃描:它會檢查 meta 標籤、圖片 ALT 等細節,並提供修正建議。

4️⃣ 定期回報與調整:每個月把 GSC 的覆蓋報表與 Screaming Frog 的抓取結果做比對,如果發現新出現的「禁止抓取」問題,即刻在 robots.txt 內加入相應規則,或使用 GSC 的「測試工具」確認已修正。

小結:
  • Google Search Console 是官方工具,能直接告訴你搜尋引擎如何看待網站。
  • 第三方檢查器 則提供更細緻的抓取與內容分析,讓你從不同角度審視站台。
  • 兩者結合使用,就像是先用「雷達」定位,再用「望遠鏡」觀察詳細。

sitemap.xml:讓搜尋引擎快速找到所有重要頁面

為什麼要有 sitemap?它的角色是什麼

為什麼要有 sitemap?

在打造網站時,搜尋引擎會先抓取「入口」頁面,再從這些頁面裡找出連結。若站記憶體在大量深層或動態生成的頁面,爬蟲就可能無法順利找到它們。

Sitemap(網站地圖)就是一份「全站清單」,告訴搜尋引擎:這裡有這麼多重要頁面,請快來抓取。它不只是幫助爬蟲,更能協調你自己的內容更新與優先順序。

主要功能

  • 快速定位重要頁面:把最新、最熱門或高權重的頁面列在前,讓搜尋引擎第一時間抓到。
  • 告訴爬蟲更新頻率:用 <lastmod><changefreq> 等標籤說明「這個頁面多久更新一次」。
  • 排除不想被抓的區域:雖然 robots.txt 主要負責此任務,但 sitemap 也能搭配使用,確保重要頁面不會被誤封。
  • 提升索引效率:當你有大量商品、部落格文章時,一個精準的 sitemap 能降低爬蟲抓取成本,減少網站負載。

典型情境

1️⃣ 大型電商站:數千甚至上萬條產品頁面,若不列入 sitemap,Google 可能只抓到首頁與分類頁。
2️⃣ 新聞媒體:每日更新多篇文章,一個 sitemap 能把最新內容第一時間送到搜尋引擎。
3️⃣ 動態網站:使用 AJAX 或 SPA(單頁應用)生成的內容,爬蟲無法直接看到,需要透過 sitemap 指示實際 URL。

建立方式

  • 手動編寫 XML:最簡單的範例如下,記得把 <loc> 換成你自己的網址。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.example.com/</loc>
    <lastmod>2025-08-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <!-- 更多頁面依此類推 -->
</urlset>
  • 自動化產生:許多 CMS(如 WordPress、Drupal)都有插件能自動更新 sitemap。若你用的是 Node.js,sitemap-generator 套件也很常見。

監測與維護

  • 提交到搜尋引擎:在 Google Search Console 或 Bing Webmaster Tools 裡輸入 sitemap 的 URL,即可讓他們快速抓取。
  • 定期更新:每次新增或刪除重要頁面時,都要重新產生 sitemap,確保內容同步。

小結

把 sitemap 視為「網站的交通指示牌」:告訴搜尋引擎哪裡有好吃、熱門或最新資訊。若缺少它,就像給路人說「這條街很長,但你要走到哪邊?」,結果他們可能就不會來。

如果想更深入學習,可參考以下連結:

XML、HTML 與 RSS 的差異與用途

XML、HTML 與 RSS 的差異與用途

在網站開發與搜尋引擎爬蟲的世界裡,XML(可擴充標記語言)、HTML(超文件標記語言)以及 RSS(聚合資料格式)雖然看起來相似,但其設計哲學、使用場景和結構卻有著明顯差異。下面,我們以簡單易懂的方式,拆解三者之間的關係,並舉出實際範例讓你快速上手。

什麼是 XML?
  • 目的:用來描述資料結構,強調可擴充性。任何人都可以自行定義標籤(tag),只要遵守語法規則即可。
  • 典型用途:設定檔、資料交換、網站地圖(sitemap.xml)、RSS feed 等。
什麼是 HTML?
  • 目的:用來描述網頁內容與排版,重點在於呈現給瀏覽器。
  • 典型用途:網頁標題、段落、表格、影像、連結等。HTML 是瀏覽器直接解析的格式,也是搜尋引擎抓取的主要資料來源之一。
什麼是 RSS?
  • 目的:提供「訂閱」機制,讓使用者或應用程式能快速取得最新資訊。
  • 典型用途:部落格更新、新聞網站、新產品發布等。RSS 本質上是一段 XML,但其結構已經固定好幾個常見標籤(如 <item><title><link> 等)。

差異對照表

項目 XML HTML RSS
核心概念 資料描述 網頁呈現 資訊聚合
標籤設計 自訂可擴充 事先定義 固定結構
主要用途 設定檔、資料交換、sitemap 網站內容展示 訂閱最新資訊
典型檔案副檔名 .xml .html / .htm .xml(但常以 .rss 或 .xml 命名)
舉例 <book><title>...</title></book> <h1>Hello</h1> <item><title>New Post</title></item>

實際範例與使用說明

  • HTML 範例:展示一篇簡短文章的結構。
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
  <meta charset="utf-8" />
  <title>我的部落格</title>
</head>
<body>
  <h1>歡迎來到我的網站</h1>
  <p>這裡寫點文字,介紹自己。</p>
  <a href="https://example.com">進一步閱讀</a>
</body>
</html>
  • XML 範例:用來描述書籍資訊。
<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book id="001">
    <title>程式設計入門</title>
    <author>張三</author>
    <published>2023-01-15</published>
  </book>
  <book id="002">
    <title>資料結構與演算法</title>
    <author>李四</author>
    <published>2022-10-30</published>
  </book>
</library>
  • RSS 範例:部落格更新的訂閱檔案。
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>我的部落格</title>
    <link>https://example.com/blog</link>
    <description>分享開發心得與技巧。</description>
    <item>
      <title>學習 HTML 基礎</title>
      <link>https://example.com/blog/html-basics</link>
      <pubDate>Mon, 10 Aug 2025 08:00:00 +0800</pubDate>
      <description>這篇文章帶你快速上手 HTML。</description>
    </item>
  </channel>
</rss>
  • sitemap.xml 範例:協助搜尋引擎快速索引網站。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2025-08-18</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2025-07-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>
如何選擇使用哪一種格式?
  • 若你只是想顯示網頁內容,就用 HTML。把文字、圖片和連結都包在 <div><p> 裡面即可。
  • 若你需要描述資料供其他系統讀取(例如設定檔或兩個程式之間交換資訊),那麼 XML 是最合適的選擇。你可以自行設計標籤,讓資料結構更清晰。
  • 若你想讓使用者訂閱最新文章,RSS 就是最佳方案。雖然它也是 XML,但已經有固定的格式,方便 RSS 閱讀器自動抓取。

這樣一來,你就能根據不同需求,選擇最合適的標記語言,讓網站與資料更高效地互相溝通。

手動 vs 自動生成:WordPress、Shopify、Laravel 範例

手動與自動產生 Sitemap.xml:WordPress、Shopify、Laravel 範例

在網站經營中,Sitemap.xml 能讓搜尋引擎快速找到重要頁面。以下將說明三大平台如何手動或自動建立此檔案。

WordPress 範例
  1. 手動方式:使用 FTP 或主機檔案編輯器直接上傳 sitemap.xml 到網站根目錄。
    例如一個簡單的範本:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2024-08-01</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.00</priority>
  </url>
  <url>
    <loc>https://example.com/about/</loc>
    <lastmod>2024-07-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.80</priority>
  </url>
</urlset>
  1. 自動方式:安裝 Yoast SEO 或 Rank Math 等插件,啟用 sitemap 功能即可自動產生並持續更新。
Shopify 範例
  1. 手動方式:雖然 Shopify 已內建 /sitemap.xml,但若需加入自訂頁面,可在「線上商店 > 頁面」中新增頁面,系統會自動把該頁面列入 sitemap。
    若想手動編輯檔案(較少見),可下載原始 sitemap、修改後再覆蓋回去。

  2. 自動方式:使用 Shopify 的內建 sitemap 或安裝第三方 App 如 Sitemap Generator,這些工具能依照產品、文章等資料自動產生完整的 sitemap。

Laravel 範例
  1. 手動方式:在 resources/views 目錄新建 sitemap.blade.php,寫入 XML 標記並在 routes/web.php 新增路由回傳檔案,例如:
    // routes/web.php
    $app->get('sitemap', function () {
    $content = view('sitemap');
    return response($content)->header('Content-Type', 'application/xml');
    });

    在 sitemap.blade.php 裡寫入:
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    @foreach ($pages as $page)

    <url>
      <loc>{{ url($page->slug) }}</loc>
      <lastmod>{{ $page->updated_at->toAtomString() }}</lastmod>
      <changefreq>weekly</changefreq>
      <priority>0.6</priority>
    </url>

@endforeach
</urlset>

  1. 自動方式:使用 spatie/laravel-sitemap 套件,安裝後可在 artisan 指令產生 sitemap,例如:
    // composer require spatie/laravel-sitemap
    // php artisan make:sitemap

    在生成腳本裡加入路由與模型,即可自動抓取並寫入 XML。

提交到主流搜尋引擎:Google、Bing 等步驟

提交 sitemap 到主流搜尋引擎

在網站上架或更新內容後,最先要做的事就是把最新的 sitemap.xml 通知給 Google、Bing 等搜尋引擎。這樣才能確保他們能快速抓到每一個重要頁面。

1️⃣ 準備工作:確認 sitemap 可用
  • 檢查網址:把 https://example.com/sitemap.xml 放在瀏覽器,看看是否能順利顯示。若出現 404 或 403,先排除權限或路徑錯誤。
  • 驗證內容:打開 sitemap 後,確認每一個 <url> 都有完整的 <loc>, <lastmod>, <changefreq> 等標籤。若想進一步驗證,可以使用 Google Search Console 內建的「XML Sitemap 測試」工具。
2️⃣ 在 Google Search Console 提交
  • 登入帳號:先到 https://search.google.com/search-console/ 登入你的 Google 帳號,並把網站加進去。若還沒驗證域名,需要先完成 DNS TXT 或 HTML 檔案驗證。
  • 選擇「Sitemaps」:在左側功能表點擊「Sitemaps」。
  • 輸入 sitemap 位置:在輸入框直接寫 sitemap.xml(不需要加上完整網址),再按下「Submit」。
3️⃣ 在 Bing Webmaster Tools 提交
  • 登入帳號:前往 https://www.bing.com/webmasters/ 登入 Microsoft 帳號,並新增網站。
  • 確認所有權:同樣需要驗證域名,可以選擇 HTML 檔案或 DNS TXT。驗證成功後即可進入控制台。
  • 提交 sitemap:點擊左側「Sitemaps」>「Add a new sitemap」。在欄位輸入 sitemap.xml,然後按下「Submit」即可。
4️⃣ 等待搜尋引擎抓取
  • Google 會在 1-2 天內開始爬蟲抓取;Bing 則大約需要 3-5 天。你可以透過 Search Console 或 Bing Webmaster Tools 的「索引報告」查看抓取進度。
5️⃣ 常見小問題及解決辦法
  • Sitemap 無法被讀取:確認 robots.txt 沒有禁止 Disallow: /sitemap.xml;或檔案權限設定為 644。
  • Google 顯示「Invalid sitemap」:可能是 XML 格式錯誤,建議先用線上工具驗證 XML 正確性。
  • Bing 把 sitemap 標記為「已完成,但無內容」:請確認 sitemap 裡至少有一個 <url>,且 URL 可直接在瀏覽器打開。

提交 Sitemap 快速參考表格

搜尋引擎 步驟簡述 官方連結 常見錯誤訊息 建議解決方式
Google 1. 登入 Search Console<br>2. Sitemaps 頁面提交 sitemap.xml https://search.google.com/search-console/sitemaps "Invalid sitemap" 檢查 XML 格式、確認檔案可公開存取
Bing 1. 登入 Webmaster Tools<br>2. Add a new sitemap https://www.bing.com/webmasters/tools/addsitemap "No URLs found in the sitemap" 確保至少一個 <url>,且 URL 可直接開啟
常用小技巧
  • 自動化提交:若網站使用 WordPress,可安裝「Yoast SEO」或「Rank Math」插件,它們會在 sitemap 更新時自動發送通知給 Google。Bing 也支援同類功能。
  • 多語言站點:如果你有 sitemap-zh-TW.xmlsitemap-en-US.xml 等,請分別提交各個檔案,避免搜尋引擎只抓到單一語系的頁面。
  • 定期更新:每次新增或刪除重要內容後,建議重新產生 sitemap 並再次提交。這能讓搜尋引擎更快知道哪些頁面已經改版。

小結

把 sitemap 提交給 Google 與 Bing 其實非常簡單,只要遵循上面的步驟並確保檔案可公開存取,兩大搜尋引擎就會在幾天內開始抓取。若遇到任何錯誤訊息,先從最常見的 XML 格式、權限設定以及域名驗證著手排除,即可順利完成。

控制抓取頻率:robots.txt 與 Meta Robots 連手合作

Meta 標籤的使用方式與範例

Meta 標籤在網站 SEO 裡扮演著關鍵角色,尤其是控制搜尋機器人抓取與索引的行為。以下先說明基本概念,再來看看常見的寫法。

meta robots 基本語法

<meta name="robots" content="index, follow">
這個標籤告訴所有搜尋機器人:

  • index → 允許收錄此頁面。

  • follow → 允許跟蹤頁面上的連結。

常用的 meta 標籤組合與效果表

標籤值 含意 何時使用 範例
noindex, nofollow 不收錄,也不跟蹤連結 如內部測試頁面、臨時內容 <meta name="robots" content="noindex, nofollow">
noindex, follow 不收錄,但仍允許追蹤連結 例如登入後的個人資料頁面,想讓外部網站看到內部連結但不被索引 <meta name="robots" content="noindex, follow">
index, nofollow 收錄,但不跟蹤連結 針對特定頁面需要保留在搜尋結果中,卻不想讓機器人爬行其他內容,例如長期維護的 FAQ 頁面 <meta name="robots" content="index, nofollow">

與 robots.txt 的協同運作

  • robots.txt:控制搜尋機器人整體可存取範圍,層級較高。若在 robots.txt 中已禁止存取某個路徑,那即使該頁面有 <meta name="robots" content="index, follow"> 也不會被收錄。

  • Meta robots:針對單一 HTML 頁面的細節控制,層級較低。常用於在允許存取的路徑內,精準調整個別頁面行為,例如 noindex 只讓搜尋結果不顯示,但仍保持正常抓取。

實務範例:動態商品列表與單品頁面

  • 商品列表 (允許索引、跟蹤)

<meta name="robots" content="index, follow">

  • 單品詳情 (不想被搜尋結果顯示,但仍需內部連結抓取)

<meta name="robots" content="noindex, follow">

小提醒

  • 任何 meta 標籤寫法都必須放在 <head> 區塊內,並且位於其他資源之前,以免被搜尋機器人忽略。

  • 若同時使用多個 meta 名稱(如 robotsgooglebot),搜尋引擎會以最具體的規則為準。建議先確定需要支援哪些爬蟲,再決定寫法。

Crawl-delay 指令實戰:如何設定適當抓取速度

Crawl-delay 指令實戰:如何設定適當抓取速度

你可能會想,為什麼還要關注抓取速度?因為如果搜尋引擎的爬蟲太頻繁,伺服器負載大、回應慢甚至被暫停。設定合適的 Crawl-delay 可以讓網站既能保持更新,又不會成為瓶頸。

Crawl-delay 是什麼?

Crawl-delay 這個指令寫在 robots.txt 裡,告訴搜尋引擎每次抓取之後要等待多少秒才能再抓下一頁。其單位是 ,不必加上「s」或其他符號。

範例:

User-agent: *
Crawl-delay: 10

上述設定代表:所有搜尋引擎的爬蟲,每抓取一個頁面後,會等 10 秒再抓下一個。若你想要更頻繁或更慢,只需改成不同數字即可。

為何要調整抓取速度?

  • 伺服器負載:大型網站或 API 服務,每秒請求量高,過快的爬蟲會瞬間把資源吃光。<br>例子:假設你有一個每日 1 萬筆資料更新的新聞站,如果沒設定延遲,Googlebot 每 2 秒抓一次,短時間內就可能造成 CPU 佔用率超過 80%。

  • 回應速度:若伺服器回傳時間長,爬蟲會一直等待;加上延遲可以減少同時進行的請求數。

  • 抓取預算(Crawl Budget):搜尋引擎為每個網站分配固定的抓取次數。若用在不必要的頁面,浪費預算;設定適當延遲可以把精力集中於重要內容。

如何決定合適的 Crawl-delay 數值?

  • 先觀察伺服器統計:查看 Apache/Nginx 的請求速率,或是使用 Cloudflare Analytics 看每秒請求數。若平均 200 requests/second,建議至少設定 5 秒延遲。

  • 測試不同值:從 1 秒開始,逐步提升到 10、30 或 60 秒,看回應時間與伺服器負載的變化。常見的平衡點是 10~30 秒,特別是內容密集型網站。

  • 考慮搜尋引擎行為:Googlebot、BingBot 等主流爬蟲會遵守 Crawl-delay;但部分小型或自訂爬蟲可能不理會。若你只想控制主要搜尋引擎,可針對其 User-agent 設定。

與 Meta Robots 標籤配合使用

robots.txt 只能限制抓取,而無法阻止內容被索引。若某些頁面你不希望被列入搜尋結果,還需在該頁面加上 <meta name="robots" content="noindex,nofollow">

範例:

User-agent: Googlebot
Crawl-delay: 15

與此同時,在你不想讓搜尋引擎抓取的頁面加上 Meta Robots 標籤,兩者結合可達到「慢速且不索引」的效果。

監測與調整技巧

  • Google Search Console:在 Crawl Stats 可查看每秒平均請求數。若數值持續高於設定目標,可考慮加長延遲。

  • 伺服器日誌分析:grep User-agent,統計不同爬蟲的訪問頻率,確認是否有忽略 Crawl-delay 的情況。

  • 自動化腳本:寫一段簡單的 Bash 或 Python 腳本,每天抓取 robots.txt,比對前後差異,確保設定沒有被意外覆蓋。

常見陷阱

  • 忽略 Googlebot 的「Crawl-delay」:Google 其實不太會尊重此指令,除非你使用 robots.txtX-Robots-Tag 結合;若想確保慢速抓取,可在伺服器層面設定 IP 限制或使用 Cloudflare Worker。

  • 設定過長:延遲太久會讓搜尋引擎錯失更新,尤其是頻繁變動的內容網站(如新聞、部落格)。建議先觀察更新週期,再決定是否需要 60 秒以上。

小結

Crawl-delay 並不是萬能解藥,但在合適的情境下,它能有效降低伺服器壓力,讓搜尋引擎更穩定地抓取你的內容。記得:先觀察、後調整,再持續監測;這樣才能把握「速度」與「品質」之間的最佳平衡點。

利用 robots 與 noindex 一起防止重複內容曝光

利用 robots 與 noindex 一起防止重複內容曝光

在網站經營的過程中,常會遇到相同或極相似的內容被放置在多個 URL 上,例如:

  • https://example.com/product/123
  • https://example.com/item?product_id=123
  • https://example.com/products.php?id=123

這些重複頁面不但會分散搜尋引擎的抓取頻率,還可能導致搜尋結果被分散、權重稀釋。下面教你如何用 robots.txt 與 noindex 兩手一起打擊重複內容。

robots.txt 的角色

robots.txt 是告訴搜尋機器人哪些路徑可以抓取、哪些不行的純文字檔。舉個例子,如果你想阻止 search.php 這類搜尋頁面被抓,寫法如下:

User-agent: *
Disallow: /search.php

重要提醒!
  • robots.txt 只能限制抓取。若你把頁面設為 Disallow,搜尋引擎就不會抓到這個頁面的內容,也就無法讀到任何 meta 標籤(含 noindex)。
  • 因此,如果你想確保重複頁面 被索引但不顯示,必須先允許抓取,再用 noindex 阻止排名。
Meta Robots & noindex 的搭配

在每個要「隱藏」的重複頁面裡,加上以下 meta 標籤:


<meta name="robots" content="noindex, follow">

  • noindex 讓搜尋引擎不要把這個頁面列入索引。
  • follow 仍允許追蹤內部連結,保持站內鏈結健康。

如果你不想在 HTML 裡寫 meta 標籤,也可以用 HTTP header:


X-Robots-Tag: noindex, follow

  • 只要頁面被抓到,搜尋引擎就會根據這些指令來決定是否列入索引。
結合使用的最佳實踐
  1. 先允許抓取:在 robots.txt 中針對重複頁面路徑寫 Allow,例如:

    
    User-agent: *
    Allow: /product/123
    
    
  2. 再加 noindex:在該頁面 HTML 或 HTTP header 裡加入 noindex

  3. 保留 Canonical:同時設定 <link rel="canonical" href="https://example.com/product/123">,告訴搜尋引擎哪一個是主體版面。

  • 這樣即使有多個 URL 指向相同內容,也只會把「正規」的那個頁面列入索引。
  1. 檢查抓取狀態:使用 Google Search Console 的「URL 檢測工具」確認該頁面已被抓到且 noindex 正確執行。
  • 若發現「無法存取(403)」或「未索引」的訊息,代表 robots.txt 可能還在阻擋抓取,請調整 Allow 或移除 Disallow
常見錯誤與排查
  • 忘記設定 follow:若只寫 noindex 而不加 follow,搜尋引擎會停下追蹤內部連結,可能影響其他頁面的抓取。
  • robots.txt 先於 HTML 執行:如果你把重複頁面設為 Disallow,Google 就無法看到 noindex 標籤,導致仍被索引。一定要確認允許抓取。
  • 使用相同的 canonical 與 noindex:若在主頁面寫了 noindex,又設定 canonical 指向自己,搜尋引擎會把整個站點都視為不應索引。請確保只有重複頁面設為 noindex,而正規版面保持可索引。

小結

robots.txt 與 noindex 雖然功能不同,但結合起來可以精準控制搜尋引擎抓取與排名的行為。只要先允許抓取、再用 noindex 隱藏重複內容,並加上 canonical,便能有效避免重複內容對 SEO 的負面影響。

設定優先級:priority、changefreq 讓爬蟲更有效率

本篇將深入說明如何在 sitemap.xml 中利用 priority 與 changefreq 兩個屬性,協助搜尋引擎爬蟲更精準地抓取與更新網站內容。
透過正確設定這兩項指標,不僅能提升爬蟲效能,也有助於你在競爭激烈的搜尋結果中保持優勢。

sitemap.xml 基本結構

以下是一個典型的 <url> 區塊範例,展示如何加入 prioritychangefreq

<url>
  <loc>https://example.com/</loc>
  <lastmod>2025-08-20</lastmod>
  <changefreq>daily</changefreq>
  <priority>1.0</priority>
</url>

如何選擇 priority

priority 的範圍是 0.0 到 1.0,越高代表該頁面對搜尋引擎的重要性越大。下表列出了常見值與建議使用情境:

priority 意義 建議使用情境
1.0 最重要的頁面 首頁或主要入口
0.8 高度相關 主題分類頁
0.5 普通頁面 常規文章
0.3 次要內容 辅助頁面
0.1 最低優先 廣告、登入頁等

changefreq 的常見值與含意

changefreq 告訴爬蟲這個頁面的內容變動頻率,常用值如下:

  • daily:每天都有更新,例如新聞網站首頁。
  • weekly:每週一次更新,適合部落格或產品公告。
  • monthly:每月更新,常見於公司資訊頁面。
  • yearly:年度性更新,如聯絡我們的備忘錄。
  • never:內容極少變動,例如隱私政策。

實務建議:結合網站結構 & SEO 目標

  • 保持一致性:同類型頁面盡量使用相同的 priority,以免爬蟲混淆。
  • 避免頻繁調整:過度改變 priority 或 changefreq 會讓搜尋引擎產生不必要的抓取成本,請只在真實需要時更新。
  • 配合 sitemap 提交:確保你已將 sitemap.xml 提交至 Google Search Console / Bing Webmaster Tools,以便爬蟲快速掌握變更。
  • 結合內部連結:高 priority 的頁面應該有更多的內部連結,幫助搜尋引擎快速發現並評估其價值。

小結

設定 prioritychangefreq 並非萬無一失,但它們是協調爬蟲抓取行為的重要工具。透過合理的層級分配與更新頻率提示,你可以讓搜尋引擎更快地發現重要內容,同時避免不必要的資源浪費。

進階技巧:使用 robots.txt 與 sitemap 檢測錯誤與提升抓取效率

檢查常見錯誤:404、403、robots 設定不當

檢查常見錯誤:404、403 與 robots 設定不當

在網站經營的過程中,最容易被忽略但又極具影響力的三種問題就是 404 錯誤、403 禁止存取,以及 robots.txt 設定失誤。這些錯誤不僅會降低使用者體驗,也可能讓搜尋引擎對網站的評價下降。

以下分別說明如何快速確認並修復這三個問題,配合實際範例幫你省下不少時間。

404 錯誤:頁面不存在

  • 常見原因:連結遺失、搬移內容卻忘了設置轉址、拼寫錯字
  • 快速偵測方法:利用瀏覽器開發者工具的 Network 面板,或直接在網址後加上 /status 讓伺服器回傳 HTTP 狀態碼。

以 bash loop 檢查多個 URL 的狀態碼

urls=( "https://example.com/page1" "https://example.com/page2" "https://example.com/不存在的頁面" )
for url in ${urls[@]}; do
status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$url -> $status"
done

將輸出的 404 標記出來,就知道哪些頁面需要修正。

403 禁止存取:權限問題

  • 常見原因:伺服器設定錯誤、檔案擁有者/群組權限不對、IP 限制
  • 偵測方式:同樣使用 curl,但加上自訂 User‑Agent 看是否會被封鎖。

檢查 Googlebot 是否能存取首頁

curl -A "Googlebot" https://example.com/ -I

如果回傳 403 Forbidden,就需要檢查伺服器的 .htaccess 或 Nginx 設定。

robots.txt 設定不當:抓取限制

  • 常見錯誤:使用 Disallow: / 讓所有機器人都無法存取,或忘記把重要資料夾放在 Allow 清單中。
  • 測試工具:Google Search Console 的「robots.txt 測試工具」能即時告訴你哪個 URL 被阻擋。

例:只允許搜尋引擎存取 /blog,其他全部禁止

User-agent: *
Disallow:
Allow: /blog/
Disallow: /admin/
Disallow: /private/

如果你發現某個重要頁面被誤判為 Disallow,就把對應路徑改成 Allow 或調整優先順序即可。

小結

  • 404:定期用腳本抓取狀態碼;
  • 403:確認伺服器權限與 IP 設定;
  • robots.txt:利用官方測試工具快速定位問題。

常見錯誤排查清單(表格整理)

錯誤類型 檢測指令 可能原因 修正建議
404 curl -s -o /dev/null -w "%{http_code}" URL 連結失效、搬移內容未設轉址 建立 301 轉向或更新內部連結
403 curl -A "Googlebot" URL -I 檔案權限、伺服器設定 調整檔案擁有者/群組,確認 .htaccess 或 Nginx 規則
robots.txt Google Search Console 測試工具或自行檢查 robots.txt 內容 指令寫錯、路徑不正確 移除無意識的 Disallow: /,僅限制非必要資料夾

實際範例:自動化檢測腳本(Bash + cron)

#!/usr/bin/env bash
logfile="/var/log/url_check.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') 開始檢查..." >> $logfile
while read -r url; do
status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
if [[ $status != "200" ]]; then
echo "$url -> $status" >> $logfile
fi
done < urls.txt
echo "$(date '+%Y-%m-%d %H:%M:%S') 完成檢查." >> $logfile

把這段腳本加到 cron 裡,每天凌晨執行一次,結合郵件通知就能即時得到錯誤報告。

參考連結

動態 sitemap:針對大型電商如何自動更新

動態 sitemap:針對大型電商如何自動更新

當你經營的網站每天都會上架或下架數以萬計商品,手動管理 sitemap.xml 的成本不只高,而且容易出錯。這篇教學將帶你一步步建立一套能自動產生、持續更新且搜尋引擎友善的動態 sitemap。

重點說明:

  • 分段式 sitemap:把所有商品拆成多個小檔案,避免單一檔案過大。
  • 自動化流程:利用 cron job 或雲端排程器定期執行產生腳本。
  • robots.txt 指引:告訴搜尋機關 sitemap 的位置與更新頻率。

接下來我們先從規劃結構說起,再看實際的產生範例,最後示範如何部署到雲端。

步驟一:規劃 sitemap 結構

  1. 決定更新頻率:若商品變動多,建議每日更新;變動較少可改為每週。這個頻率會寫在 robots.txt 內。

  2. 設定檔案大小上限:搜尋引擎一般接受的單一 sitemap 檔最大 50MB(壓縮後)。若你有超過百萬筆商品,最簡單做法是分成 10、20 個子 sitemap,每個不超過此限制。

  3. 建立 sitemap 索引檔sitemap_index.xml 會列出所有子 sitemap 的 URL。搜尋機關只需要抓一次索引就能找到全部內容。

範例結構(以天貓類型為例):

  • https://example.com/sitemaps/2025-08-19-sitemap.xml
  • https://example.com/sitemaps/2025-08-20-sitemap.xml
  • https://example.com/sitemaps/index.xml

步驟二:自動產生 sitemap 的程式碼範例(Python)

以下示範如何用 Python 從資料庫抓取商品資訊,並寫成多個子 sitemap 及索引檔。你可以把這段腳本放在伺服器的 /usr/local/bin/,再透過 cron 每日執行一次。

-- coding: utf-8 --

import os
import xml.etree.ElementTree as ET
from datetime import datetime, timedelta
import pymysql # 假設你用 MySQL 存商品資料

DB_HOST = 'db.example.com'
DB_USER = 'user'
DB_PASS = 'pass'
DB_NAME = 'shop_db'

每個子 sitemap 最多存放 50000 筆商品

MAX_PER_FILE = 50000

def fetch_products(offset, limit):
conn = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASS, db=DB_NAME)
cur = conn.cursor()
cur.execute('SELECT id, title, updated_at FROM products ORDER BY updated_at DESC LIMIT %s OFFSET %s', (limit, offset))
rows = cur.fetchall()
cur.close(); conn.close()
return rows

def generate_sitemap(file_index, product_rows):
urlset = ET.Element('urlset', xmlns='http://www.sitemaps.org/schemas/sitemap/0.9')
for pid, title, updated in product_rows:
url = ET.SubElement(urlset, 'url')
loc = ET.SubElement(url, 'loc')
loc.text = f'https://example.com/product/{pid}'
lastmod = ET.SubElement(url, 'lastmod')
lastmod.text = updated.strftime('%Y-%m-%dT%H:%M:%S+08:00')
tree = ET.ElementTree(urlset)
filename = f'sitemaps/{datetime.now().strftime('%Y-%m-%d')}-part{file_index}.xml'
tree.write(filename, encoding='utf-8', xml_declaration=True)

def generate_index(num_parts):
index = ET.Element('sitemapindex', xmlns='http://www.sitemaps.org/schemas/sitemap/0.9')
for i in range(1, num_parts + 1):
sitemap = ET.SubElement(index, 'sitemap')
loc = ET.SubElement(sitemap, 'loc')
loc.text = f'https://example.com/sitemaps/{datetime.now().strftime('%Y-%m-%d')}-part{i}.xml'
tree = ET.ElementTree(index)
tree.write('sitemaps/index.xml', encoding='utf-8', xml_declaration=True)

主流程

def main():
offset = 0
file_index = 1
parts = []

while True:
    rows = fetch_products(offset, MAX_PER_FILE)
    if not rows:
        break
    generate_sitemap(file_index, rows)
    parts.append(file_index)
    offset += MAX_PER_FILE
    file_index += 1

generate_index(len(parts))

if name == 'main':
main()

說明:

  • pymysql 用來抓取 MySQL 資料;若你用 PostgreSQL 或其他資料庫,改成相對應的連線方式即可。
  • 產生的檔案會存放於網站根目錄下的 /sitemaps/ 資料夾。確保伺服器有寫入權限。

步驟三:設定 robots.txt

robots.txt 加上以下內容,告訴搜尋機關 sitemap 的位置與更新頻率(此處示範每日更新):

允許所有爬蟲抓取網站

User-agent: *

sitemap 索引檔的位置

Sitemap: https://example.com/sitemaps/index.xml

建議的抓取頻率:每日一次

Crawl-delay: 10

移動版 sitemap 與 robots 兼容性

移動版 sitemap 與 robots 兼容性:完整教學

在手機使用者越來越多的今天,確保移動版網站能被搜尋引擎順利抓取是 SEO 成效的重要關鍵。這篇文章將帶你了解如何在 robots.txt 與 sitemap.xml 之間保持一致性,以及常見錯誤與最佳實踐。

1️⃣ 為什麼要有專屬的移動版 sitemap

  • 內容差異:手機版往往使用不同的 URL(如 /m/、/mobile/ 或子域名 mobile.example.com)或載入不同的頁面。
  • 抓取效率:若搜尋引擎同時抓取桌面與移動兩套資源,會浪費頻寬並降低抓取深度。

2️⃣ robots.txt 與 sitemap.xml 的基本關係

  • robots.txt 用來告訴爬蟲哪些路徑可以被抓取、哪些不行。例子:
User-agent: *
Disallow: /admin/
Allow: /
  • sitemap.xml 告知搜尋引擎網站的結構與重要頁面,通常放在根目錄,例如 https://example.com/sitemap_index.xml

3️⃣ 常見的兼容性錯誤案例

案例 A:robots.txt 排除移動版,但 sitemap 包含
  • robots.txt:
User-agent: *
Disallow: /m/
  • sitemap.xml 中有 <loc>https://example.com/m/contact</loc>
  • 結果:搜尋引擎會在索引裡看到 URL,但無法抓取內容,最終被視為死鏈。
案例 B:robots.txt 允許桌面版,但 sitemap 只列出手機版
  • robots.txt:
User-agent: *
Allow: /
  • sitemap.xml 僅包含 /m/ 路徑。
  • 搜尋引擎無法找到桌面版頁面,若使用者從電腦點擊時會導致 404 或被重定向到手機版,影響體驗。

4️⃣ 建議的配置流程

  1. 先決定 URL 結構:確定桌面與移動是否共用同一域、子域或路徑前綴。若共用,同步更新 robots.txt 與 sitemap。
  2. 編寫 robots.txt:針對不同 user-agent(如 Googlebot-Mobile)單獨設定。
User-agent: *
Disallow: /admin/
Allow: /

User-agent: Googlebot-Mobile
Allow: /
  1. 產生 sitemap:分別產出桌面版與移動版 sitemap,並在 sitemap_index.xml 中列出。
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap_desktop.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://example.com/m/sitemap_mobile.xml</loc>
  </sitemap>
</sitemapindex>
  1. 在 robots.txt 加入 sitemap 標記
Sitemap: https://example.com/sitemap_index.xml

5️⃣ 如何測試與排錯

  • 使用 Google Search Console 的「robots.txt 測試工具」確認是否允許抓取。
  • 在 Search Console 的「索引 > 網站地圖」查看 sitemap 狀態,確保兩個 sitemap 都顯示為「已驗證」。
  • 若出現「未授權的 URL」訊息,回到 robots.txt 檢查 DisallowAllow 是否正確。

6️⃣ 小結:重點回顧

  • 確保 robots.txt 與 sitemap.xml 的路徑一致性,避免「允許抓取但不索引」或「被禁止但已列入 sitemap」的情況。
  • 若網站使用多個 URL 變體(桌面、移動、語言),建議同時提供 x-default 與 hreflang 標籤,並在各自 sitemap 中標明。
  • 定期檢查 Search Console 的報告,及早發現抓取錯誤。

7️⃣ 實際範例:一間小型旅遊網站的設定

  • 桌面版 URL 為 https://travel.example.com/
  • 移動版 使用子域名 m.travel.example.com,路徑 /page1/page2 等。

robots.txt(放在兩個主域)

# travel.example.com
User-agent: *
Disallow: /admin/
Allow: /
Sitemap: https://travel.example.com/sitemap_index.xml

# m.travel.example.com
User-agent: *
Disallow: /private/
Allow: /
Sitemap: https://m.travel.example.com/sitemap_index.xml

兩個 sitemap_index.xml 分別列出各自的 sitemap 檔案,確保搜尋引擎能抓取到對應版本。

8️⃣ 常見問答(FAQ)

  • Q: 如果我只想讓手機版被抓取,該怎麼做?

  • A:在 robots.txt 對 Googlebot-Mobile 設定 Allow,並確保桌面 sitemap 沒有列入索引;或直接把桌面頁面設為 noindex。

  • Q: 兩個 sitemap 同時存在會不會造成重複內容的問題?

  • A:只要每個 URL 在各自 sitemap 中唯一且使用 hreflang 或 x-default 標記,搜尋引擎就能辨識並選擇合適版本。

  • Q: robots.txt 只能放在根目錄嗎?

  • A:是的,robots.txt 必須位於 https://domain.com/robots.txt;若有子域名,需分別設置。

結合分析工具了解抓取行為

先把抓取的「數據」搬到手邊

在你想要精準調整 robots.txt 或 sitemap.xml 前,先把搜尋引擎對你的網頁抓取情形整理成清單,像是哪些 URL 被抓、抓了多少次、回傳狀態碼怎麼樣。這些資料不會直接顯示在瀏覽器裡,需要透過工具來拉出。

常用的「抓取觀測」來源有:

  • Google Search Console 的 Crawl Stats 與 URL Inspection 功能,提供每個頁面被 Googlebot 抓取的頻率、回應時間與 HTTP 狀態碼。
  • Bing Webmaster Tools 也同樣會列出 Bingbot 的抓取報告,並且有一個「爬行錯誤」區域可直接看到 404 或 5xx。
  • 日誌檔:伺服器本身的 access.log 能最真實地反映所有使用者代理(User‑Agent)以及抓取時間、IP 等,雖然看起來有點複雜,但只要用簡單腳本就能篩選出搜尋引擎機器人。

把這些資訊先匯出成 CSV 或 Google Sheet,再往下做分析,會比直接在控制台裡翻頁方便多了。

用 Google Search Console 看誰在探路

  1. 進入 Crawl Stats:選擇「抓取統計」(Crawl Statistics) → 你可以看到每天的抓取次數、平均回應時間,還有每個時間段內最常被抓的 URL。這能幫你判斷是否因為 sitemap.xml 的設定問題,導致某些重要頁面被忽略。

  2. URL Inspection:輸入一個 URL → 會顯示「最後一次抓取」時間、HTTP 狀態碼,以及搜尋引擎對此頁面的理解。若看到「未索引」(Unindexed) 的訊息,可能是 robots.txt 或 meta tags 把它封鎖了。

  3. 使用篩選器:在 Crawl Stats 表格上方有一個「搜尋機器人」下拉式選單,你可以只顯示 Googlebot、Bingbot 等。這樣就能快速看到不同搜尋引擎對同一頁面的抓取差異。

Bing Webmaster Tools: 不只是中國網站用的工具

  1. 爬行錯誤:登入後選「網站」→「爬行錯誤」,能看到所有 404、500、403 等錯誤。若發現大量 404,檢查是否在 robots.txt 裡不小心把正確路徑封鎖。

  2. 報告與統計:Bing 有「爬行報告」(Crawl Report) 可以直接下載 CSV,裡面包含抓取時間、HTTP 狀態碼、頁面大小等。這份資料非常適合做進一步的日誌檔比對。

  3. 使用者代理(User‑Agent)篩選:在「報告」中,你可以設定只顯示 Bingbot 的抓取紀錄,快速判斷是否因為 robots.txt 或 sitemap.xml 的語法錯誤導致爬蟲無法正常進入。

日誌檔:最真實的「爬蟲日記」

伺服器每一次請求都會寫進 access.log,像是這樣的一行:

  • 192.168.1.5 - - [12/Mar/2024:07:23:45 +0800] "GET /products/123 HTTP/1.1" 200 4523 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

要抓取搜尋引擎機器人的行為,可以用簡單的 awk 或 grep 指令:

  • grep -i "Googlebot" access.log | wc -l → 這會告訴你 Googlebot 今天共抓了多少次。

  • awk '$7 ~ /Googlebot/ {print $4, $9}' access.log > googlebot_log.txt → 把時間與 User‑Agent 存成檔案,接著用 Python 或 R 製作折線圖、熱力圖。

如果你不想自己寫程式,也可以使用 AWStats、GoAccess 等開源日誌分析工具,它們能自動產生「搜尋引擎抓取統計」報表。

Analytics 與抓取結合,找出慢速或被忽略的頁面

  1. 建立「機器人」分段:在 Google Analytics (GA4) 裡新增一個篩選條件,User‑Agent 包含 "bot" 或 "crawl"。這樣就能把所有搜尋引擎抓取到的流量統計起來。

  2. 查看「平均載入時間」:若某些頁面在 GA4 的「平均載入時間」特別高,而同一頁在 Search Console 的回應時間卻很低,可能是搜尋引擎的網路環境或伺服器負荷造成差異。這時候就要檢查 robots.txt 是否允許爬蟲存取 JavaScript 或 CSS 檔案,因為遲緩的資源會影響整體抓取效率。

  3. 結合「行動裝置」與「桌面裝置」:搜尋引擎在不同平台抓取時,可能會有不同的優先順序。用 GA4 的裝置報告可以確認是否某些手機版頁面因為 robots.txt 封鎖了關鍵資源而被忽略。

  4. 使用 Data Studio 或 Looker Studio:把 Search Console、GA4 以及日誌檔的資料匯入同一個報表,利用「日期」與「URL」做連結,可以一次看到抓取頻率、HTTP 狀態碼與頁面載入時間。這種視覺化方式能讓你快速發現異常點,例如某個月份突然多了 404 或是回應時間飆高。

小結:把「看見」變成「調整」

  • 抓取日誌 + Search Console = 確認哪些 URL 真正被抓、回傳怎麼樣。
  • Bing Webmaster Tools 讓你從另一個搜尋引擎角度檢視錯誤。
  • GA4 的「機器人」分段能把抓取速度與使用者體驗連結起來,發現潛在的效能瓶頸。

有了這些數據,你就可以針對 robots.txt 裡不必要的封鎖、過度限制的 sitemap.xml 或是爬蟲被阻擋的資源,做出精準調整,讓搜尋引擎更順暢地「探路」你的網站。