SEO搜尋引擎原理 - 爬蟲抓取篇
檢索或抓取(Crawl)是讓網站出現在Google排名的第一步,這個過程的概念其實並不複雜,Google有了一個網址(URL),去拜訪這個網頁,然後從網頁上的內容上發現更多的網址,加進檢索序列中,如此循環下去。
這個過程看似簡單,但是網路世界卻很複雜… (不然也不會寫了這麼多)
前言
最近我在公司講了一場SEO內訓,主題是《Before Google Ranks a Page: The Lifecycle of Googlebot》,探討網頁在有資格出現在搜尋結果前的三個必要階段**「抓(爬)取」、「轉譯」、「收錄」**。過沒多久就讀到Harris先生的文章《SEO基礎觀念:認識檢索 (Crawl) 與索引 ( Index )》,啟發了我寫這篇文章的動力,希望能幫助充實中文的SEO內容。這個系列會把這個觀念分成三篇文章,讓大家對技術面的SEO有更進一步的認識。
為什麼要了 解抓取的概念
因為「抓取」是讓網頁出現在搜尋結果的必要第一步,Google如果連網頁的存在都不知道,那更別提能在搜尋結果上有排名。經營一個網站,我們希望Google爬我們想被找到的網頁,也希望Google不要爬我們不想被看到的網頁。另外,隨著網站的發展,外掛插件的安裝和移除,常常會讓網站留下一些”技術債”。而SEO在這裡的工作就是要讓Google能夠用最有效率的方式抓取網站。

一切都要從網址開始說起
網址(URLs)是網頁的地址,像 https://www.darrenhuang.com/about-darren-huang 就是個網址。這裡要給大家一個測驗,沒答對的話答應我你會把這篇看完!
下面六個網址,那些在搜尋引擎的眼中和上面的網址是一樣的,那些是不一樣的?
A) https://www.darrenhuang.com/about-darren-huang/ (結尾多了斜線)
B) http://www.darrenhuang.com/about-darren-huang (開頭為http而非https)
C) https://www.darrenhuang.com/ABOUT-DARREN-HUANG (大寫)
D) https://darrenhuang.com/about-darren-huang (少了www)
E) https://www.darrenhuang.com/about-darren-huang?utm_source=facebook (後面多了追蹤參數)
F) https://www.darrenhuang.com/about-darren-huang.html (後面多了.html的檔名)
檢索過程的三個階段
檢索是Google收錄網頁三步驟的第一大步,而這一大步又可分成三個階段「加入檢索隊列(Crawl Queue)」、「爬蟲拜訪(Crawler)」、「頁面處理(Processing)」 ,下面依序作介紹。
Step 1: 加入檢索隊列(Crawl Queue)

搜尋引擎會將其找到的網址,都放進隊列(crawl queue)中,在隊列裡的網址就會有搜尋引擎的”爬蟲”來拜訪。而搜尋引擎主要靠下面三種方法發現新的網址:
- 連結:
- 包含內部連結和外部連結,爬蟲能透過一個頁面上的連結發現新的網址,並加進檢索隊列中。
- 站點地圖(Sitemap):
相較於透過連結一個個找出新網址再加進隊列的方式,站點地圖能夠一次讓爬蟲知道網站上有那些網址,是個較有效率的方法。
- 站長工具:
- SEO意涵: 網站要有排名就要先被檢索,要被檢索就要先讓Google知道你的存在然後排進檢索隊列。
Step 2: 爬蟲拜訪(Crawler)

在搜尋引擎知道網址的存在後,就會派出”爬蟲”去這個網址看看,然後把網頁內容抓回來。要注意,爬蟲在這之前,只知道有這個地址的存在,至於地址上有什麼東西他們並沒有太多的資訊。
這是一個爬蟲(搜尋引擎)和伺服器(你的網站)溝通的過程,首先爬蟲會發出一個請求:「嘿,我有一個網址,可以讓我看看上面有什麼嗎?」,然後會遇到的下面幾種情況:
SEO意涵: 上面幾種情況中最有問題的是D,它代表網址所在 的伺服器不穩定,用戶或爬蟲來到這個網址看到了伺服器錯誤的訊息。另外四種情況並沒有絕對的好壞。沒錯,A不代表一定沒有問題,B, C, E也不是一定有問題,下面會再多做解釋。
Step 3: 頁面處理(Processing)

