仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
有很多人問過我,說Mr.Zhao啊,百度如何判斷偽原創和原創?百度喜歡什麼樣的文章?什麼樣的文章比較例如獲得長尾詞排名?等等諸如此類的問題。 面對這些問題,我常常不知如何回答。 如果我給一個比較大方向一些的答案,例如要重視使用者體驗、要有意義等等,那麼提問者會覺得我在應付他,他們往往抱怨說這些太模糊。 可是我也沒法再給出具體的內容,畢竟我不是百度,具體演算法我又何德何能的為你們指點江山呢?
為此,我開始寫這個「如果是我」系列的文章。 在這一系列文章裡,我假設如果是我絞盡腦汁的來為線民提供較好的搜索服務,我會怎麼做,我會怎麼對待文章內容、如何對待外鏈、如何對待網站結構等等諸如此類的網站元素。 當然,本人技術有限,我只能寫一點我稍微理解的東西。 而百度以及其它的商業搜尋引擎,他們有大量比我優秀的人才,相信他們的演算法以及處理問題的方式會比我完善很多,而我之所以寫這些,無外乎抛磚引玉,希望大家看後,心裡有一個大概。 畢竟在SEO的道路上走過一段時間後,沒有誰能夠當誰的老師,一些觀點僅供參考。
在此,我要鄭重聲明,這個系列文章中所有涉及到的思想、演算法與程式,均非本人所寫,全部是我從一些公開的資料裡搜集而得的。 同時,相信大家也能理解,如果這些免費公開的東西都能做到如此程度,那麼那些商業,好的,現在開始。
如果是我,我會喜歡什麼樣子的文章呢?我會喜歡我的使用者喜歡的文章,如果硬要加判定標準,那無外乎是兩種:1.原創且使用者喜歡。 2.非原創且使用者喜歡。 在這裡,我的態度很明顯,偽原創就是非原創。 那麼使用者喜歡什麼樣的文章呢?很顯然,一些新觀點、新知識往往是使用者喜歡的,也就是說通常原創文章都是使用者喜歡的,而且即便使用者不喜歡,原創網站作為新鮮內容的製造者,也應該受到一定的保護。 那麼非原創的文章使用者就一定不喜歡嗎?誠然否也。 一些網站,其內容往往是經過搜集整理後聚合而成的,那麼這些網站對使用者來說就是有價值的,其相對應的文章理應獲得較好的排名。
由此可見,我需要重視兩類文章即可。 一是原創文章,二是有價值的資訊聚合網站下的文章。 首先要明確一點,本文探討範圍僅限內容頁,而非專題頁、清單頁和首頁。
那麼我在甄別這兩類文章之前,我需要先進行資訊的採集。 本文對於spider程式部分不進行闡述。 當spider程式下載下來網頁資訊後,在內容處理的模組中,我需要先對內容除噪。
內容除噪,並非大家經常性的誤以為僅僅除去代碼而已。 對於我來說,我還要出去頁面部分非正文內容的文字。 比如導航條、比如底部文字以及各個文章清單。 將它們的影響除去後,我將得到一段僅僅包含網頁正文內容的文本段落。 寫過採集規則站長朋友應該知道,這個並不難。 但搜尋引擎畢竟是一款程式,不可能針對每個站寫個類似于的採集規則的東西,所以我需要建立一套除噪演算法。
在此之前,我們先明確我們的目的。
上圖中很明顯內容1是使用者最為需要的,內容2是使用者可能感興趣的,其餘均是不正確噪音。 那麼針對于此,我們可以發現如下幾特徵:
1.所有的調用清單全部是在一個區塊裡,這個區塊絕大部分是由標籤組成,即便有游離于標籤的內容,其文字也基本是固定的,且在站內頁面中存在大量重複,較為容易判斷。
2.內容2一般緊鄰著內容1。 而且內容2中的連結錨文本,與內容1存在相關性。
3.內容1部分,是有文字文本內容和標籤混合而成,且在通常情況下,文本文字內容在網站網頁集合中具有唯一性。
那麼,針對于此,我採用廣為人知的標籤樹方式,將內容頁進行分解。 從網頁的標籤佈局上來看,網頁是通過若干的區塊來提供內容的,而這些區塊又是由特定的標籤規劃出來的,常見的標籤有等,我們依照這些標籤,將網頁費解為樹狀結構。
上圖是我手繪的簡單的標籤樹,通過這種方式,我可以非常輕鬆的識別出各個區塊。 然後我設定一定闕值A為內容比重闕值。 內容比重闕值為區塊中文本字數與標籤出現此處的比值。 我設定當網頁中區塊內容比重闕值大於A時,才會被我列為有效內容塊(此舉是為了杜絕過分的多內鏈,因為如果一篇文章佈滿內鏈,則不利於使用者體驗),然後我再比對內容塊中的文本,當其具有唯一性時,此一個或多個內容塊的集合, 即為我所需要的「內容1」。
那麼內容2我要如何處理呢?在講解處理內容2之前,我先講解一下內容2的意義。 正如我先前所說,如果是一個注重使用者體驗的聚合性網站,那麼他的作用是將現有的互聯網內容經過精心的分類與關聯,來方便使用者更好、更有效的閱讀。 針對這樣的網站,即便其文章不是原創而是從互聯網上摘抄的,我也會給予其足夠的重視與排名,因為它良好的聚合內容往往更能滿足使用者的需求。
那麼針對聚合網站,我可以通過「內容2」來進行粗略的判斷。 簡而言之,如果是一個良好的聚合網站,首先其內容頁必須存在內容2,同時內容2必須占重要部分。
好了,識別內容2很簡單,對於內容比重闕值低於某個特定值的區塊,我全部判斷為連結模組。 我將內容1通過某些方式(具體方式本文後半部分講解),提取出主題B。 我將連結模組中的所有標籤的錨文本分別進行分詞,如果所有的錨文本均與主題B相符,則將此連結模組判定為內容2。 設定連結闕值C,連結闕值為內容2中標籤出現次數除以所有連結模組所出現的標籤次數所得的比重,若大於C,則此網站可能為聚合網站,針對內容排名計算時會引用聚合網站特定的演算法。
我相信很多SEO從業者剛接觸這行時,就聽說過一件事,就是內容頁面匯出連結要具有相關性。 還有一件事,就是頁面下面要有相關閱讀,來吸引使用者縱深點擊。 同時應該還聽人講過,內鏈要適中,不可太多等。
但很少有人會說為什麼,而越來越多的人因為不明其內在道理,而漸漸忽視了這些細節。 當然,以前的一些搜尋引擎演算法在內容上的注重程度不夠,也起到了推波助瀾的作用。 但是,如果從陰謀論的角度上來看,我可以假設出這麼一個道理。
絕大部分使用者的搜尋網頁面,第一頁只有10個結果,除去我自家產品,往往僅剩下7個左右,一般使用者最多隻會點擊到第3頁,那麼我需要的優質網站其實不到30個就可以最大限度的滿足使用者體驗。 那麼經過3-5年的佈局,逐漸篩選出一些耐得住寂寞和認真做細節的站,這時候我再將這一部分演算法進行調整,進而篩選出這些優質網站,推送給使用者。 當然,在做的過程中還有更多的參考因素,比如功能變數名稱年齡、JS數量,網站速度等。
你們說,為什麼當站文章中有大量相同時,會快速引起搜尋引擎懲罰呢?這裡我說的不是摘抄與原創的問題,而是你站內自己和自己的文章重複。 之所以搜尋引擎反應這麼快,同時懲罰嚴厲,根本原因就是在你的文章中,他提取不到內容1。
好,經過這一系列處理,我已經獲得了內容1與內容2了,下面該進行原創識別的演算法了。 現在基本上搜尋引擎對於原創的識別,在大面上採用的是關鍵字匹配結合向量空間模型來進行判斷。 Google就是這麼做的,在其官方博客有相應的文章介紹。 這裡,我就做個大白話版本的介紹,爭取做到簡單易懂。
那麼,我通過分析內容1,得到內容1中權重最高的關鍵字k,那麼按照權重大小進行排序,前N個權重最高的關鍵字的集合我命名為K,則K={k1,k2,......,kn},則每一個關鍵字都會對應一個其在頁面中獲取到的權重特徵值, 我將k1對應的權重特徵值設定為t1,則前N個權重關鍵字對應的特徵值集合則為T={t1,t2,......,tn},那麼我們有了這個特徵項,就能計算出其相對應的特徵向量W={w1,w2,......,wn}。 接著我將K拼成字串Z,同時MD5(Z)則表示字串Z的MD5散列值。
那麼假定我判定的兩個頁面分別是i與j。 則我計算出兩個公式。
1.當MD5(Zi)=MD5(Zj)時,頁面i與頁面j完全相同,判斷為轉載。
2.設定一個特定值α
當0≤α≤1的時候,我判定頁面相似為重複。
由此,對於原創文章的判斷就結束了。 好了,苦逼煩悶的枯燥講解告一段落,下面我用大白話再重新複述一遍。
首先,你的內容一模一樣,一個字都不帶改的,那肯定是摘抄的啊,這時候MD5散列值就能迅速的判斷出來。
其次,很多SEO他們懶,進行所謂的偽原創,你說你偽原創時插入點自己的觀點與資料也成,結果你們就是改個近義詞什麼的,於是我就用到了特徵向量,通過特徵向量的判斷,把你們這些低劣的偽原創抓出來。 關於這個,判斷思想很簡單,你權重最高的前N個關鍵字集合極為相似的時候,判斷為重複。 這裡所謂的相似包括但不僅僅局限于權重最高的前N個關鍵字重合,於是構建了特徵向量,當對比的兩個向量夾角與長度,當夾角與長度的差異度小於某個特定值的時候,我將其定義為相似文章。
一直關注google反作弊小組官方博客的朋友們,應該看過google關於相似文章判斷演算法的那篇博文,在那篇文章中,其主要使用的是余弦定理,就是主要計算夾角。 不過後來Mr.Zhao又看了好幾篇文獻,覺得那篇博文應該僅僅是被google拋棄後才解密的,現在大體演算法的趨勢,應該是計算夾角與長度,所以選擇現在給大家看的這個演算法。 好的,這裡我們注意到了幾個問題。
1.α被判定為重複時的取值範圍是否可變?
2.內容中如何提取出關鍵字?
3.內容中關鍵字的權重值是如何賦予的?
下面我來逐一解答。
先說α判斷重複時的取值範圍,這個範圍是絕對可變的。 隨著SEO行業的蓬勃發展,越來越多人想要投機取巧,而這是搜尋引擎不能接受的。 於是就會隔幾年進行一次演算法大更新,而且每一次演算法大更新,都會預告會影響百分之多少的搜尋結果。 那這影響結果的百分數是如何計算出來的?當然不是一個一個數的,在內容方面(其它方面我會在其它文章中闡述),是通過調整α判斷相似度時的取值空間變化來計算的,每一個頁面在被我處理是,我所計算出的α值都會存儲在資料庫中, 這樣我在每次演算法調整時,風險都可做到最大的控制。
那麼如何提取關鍵字?這就是分詞技術了,我待會再講。 頁面內不同關鍵字的權重賦值也在待會講。
關於文章相似性,簡而言之,就是以前大家改一改文章,比如「越來越多SEO開始重視起文章的品質。 」改為「高品質的文章被更多的SEO所重視」,這個在以前沒有被識別出來,不是我沒有識別你的技術,而是我放寬範圍,我可以隨時在需要的時候,通過設定參數的取值範圍,來重新判斷頁面價值。
好,如果這裡你有些糊塗,別著急,我接著慢慢的說。 上述演算法裡,我需要知道前N個重要的關鍵字以及其所對應的權重特徵值。 那這些數值我如何獲取呢?
首先,要先分詞。 針對于分詞,我先設定一個流程,然後採用正向最大匹配、逆向最大匹配、最少切分等方式中的一種來進行分詞。 這個在我會在我的博文《常見的中文分詞技術介紹》中講解,在此不再贅述。 通過分詞,我得到了這個頁面內容1的關鍵字集合K。
在識別內容1的時候,我就已經構建了標籤樹,那麼我的內容1實際上已經被標籤樹拆解為由段落組成的樹狀結構了。
上圖是內容1的標籤樹。 在這裡,我遇到一個問題,那就是針對標籤樹權重賦值的時候,應該是面向整個頁面的標籤樹,還是僅僅面向內容1的標籤樹的?
很多朋友可能會認為,既然是針對內容1的關鍵字進行賦值判斷,那只處理內容1就好了。 其實不然。 一款搜尋引擎,其處理的資料少說也要千萬級別的,所以搜尋引擎對於高效率的代碼與演算法要求是極高的。
而正常情況下,一個網站的網頁是不可能孤立存在的,在對一個頁面針對某一個關鍵字進行排序的時候,除了要考慮站外因素外,我需要考慮站內權重的繼承,那麼在考慮站內權重繼承的時候,我必然避不開內鏈的計算, 同時內鏈本身也應該有不同的權重區分,而內鏈權重計算時,我肯定要考慮其所在頁面與其相關性。 既然如此,我就應該一次性對整個頁面所有的區塊進行權重分配,這樣才是高效率,同時也充分體現了內容與連結相關性的重要性。 用一句大家常能在網上看見的話來說,就是相關性決定了連結投票的有效性。
好,既然確定下是整個標籤樹進行權重賦值,那麼下面開始。 首先,我要確定重要關鍵字的詞庫。 重要關鍵字的確定通過兩種方法:
1.不同行業的重點關鍵字。
2.針對句子結構與詞性的重點關鍵字。
每一款較為成熟的商業搜尋引擎,針對不同行業,其演算法都會有所不同。 而行業的判斷,就是依託于各個行業的關鍵字庫進行的。 最近百度針對一些特定關鍵字,在搜尋結果中返回網站的備案資訊和認證資訊,由此可見,詞庫其實早已存在。
那麼,句子結構又從何說起呢?中文句子不外乎主謂賓定狀補幾個結構組成,而詞性也僅有名詞、動詞、介詞、形容詞、副詞、擬聲詞、代詞、數詞。 相信很多人剛做SEO的時候,肯定聽說過搜尋引擎除噪的時候,會去掉的地得和代詞,其實這種說法大面上對,但也並非完全準確。 從根本原理來說,是針對句子結構與詞性而給予處理時的態度不同。 我們可以肯定,主語一定是最重要的部分,往往一句話主語變了,其針對的事物和所要表述的意義也就往往不同。 而針對的事物若有變化,極有可能導致這篇文章所涉及的行業有所變化。 故而,主語肯定是我所需要的重點詞。 這裡為什麼我沒有說在主語部分去掉代詞呢?因為往往去掉主語會使得句子失真,所以我要保留主語所有屬性的詞,即便是看起來沒有意義代詞。
那麼定語呢?往往定語決定了一個事物的程度或性質,所以定語也很重要。 但問題就來了,對於使用者來說,美麗的畫與漂亮的畫是同一個意思,而美麗的畫與難看的畫卻是相反的意思。 同時其它句子結構例如補語作為句子的補充,往往承載了地點、時間等資訊量,那也很重要。 若是如此,那我又要如確定我認為最主要的關鍵字呢?
這個問題確實很複雜,但其實能夠解決它的辦法既簡單又困難。 那就是時間與資料的積累。 也許有人會覺得我這麼說是不負責任,但事實卻是如此。 倘若這個世界上沒有SEO、沒有偽原創,那麼搜尋引擎可以高枕無憂,因為沒有偽原創的干擾,搜尋引擎可以迅速的識別出轉載內容,然後非常輕鬆的計算排名。 但有了偽原創之後,其實每一次內容判斷演算法的調整,更多的是對目前一些常見的偽原創做法進行識別。 正因為有偽原創的存在,如果是我設計策略,我會設計出兩個詞庫,詞庫A是用於區分內容所從屬的行業,詞庫B則是針對不同行業,然後在設置若干規則與這兩個子詞庫進行關聯。
舉例。 比如偽原創猖獗的醫療SEO,通過一些病種詞,可以迅速識別出其內容屬於醫療行業。 那麼在選擇的時候,鑒於某些原因,我將嚴厲對待醫療,則我認為醫療文章內容重要的僅僅是充當主語的名詞,然後在充當主語的名詞中,病種名詞作為最優先,進而進行優先順序排序,在排序中若主語名詞數大於N, 則按照其所處的區塊距離根節點最近最有先原則,並且同一名詞僅選擇一次,然後選取前N個重要關鍵字作為賦值的初始節點,進行權重賦值。
那麼在賦值的時候,我設定賦值係數e,我可以判斷在這幾個被賦值的節點上,根據關鍵字種類來確定賦值的比重。 比如與title中重複的病種名詞,其對應的係數為e1,與title中不對應的病種名詞係數為e2,其它名詞係數為e3。 然後我開始遍歷標籤樹。 整個頁面自身權重為Q,按照前N個關鍵字的順序依次遍歷。 那麼我的遍歷原則如下:
1.第一次遍歷時,第一個重要節點權重值為Qe1,其父節點權重值為Qe1*b,其子節點權重值為Qe1*c,然後以此原則繼續遍歷父節點的父節點及其父節點的子節點和子節點的子節點及其子節點的父節點。
以下舉例。 假定Q為1,e1為3
則一開始如下圖
然後假定a為上一個數的平方根,b為上一個數的立方根。 則如下圖
接著開始遍歷其它節點。
當整個網頁標籤樹的所有節點全部被賦值後,第一次遍歷結束。 這時候開始第二次遍歷,注意這時候與e2相乘的就不是Q了,而是第二個重要關鍵字所在節點的當前權重值。
這樣經過N此遍歷,每一個區塊都會有自己相對應的權重數值,然後我單獨提取內容1的區塊,具體上文中有畫圖,在此就不再多畫了。 將內容1量化。 量化後,我就能夠得到上文中我所需要的權重特徵值T={t1,t2,......,tn}。 由此,這個演算法層就首位相應的完善了。 量化公式很多,我在此就不舉例了,因為這個舉例毫無意義,我又不是真寫搜尋引擎。
連結模組的權重,將最後被超連結傳到至其所指向的頁面中。 這也說明了不同位置的連結,其傳導的權重各不相同。 內鏈的位置決定了內鏈的權重繼承。 而大家經常聽到的,內鏈上下文要出現關鍵字,其實就是這個演算法所衍生出的現象。 至此,這個演算法層基本結束了。
1.我再次強調,文中演算法不是我寫的,是我借鑒別人的,借鑒誰的?我忘了......,好多好多。
2.所有有經驗的商業搜尋引擎,其演算法肯定是階層式,絕對不會僅僅是一個演算法層,所以這個單一的演算法層,對排名來說可以說影響很大,但絕對不是完全按照這一個演算法層來進行排名的。
那麼大致瞭解了這一個層的演算法之後,對我們的實際操作有什麼具體的説明嗎?
1.我們可以有效知道,如何合理的設置內容頁的欄目佈局,使得我們在轉載文章時,讓百度知道我們在轉載文章的同時,為了更好的使用者體驗而聚合了各方觀點的文章。
2.我們可以更好的知道,哪些文章會被判定為相似文章。
3.這個是最重要的一點,就是我們能夠更好的對內容頁面進行佈局。 真正的白帽SEO,在對站內進行梳理時,其站內欄目在頁面上的佈局尤為重要,有經驗的SEO能夠有效的利用頁面的權重繼承,進而增加長尾排名,這對於入口網站或是B2C等擁有大量內容頁的網站來說,非常重要。 當然,在長尾排名方面,對頁面權重傳輸的瞭解與佈局僅僅是基礎,今後我會在後續文章中,在對欄目層級設置與權重傳遞方面,針對我的觀點進行闡述。
4.明白內鏈權重繼承的大致原理。
本文首發Mr.Zhao的博客,原味位址:HTTP://www.seozhao.com/379.html 轉載請保留。