搜索引擎工作過程非常復(fù)雜,接下來我們簡單介紹搜索引擎是怎樣實現(xiàn)網(wǎng)頁排名的。這里介紹的相對于真正的搜索引擎技術(shù)來說只是皮毛,不過對 SEO 人員已經(jīng)足夠用了。有興趣的還可以閱讀《百度搜索引擎優(yōu)化指南》。
搜索引擎的工作過程大體上可以分成三個階段:
1)爬行和抓取 – 搜索引擎蜘蛛通過跟蹤鏈接訪問網(wǎng)頁,獲得頁面 HTML 代碼存入數(shù)據(jù)庫。
2)預(yù)處理 - 索引程序?qū)ψト淼捻撁鏀?shù)據(jù)進行文字提取、中文分詞、索引等處理,以備排名程序調(diào)用?!俄撁嫒绾芜M行去重、去停止詞》
3)排名 - 用戶輸入關(guān)鍵詞后,排名程序調(diào)用索引庫數(shù)據(jù),計算相關(guān)性,然后按一定格式生成搜索結(jié)果頁面。
爬行和抓取
爬行和抓取是搜索引擎工作的第一步,完成數(shù)據(jù)收集的任務(wù)。
蜘蛛
搜索引擎用來爬行和訪問頁面的程序被稱為蜘蛛(spider),也稱為機器人(bot)。
搜索引擎蜘蛛訪問網(wǎng)站頁面時類似于普通用戶使用的瀏覽器。蜘蛛程序發(fā)出頁面訪問請求后,服務(wù)器返回 HTML 代碼,蜘蛛程序把收到的代碼存入原始頁面數(shù)據(jù)庫。搜索引擎為了提高爬行和抓取速度,都使用多個蜘蛛并發(fā)分布爬行。
蜘蛛訪問任何一個網(wǎng)站時,都會先訪問網(wǎng)站根目錄下的 robots.txt 文件。如果 robots.txt 文件禁止搜索引擎抓取某些文件或目錄,蜘蛛將遵守協(xié)議,不抓取被禁止的網(wǎng)址。
和瀏覽器一樣,搜索引擎蜘蛛也有標(biāo)明自己身份的代理名稱,站長可以在日志文件中看到搜索引擎的特定代理名稱,從而辨識搜索引擎蜘蛛。《各大搜索引擎提交入口》
跟蹤鏈接
為了抓取網(wǎng)上盡量多的頁面,搜索引擎蜘蛛會跟蹤頁面上的鏈接,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網(wǎng)上爬行那樣,這也就是搜索引擎蜘蛛這個名稱的由來。
整個互聯(lián)網(wǎng)是由相互鏈接的網(wǎng)站及頁面組成的。從理論上說,蜘蛛從任何一個頁面出發(fā),順著鏈接都可以爬行到網(wǎng)上的所有頁面。當(dāng)然,由于網(wǎng)站及頁面鏈接結(jié)構(gòu)異常復(fù)雜,蜘蛛需要采取一定的爬行策略才能遍歷網(wǎng)上所有頁面。
最簡單的爬行遍歷策略分為兩種,一是深度優(yōu)先,二是廣度優(yōu)先。
所謂深度優(yōu)先指的是蜘蛛沿著發(fā)現(xiàn)的鏈接一直向前爬行,直到前面再也沒有其他鏈接,然后返回到第一個頁面,沿著另一個鏈接再一直往前爬行。
如上圖所示,蜘蛛跟蹤鏈接,從 A 頁面爬行到 A1,A2,A3,A4,到 A4 頁面后,已經(jīng)沒有其他鏈接可以跟蹤就返回 A 頁面,順著頁面上的另一個鏈接,爬行到 B1,B2,B3,B4。在深度優(yōu)先策略中,蜘蛛一直爬到無法再向前,才返回爬另一條線。
廣度優(yōu)先是指蜘蛛在一個頁面上發(fā)現(xiàn)多個鏈接時,不是順著一個鏈接一直向前,而是把頁面上所有第一層鏈接都爬一遍,然后再沿著第二層頁面上發(fā)現(xiàn)的鏈接爬向第三層頁面。
如上圖所示,蜘蛛從 A 頁面順著鏈接爬行到 A1,B1,C1 頁面,直到 A 頁面上的所有鏈接都爬行完,然后再從 A1 頁面發(fā)現(xiàn)的下一層鏈接,爬行到 A2,A3,A4......頁面。
從理論上說,無論是深度優(yōu)先還是廣度優(yōu)先,只要給蜘蛛足夠的時間,都能爬完整個互聯(lián)網(wǎng)。
在實際工作中,蜘蛛的帶寬資源、時間都不是無限的,也不可能爬完所有頁面。實際上最大的搜索引擎也只是爬行和收錄了互聯(lián)網(wǎng)的一小部分。
深度優(yōu)先和廣度優(yōu)先通常是混合使用的,這樣既可以照顧到盡量多的網(wǎng)站(廣度優(yōu)先),也能照顧到一部分網(wǎng)站的內(nèi)頁(深度優(yōu)先)。
吸引蜘蛛
由此可見,雖然理論上蜘蛛能爬行和抓取所有頁面,但實際上不能也不會這么做。SEO 人員要
想自己的更多頁面被收錄,就要想方設(shè)法吸引蜘蛛來抓取。既然不能抓取所有頁面,蜘蛛所要做的就是盡量抓取重要頁面。哪些頁面被認(rèn)為比較重要呢?有幾方面影響因素:
• 網(wǎng)站和頁面權(quán)重。質(zhì)量高、資格老的網(wǎng)站被認(rèn)為權(quán)重比較高,這種網(wǎng)站上的頁面被爬行的深度也會比較高,所以會有更多內(nèi)頁被收錄。
• 頁面更新度。蜘蛛每次爬行都會把頁面數(shù)據(jù)存儲起來。如果第二次爬行發(fā)現(xiàn)頁面與第一次收錄的完全一樣,說明頁面沒有更新,蜘蛛也就沒有必要經(jīng)常抓取。如果頁面內(nèi)容經(jīng)常更新,蜘蛛就會更加頻繁地訪問這種頁面,頁面上出現(xiàn)的新鏈接,也自然會被蜘蛛更快跟蹤,抓取新頁面。
• 導(dǎo)入鏈接。無論是外部鏈接還是同一個網(wǎng)站的內(nèi)部鏈接,要被蜘蛛抓取就必須有導(dǎo)入鏈接進入頁面,否則蜘蛛根本沒有機會知道頁面的存在。高質(zhì)量的導(dǎo)入鏈接也經(jīng)常使頁面上的導(dǎo)出鏈接被爬行深度增加。
• 與首頁點擊距離。一般來說網(wǎng)站上權(quán)重最高的是首頁,大部分外部鏈接是指向首頁,蜘蛛訪問最頻繁的也是首頁。離首頁點擊距離越近,頁面權(quán)重越高,被蜘蛛爬行的機會也越大。
地址庫
為了避免重復(fù)爬行和抓取網(wǎng)址,搜索引擎會建立一個地址庫,記錄已經(jīng)被發(fā)現(xiàn)還沒有抓取的頁面,以及已經(jīng)被抓取的頁面。
地址庫中的 URL 有幾個來源。
1. 一是人工錄入的種子網(wǎng)站。
2. 二是蜘蛛抓取頁面后,從 HTML 中解析出新的鏈接 URL,與地址庫中的數(shù)據(jù)對比,如果是地址庫中沒有的網(wǎng)址,就存入待訪問地址庫。
3. 三是站長通過搜索引擎網(wǎng)頁提交表格提交進來的網(wǎng)址。
蜘蛛按重要性從待訪問地址庫中提取 URL,訪問并抓取頁面,然后把這個 URL 從待訪問地址庫中刪除,放進已訪問地址庫中。
大部分主流搜索引擎都提供一個表格,讓站長提交網(wǎng)址。不過這些提交來的網(wǎng)址都只是存入地址庫而已,是否收錄還要看頁面重要性如何。搜索引擎所收錄的絕大部分頁面是蜘蛛自己跟蹤鏈接得到的??梢哉f提交頁面基本上是毫無用處的,搜索引擎更喜歡自己沿著鏈接發(fā)現(xiàn)新頁面。
文件存儲
搜索引擎蜘蛛抓取的數(shù)據(jù)存入原始頁面數(shù)據(jù)庫。其中的頁面數(shù)據(jù)與用戶瀏覽器得到的 HTML 是完全一樣的。每個 URL 都有一個獨特的文件編號。
爬行時的復(fù)制內(nèi)容檢測檢測并刪除復(fù)制內(nèi)容通常是在下面介紹的預(yù)處理過程中進行,但現(xiàn)在的蜘蛛在爬行和抓取文件時也會進行一定程度的復(fù)制內(nèi)容檢測。遇到權(quán)重很低的網(wǎng)站上大量轉(zhuǎn)載或抄襲內(nèi)容時,很可能不再繼續(xù)爬行。這也就是為什么有的站長在日志文件中發(fā)現(xiàn)了蜘蛛,但頁面從來沒有被真正收錄過。