這是抓取階段的最後一個步驟,爬蟲會將成功拜訪(狀況A)伺服器所拿回來的檔案進行處理,在內容中尋找連結,再把它們放入Step 1的檢索序列中,然後如此反覆下去。
這個”處理”的過程又稱作轉譯or渲染(rendering),這個觀念會在下一篇文章再做解釋,但給大家一點預告:「搜尋引擎從伺服器拿回了檔案,但它們會馬上處理嗎? 處理後有保證看得懂嗎?」
SEO意涵: 在檢索的討論範疇內,此步驟最重要的就是**「尋找網頁上的連結**」。一個網址要被搜尋引擎認定是個連結,就必須被放在<a>標籤裡的href屬性。 使用常見架站平台所架設的網站一般無須擔心這一點,因為正常情況下連結都會使用上述的標準HTML語法來表示。
SEO在檢索階段能優化些什麼
前面介紹完了搜尋引擎的檢索過程,接下來要講SEO在這個階段能做些什麼事,才讓網站與搜尋引擎保持「友好」關係。其實概念並不難,我們的目標就是要優化爬蟲在檢索自家網站時的體驗,有以下幾個角度可以切入。
如何防止搜尋引擎爬取?
前面提到,為了讓搜尋引擎能夠更有效率的爬取網站,我們可以用一些方法主動防止搜尋引擎拜訪特定頁面。 再回頭看一次這張圖,能擋住爬蟲的地方是第二步和第三步。

題外話,「如何防止搜尋引擎爬取?」是SEO面試中很常出現的基本觀念題
我們沒有辦法在Step 1阻止網址被加入檢索序列, 因為爬蟲可能會從別的地方發現我的網站的連結。
如何檢測搜尋引擎有無檢索問題
網頁可以用瀏覽器打開不代表能被爬蟲拜訪。要確認Google爬蟲是否真的可以拜訪的最簡單方式是使用Google站長工具(Search Console)上方的網址檢查工具,它能夠告訴你Google爬蟲在檢索和索引網頁時遇到的問題。

如果在幫客戶或別人的網站偵錯而沒有GSC權限的話,也可以用Google的其他工具,例如移動裝置相容性測試工具(Mobile Friendly Testing Tool)。重點是要用Google的爬蟲來進行測試。

