仲介交易 SEO診斷 淘寶客 雲主機 技術大廳
搜尋引擎工作過程非常複雜,我們簡單介紹搜尋引擎是怎樣實現網頁排名的。 這裡介紹的相對於真正的搜尋引擎技術來說只是皮毛,不過對SEO 人員已經足夠用了。
搜尋引擎的工作過程大體上可以分成三個階段:
1) 爬行和抓取 – 搜尋引擎蜘蛛通過跟蹤連結訪問網頁,獲得頁面HTML 代碼存入資料庫。
2) 預處理 - 索引程式對抓取來的頁面資料進行文字提取、中文分詞、索引等處理,以備排名程式調用。
3) 排名 - 使用者輸入關鍵字後,排名程式調用索引庫資料,計算相關性,然後按一定格式生成搜尋結果頁面。
爬行和抓取
爬行和抓取是搜尋引擎工作的第一步,完成資料收集的任務。
蜘蛛
搜尋引擎用來爬行和訪問頁面的程式被稱為蜘蛛(spider),也稱為機器人(bot)。 搜尋引擎蜘蛛訪問網站頁面時類似于普通使用者使 用的瀏覽器。 編目程式發出頁面訪問請求後,伺服器返回HTML 代碼,編目程式把收到的代碼存入原始頁面資料庫。 搜尋引擎為了提高爬行和抓取速度,都使用多個蜘蛛併發分佈爬行。 蜘蛛訪問任何一個網站時,都會先訪問網站 根目錄下的robots.txt 檔。 如果robots.txt 檔禁止搜尋引擎抓取某些檔或目錄,蜘蛛將遵守協定,不抓取被禁止的網址。
跟蹤連結
為了抓取網上儘量多的頁面,搜尋引擎蜘蛛會跟蹤頁面上的連結,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網上爬行那樣,這也就是搜索 引擎蜘蛛這個名稱的由來。 整個互聯網是由相互連結的網站及頁面組成的。 從理論上說,蜘蛛從任何一個頁面出發,順著連結都可以爬行到網上的所有頁面。 當然, 由於網站及頁面連結結構異常複雜,蜘蛛需要採取一定的爬行策略才能遍歷網上所有頁面。
最簡單的爬行遍歷策略分為兩種,一是深度優先,二是廣度優先。
所謂深度優先指的是蜘蛛沿著發現的連結一直向前爬行,直到前面再也沒有其他連結,然後返回到第一個頁面,沿著另一個連結再一直往前爬行。
廣度優先是指蜘蛛在一個頁面上發現多個連結時,不是順著一個連結一直向前,而是把頁面上所有第一層連結都爬一遍,然後 再沿著第二層頁面上發現的連結爬向第三層頁面。 從理論上說,無論是深度優先還是廣度優先,只要給蜘蛛足夠的時間,都能爬完整個互聯網。 在實際工作中,蜘蛛 的頻寬資源、時間都不是無限的,也不可能爬完所有頁面。 實際上最大的搜尋引擎也只是爬行和收錄了互聯網的一小部分。
深度優先和廣度優先通常是混合使用的,這樣既可以照顧到儘量多的網站(廣度優先),也能照顧到一部分網站的內頁(深度優先)。
預處理
提取文字
現在的搜尋引擎還是以文字內容為基礎。 蜘蛛抓取到的頁面中的HTML 代碼,除了使用者在瀏覽器上可以看到的可見文字外,還包含了大量的HTML 格式標籤、JAVAscript 程式等無法用於排名的內容。 搜尋引擎預處理首先要做的就是從HTML 檔案中去除標籤、程式,提取出可以用於排名處理的網頁面文字內容。 除了可見文字,搜尋引擎也會提取出一些特殊的包含文字資訊的代碼,如Meta 標籤中的文字,圖片替代文字,Flash 檔的替代文字,連結錨文字等。
中文分詞
分詞是中文搜尋引擎特有的步驟。 搜尋引擎存儲和處理頁面,以及使用者搜索都是以詞為基礎。 英文等語言單詞與單詞之間有空格分隔,搜尋引擎 索引程式可以直接把句子劃分為單詞的集合。 而中文詞與詞之間沒有任何分隔符號,一個句子中的所有字和詞都是連在一起的。 搜尋引擎必須首先分辨哪幾個字組成一 個詞,哪些字本身就是一個詞。 比如「減肥方法」將被分詞為「減肥」和「方法」兩個詞。
中文分詞方法基本上有兩種,一是基於詞典匹配,另一個是基於統計。
基於詞典匹配的方法是指,將待分析的一段漢字與一個事先造好的詞典中的詞條進行匹配,在待分析漢字串中掃描到詞典中已 有的詞條則匹配成功,或者說切分出一個單詞。 按照掃描方向,基於詞典的匹配法可以分為正向匹配和逆向匹配。 按照匹配長度優先順序的不同,又可以分為最大匹配 和最小匹配。 將掃描方向和長度優先混合,又可以產生正向最大匹配、逆向最大匹配等不同方法。 詞典匹配方法計算簡單,其準確度很大程度上取決於詞典的完整性 和更新情況。
基於統計的分詞方法指的是分析大量文字樣本,計算出字與字相鄰出現的統計概率,幾個字相鄰出現越多,就越可能形成一個 單詞。 基於統計的方法優勢是對新出現的詞反應更快速,也有利於消除歧義。 基於詞典匹配和統計的兩種分詞方法各有優劣,實際使用中的分詞系統都是混合使用兩 種方法,達到快速高效,又能識別生詞、新詞,消除歧義。
搜尋引擎對頁面的分詞取決於詞庫的規模、準確性和分詞演算法的好壞,而不是取決於頁面本身如何,所以SEO 人員對分詞所能做的很少。 唯一能做的是在頁面上用某種形式提示搜尋引擎,某幾個字應該被當作一個詞處理,尤其是可能產生歧義的時候,比如在頁面標題、h1 標籤以及黑體中出現關鍵字。 如果頁面是關於「和服」的內容,那麼可以把「和服」這兩個字特意標為黑體。 如果頁面是關於「化妝和服裝」,可以把「服裝」兩個字標為黑體。 這樣,搜尋引擎對頁面進行分析時就知道標為黑體的應該是一個詞。
去停止詞
無論英文中文,頁面內容中都會有一些出現頻率很高,卻對內容沒有任何影響的詞,如「的」,「地」,「得」之類的助詞,「啊」,「哈」, 「呀」之類的感歎詞,「從而」,「以」,「卻」之類的介詞。 這些詞被稱為停止詞,因為它們對頁面主要意思沒什麼影響。 英文中的常見停止詞如 the,a,an,to,of 等。 搜尋引擎在索引頁面之前會去掉這些停止詞,使索引資料主題更為突出,減少無謂的計算量。
消除雜訊
絕大部分頁面上還有一部分內容對頁面主題也沒有什麼貢獻,比如版權聲明文字、導航條、廣告等。 以常見的博客導航為例,幾乎每個博客頁面 上都會出現文章分類、歷史存檔等導航內容,但是這些頁面本身與「分類」、「歷史」這些詞都沒有任何關係。 使用者搜索「歷史」,「分類」這些關鍵字時僅僅因為 頁面上有這些詞出現而返回博客帖子是毫無意義的,完全不相關。
所以這些區塊都屬於雜訊,對頁面主題只能起到分散作用。 搜尋引擎需要識別並消除這些雜訊,排 名時不使用雜訊內容。 消噪的基本方法是根據HTML 標籤對頁面分塊,區分出頁頭、導航、正文、頁腳、廣告等區域,在網站上大量重複出現的區塊往往屬於雜訊。 對頁面進行消噪後,剩下的才是頁面主體內容。
去重
搜尋引擎還需要對頁面進行去重處理。 同一篇文章經常會重複出現在不同網站以及同一個網站的不同網址上,搜尋引擎並不喜歡這種重複性的內 容。 使用者搜索時,如果在前兩頁看到的都是來自不同網站的同一篇文章,使用者體驗就太差了,雖然都是內容相關的。 搜尋引擎希望只返回相同文章中的一篇,所以在 進行索引前還需要識別和刪除重複內容,這個過程就稱為去重。 去重的基本方法是對頁面特徵關鍵字計算指紋,也就是說從頁面主體內容中選取最有代表性的一部分 關鍵字(經常是出現頻率最高的關鍵字),然後計算這些關鍵字的數位指紋。
這裡的關鍵字選取是在分詞、去停止詞、消噪之後。 實驗表明,通常選取10 個特徵關鍵字就可以達到比較高的計算準確性,再選取更多詞對去重準確性提高的貢獻也就不大了。 瞭解了搜尋引擎的去重演算法,SEO 人員就應該知道簡單地增加「的,地,得」、調換段落順序這種所謂偽原創,並不能逃過搜尋引擎的去重演算法,因為這樣的操作無法改變文章的特徵關鍵字。 而且搜 索引擎的去重演算法很可能不止于頁面級別,而是進行到段落級別,混合不同文章、交叉調換段落順序也不能使轉載和抄襲變成原創。
正向索引也可以簡稱為索引。
經過文字提取、分詞、消噪、去重後,搜尋引擎得到的就是獨特的、能反映頁面主體內容的、以詞為單位的內容。 接下來搜尋引擎索引程式就可以提取關鍵字,按照 分詞程式劃分好的詞,把頁面轉換為一個關鍵字組成的集合,同時記錄每一個關鍵字在頁面上的出現頻率、出現次數、格式(如出現在標題標籤、黑體、H 標籤、錨文字等)、位置( 如頁面第一段文字等)。 這樣,每一個頁面都可以記錄為一串關鍵字集合,其中每個關鍵字的詞頻、格式、位置等權重資訊也都記錄在 案。
倒排索引
正向索引還不能直接用於排名。 假設使用者搜索關鍵字2,如果只存在正向索引的話,排名程式需要掃描所有索引庫中的檔,找出包含關鍵字2 的檔,再進行相關性計算。 這樣的計算量無法滿足即時返回排名結果的要求。 所以搜尋引擎會將正向索引資料庫重新構造為倒排索引,把檔對應到關鍵字的映射 轉換為關鍵字到檔的映射。 在倒排索引中關鍵字是主鍵,每個關鍵字都對應著一系列檔,這些檔中都出現了這個關鍵字。 這樣當使用者搜索某個關鍵字時,排序 程式在倒排索引中定位到這個關鍵字,就可以馬上找出所有包含這個關鍵字的檔。
連結關係計算
連結關係計算也是預處理中很重要的一部分。 現在所有的主流搜尋引擎排名因素中都包含網頁之間的連結流動資訊。 搜尋引擎在抓取頁面內容 後,必須事前計算出頁面上有哪些連結指向哪些其他頁面?每個頁面有哪些導入連結?連結使用了什麼錨文字?這些複雜的連結指向關係形成了網站和頁面的連結權 重。 Google PR 值就是這種連結關係的最主要體現之一。 其他搜尋引擎也都進行類似計算,雖然他們並不稱之為PR。
特殊檔處理
除了HTML 檔案外,搜尋引擎通常還能抓取和索引以文字為基礎的多種檔案類型,如PDF、Word、WPS、XLS、PPT、TXT 檔等。 我們在搜尋結果中也經常會看到這些檔案類型。 但目前的搜尋引擎還不能處理圖片、視頻、Flash 這類非文字內容,也不能執行腳本和程式。 雖然搜尋引擎在識別圖片以及從Flash 中提取文字內容方面有些進步,不過距離直接靠讀取圖片、視頻、Flash 內容返回結果的目標還很遠。 對圖片、視頻內容的排名還往往是靠與之相關的文字內容,詳細情況可以參考後面的整合搜索部分。
排名
經過搜尋引擎蜘蛛抓取頁面,索引程式計算得到倒排索引後,搜尋引擎就準備好可以隨時處理使用者搜索了。 使用者在搜索框填入關鍵字後,排名程式調用索引庫資料,計算排名顯示給使用者,排名過程是與使用者直接互動的。
搜索詞處理
搜尋引擎接收到使用者輸入的搜索詞後,需要對搜索詞做一些處理,才能進入排名過程。 搜索詞處理包括幾方面:
中文分詞
與頁面索引時一樣,搜索詞也必須進行中文分詞,將查詢字串轉換為以詞為基礎的關鍵字組合。 分詞原理與頁面分詞相同。
去停止詞
和索引時一樣,搜尋引擎也需要把搜索詞中的停止詞去掉,最大限度地提高排名相關性及效率。
指令處理
查詢詞完成分詞後,搜尋引擎的缺省處理方式是在關鍵字之間使用「與」邏輯。 也就是說使用者搜索「減肥方法」時,程式分詞為「減肥」和「方 法」兩個詞,搜尋引擎排序時缺省認為,使用者尋找的是既包含「減肥」,也包含「方法」的頁面。 只包含「減肥」不包含「方法」,或者只包含「方法」不包含「減 肥」的頁面,被認為是不符合搜尋條件的。 當然,這只是極為簡化的為了說明原理的說法,實際上我們還是會看到只包含一部分關鍵字的搜尋結果。 另外使用者輸入的 查詢詞還可能包含一些高級搜索指令,如加號、減號等,搜尋引擎都需要做出識別和相應處理。
檔匹配
搜索詞經過處理後,搜尋引擎得到的是以詞為基礎的關鍵字集合。 檔匹配階段就是找出含有所有關鍵詞的檔。 在索引部分提到的倒排索引使得檔匹配能夠快速完成。
初始子集的選擇
找到包含所有關鍵詞的匹配檔後,還不能進行相關性計算,因為找到的檔經常會有幾十萬幾百萬,甚至上千萬個。 要對這麼多檔即時進行 相關性計算,需要的時間還是比較長。 實際上使用者並不需要知道所有匹配的幾十萬幾百萬個頁面,絕大部分使用者只會查看前兩頁,也就是前二十個結果。 搜尋引擎也 並不需要計算這麼多頁面的相關性,而只要計算最重要的一部分頁面就可以了。 常用搜尋引擎的人都會注意到,搜尋結果頁面通常最多隻顯示一百個。 使用者點擊搜索 結果頁面底部的「下一頁」連結,最多也只能看到第一百頁,也就是一千個搜尋結果。 百度則通常返回76 頁結果。
相關性計算
選出初始子集後,對子集中的頁面計算關鍵字相關性。 計算相關性是排名過程中最重要的一步。 相關性計算是搜尋引擎演算法中最令SEO 感興趣的部分。 影響相關性的主要因素包括幾方面。
關鍵字常用程度
經過分詞後的多個關鍵字,對整個搜索字串的意義貢獻並不相同。 越常用的詞對搜索詞的意義貢獻越小,越不常用的詞對意義貢獻越大。 舉個 例子,假設使用者輸入的搜索詞是「我們冥王星」。 「我們」這個詞常用程度非常高,在很多頁面上會出現,它對「我們冥王星」這個搜索詞的辨識程度和意義相關度 貢獻就很小。 找出那些包含「我們」這個詞的頁面,對搜索排名相關性幾乎沒有什麼影響,有太多頁面包含「我們」這個詞。 而「冥王星」這個詞常用程度就比較 低,對「我們冥王星」這個搜索詞的意義貢獻要大得多。 那些包含「冥王星」這個詞的頁面,對「我們冥王星」這個搜索詞會更為相關。 常用詞的極致就是停止詞, 對頁面意義完全沒有影響。
所以搜尋引擎對搜索詞串中的關鍵字並不是一視同仁地處理,而是根據常用程度進行加權。 不常用的詞加權係數高,常用詞加權係數低, 排名演算法對不常用的詞給予更多關注。 我們假設A、B 兩個頁面都各出現「我們」及「冥王星」兩個詞。 但是「我們」這個詞在A 頁面出現于普通文字,「冥王星」這個詞在A 頁面出現于標題標籤中。 B 頁面正相反,「我們」出現在標題標籤中,而「冥王星」出現在普通文字中。 那麼針對「我們冥王星」這個搜索詞,A 頁面將更相關。
詞頻及密度
一般認為在沒有關鍵詞堆積的情況下,搜索詞在頁面中出現的次數多,密度比較高,說明頁面與搜索詞越相關。 當然這只是一個大致規律,實際 情況未必如此,所以相關性計算還有其他因素。 出現頻率及密度只是因素的一部分,而且重要程度越來越低。 關鍵字位置及形式像在索引部分中提到的,頁面關鍵字 出現的格式和位置都被記錄在索引庫中。 關鍵字出現在比較重要位置,如標題標籤、黑體、H1 等,說明頁面與關鍵字越相關。 這一部分就是頁面SEO所要解決的。
關鍵字距離
切分後的關鍵字完整匹配出現,說明與搜索詞最相關。 比如搜索「減肥方法」時,頁面上連續完整出現「減肥方法」四個字是最相關的。 如果「減肥」和「方法」兩個詞沒有連續匹配出現,出現的距離近一些,也被搜尋引擎認為相關性稍微大一些。
連結分析及頁面權重
除了頁面本身的因素,頁面之間的連結和權重關係也影響關鍵字的相關性,其中最重要的是錨文字。 頁面有越多以搜索詞為錨文字的導入連結, 說明頁面的相關性越強。 連結分析還包括了連結源頁面本身的主題,錨文字周圍的文字等。 排名過濾及調整選出匹配檔子集、計算相關性後,大體排名就已經確定 了。 之後搜尋引擎還可能有一些過濾演算法,對排名進行輕微調整,其中最主要的過濾就是施加懲罰。 一些有作弊嫌疑的頁面,雖然按照正常的權重和相關性計算排到 前面,但搜尋引擎的懲罰演算法卻可能在最後一步把這些頁面調到後面去。 典型的例子是百度的11 位,Google 的負6,負30,負950 等演算法。
排名顯示
所有排名確定後,排名程式調用原始頁面的標題標籤、說明標籤、快照日期等資料顯示在頁面上。 有時搜尋引擎需要動態生成頁面摘要,而不是調用頁面本身的說明標籤。
搜索緩存
使用者搜索的關鍵字有很大一部分是重複的。 按照2/8 定律,20%的搜索詞占到了總搜索次數的80%。 按照長尾理論,最常見的搜索詞沒有占到80%那麼多,但通常也有一個比較粗大的頭部,很少一部分搜索詞占 到了所有搜索次數的很大一部分。 尤其是有熱門新聞發生時,每天可能有幾百萬人搜索完全相同的關鍵字。 如果每次搜索都重新處理排名可以說是很大的浪費。
搜尋引擎會把最常見的搜索詞存入緩存,使用者搜索時直接從緩存中調用,而不必經過檔匹配和相關性計算,大大提高排名效率,降低搜索反應時間。 查詢及點擊日誌搜 索使用者的IP 位址,搜索的關鍵字,搜索時間以及點擊了哪些結果頁面,搜尋引擎都記錄形成日誌。 這些日誌檔中的資料對搜尋引擎判斷搜尋結果品質,調整搜索演算法,預期搜 索趨勢等都有重要意義。
上面我們簡單介紹了搜尋引擎的工作過程。 當然實際搜尋引擎的工作步驟與演算法是非常非常複雜的。 上面的說明很簡單,但其中有很多技術難點。 搜尋引擎還在不斷 優化演算法,優化資料庫格式。 不同搜尋引擎的工作步驟也會有差異。 但大致上所有主流搜尋引擎的基本工作原理都是如此,在過去幾年以及可以預期的未來幾年,都不會有實質性改變。
本文由鄭州腦癱醫院首家原創,A5首發,希望對各位站長有所説明,記得轉載時留下本文供稿站長資訊HTTP://www.naotan0371.com,歡迎轉摘。