若網頁顯示無法載入(無法檢索)但robots.txt卻沒有什麼問題,很有可能是因為伺服器有防火牆或一些奇怪的設定阻擋了Google爬蟲的請求。伺服器端的問題比較難從外部看出原因,建議直接聯繫主機提供商。
因為「檢索」沒有設定好而出現的悲劇案例
2020年二月有這樣一個新聞,WhatsApp(臉書旗下通訊軟體)的私人群組邀請連結可以在Google搜尋上被找到,包含一些情色和違法的群組,任何人只要都能透過搜尋結果上的連結加入私人群組(每日頭條報導)。
Your WhatsApp groups may not be as secure as you think they are.
The "Invite to Group via Link" feature allows groups to be indexed by Google and they are generally available across the internet. With some wildcard search terms you can easily find some… interesting… groups. pic.twitter.com/hbDlyN6g3q
— Jordan Wildon (@JordanWildon)
February 21, 2020
這項悲劇就是因為WhatsApp在檢索階段沒有禁止爬蟲爬取,或是在索引階段沒有禁止搜尋引擎收錄(下個章節再介紹)。私人群組的邀情連結,在爬蟲眼裡也只是個網址,會被放入檢索隊列、爬蟲會去拜訪、當然也可能會在處理後將網頁收錄。
Google發言人Danny Sullivan回應這次事件:「像Google這樣的搜尋引擎就是把找到的連結收錄進資料庫,我們不管這些連結是不是該被公開的,如果網站不想它們被收錄,有相對應的工具可以使用。」
搜尋引擎爬取的常見問題
檢索的觀念在這邊告一段落,到目前為止我們學了「搜尋引擎怎麼檢索網頁?」、「為什麼檢索很重要?」、「SEO該如何優化爬蟲的檢索過程」 …等等,這一段要來講一些常見的問題。
我只有個簡單的網站,有必要懂這麼多嗎?
首先先感謝你看到這邊XD,雖然身為SEO我很想說檢索超級重要,不做好優化會怎樣怎樣,但實際情況是,如果你的網站只是個簡單的部落格或公司網站,很有可能你根本不需要在意搜尋引擎背後運作方式。
前面提到整個網路世界相當大,爬蟲不會花無限的資源在一個網站上。但其實,像Google這樣的搜尋引擎也不是吃素的,它們有自己的機制能夠優化爬蟲的效率,那些連結該爬、那些不該爬、抓取的頻率,諸如此類的問題都不太是一個小網站需要去擔心的。
我可以用robots.txt擋掉私密的頁面嗎
Robots.txt可以擋掉搜尋引擎的爬蟲,但卻擋不掉一般的使用者,在robots.txt上面放上
Disallow: /private-page.html只會讓大家好奇這個網址上有什麼不得見人的東西。
電商網站在檢索階段的常見問題
電商網站通常有所謂的層面導覽(Faceted Navigation),舉例來說一個電商網站的男裝類別頁面,左側有個區塊可以將產品根據條件篩選 – 「尺寸」、「品牌」、「顏色」…等等。每加一個條件,網址就會變化,像下面這樣:
/mens-clothing男裝/mens-clothing?size=XLXL男裝/mens-clothing?size=XL&brand=nikeXL的Nike男裝/mens-clothing?size=XL&brand=nike&color=redXL的紅色的Nike男裝上面這個例子只有三個篩選條件(size, brand, color),但現實生活中的電商平台會有更多的篩選條件,試想每個條件都有多個選項,然後有些篩選條件可以複選或不選,甚至
?後的出現順序不同 (例如?brand=nike&size=XLvs?size=XL&brand=nike)……看到這邊你可能知道我要說什麼了,沒錯,排列組合下來光一個男裝類就會產生大量的網址,這些網址在爬蟲眼裡每一 個都是「獨立」的網址,外加上面的內容品質不高!!
我是不是每發布一篇文章就要用站長工具提交給Google知道,讓它盡快被排進檢索隊列
爬蟲發現網址有主要透過三種方式,主動提交只是其中一個,不做這個動作Google還是能從其他方法看到這個連結。另外,提交的確可以讓網頁快速被抓取和收錄沒有錯,但和排名是沒有任何關係的。
通常一個健康的網站,就算不提交網址,Google也能在網頁發布後一小段時間內發現,可以不用特別去提交。但如果你發現文章發布後都要好幾天才會被收錄,那可以試試看使用提交工具,但有這個現象的話更重要的是去檢查網站有沒有什麼其他問題。
網址的格式會影響搜尋引擎檢索嗎?
不會。一個網頁的網址不管設成
https://example.com/seo-friendly或https://example.com/?p=3828482都只是個網址。很醜的網址並不會對爬蟲在檢索的過程造成影響。其他爭議像網址是不是.html結尾、有沒有用中文、使用連字號「-」還是底線「_」,其實都沒有關係,網址就是網址,不會影響到搜尋引擎檢索的。至於用了漂漂亮亮的網址和排名有沒有關係就不是這篇的討論範圍了!小知識: 其實前面這段敘述有一點不太正確,HTTP狀態碼有一個
414 URI Too Long的錯誤,代表網址太長了伺服器或爬蟲不想處理。但這個限制可以高達2000個字元,所以不是個正常網站需要去擔心的問題。(Stackoverflow討論)
還有什麼關於「檢索」的問題或疑惑,到這邊還沒有被回答到或不夠清楚嗎 ,歡迎留言讓我知道,我會在留言回答或是編輯到上面的常見問題區! 這篇文章本意就是要寫給新手知道,所以有不懂的地方就是我的問題,把你的奇怪問題都拋出來吧!
結語
關於搜尋引擎的「檢索」過程介紹就在這邊告一段落,感謝一路看到這邊的你,之後有時間會再把另外兩個步驟「轉譯」和「索引」也寫成文章。「數位引擎」是我閒暇之餘經營的臉書粉絲頁,下面這張圖是以前曾分享過的一個冷知識,和這篇的主題有點關聯,希望大家現在有辦法get到這個幽默