URL的問題是SEO過程中的一個基本問題,做一個新網站也好,優化現有的網站也好,都繞不開這一點。這兩篇文章就來答
題總結一下URL的規劃應該怎麽做。
在開始講這些問題之前,需要先閱讀完以下文檔:
1.《優化網站的抓取與收錄》
2.《谷歌搜索引擎入門指南》第七頁到第十一頁。
3.《創建方便Google處理的網址結構》 https://support.google.com/webmasters/answer/76329?hl=zh-Hans
這些都是Google官方的文檔,講述了各種各樣的規則。這些對百度也是同樣適用的,因爲它是針對爬蟲的特性提出來的,
並不是只有某個搜索引擎才適用的。
看完上面的那些規則,發現翻來覆去講得都是怎麽讓爬蟲能非常順暢的爬取完整的一個網站。其實絕大部分網站都存在這
樣或那樣的問題的,也包括我這個博客,在抓取方面也存在一些問題。但是看在每篇博文都能被收錄的情況下,也就不去
優化了。但是對于很多收錄還成問題的網站(特別是大中型網站)來說,就要好好規劃一下了。大家可以用HTTrack抓取個
人博客,就能發現爲什麽我這麽說了。
還是先從搜索引擎的處境講起吧。正如Google在文章中寫道的那樣:
網絡世界極其龐大,每時每刻都在産生新的內容。Google 本身的資源是有限的。當面對無窮無盡的網絡內容的時候,
Googlebot只能找到和抓取其中一定比例的內容。然後,在我已經抓取到的內容中,我們也只能索引其中的一部分。URLs就
像網站和搜索引擎抓取工具之間的橋梁:爲了能夠抓取和您網站的內容,抓取工具需要能夠找到並跨越這些橋梁(也就是
找到並抓取您的URLs)。
我們先來看重複URL的問題,這裏說的重複URL是指向一個網站內的不同頁面,都存在很多完全相同的URL。 如:網站每個頁面的head部分 導航部分,模板部分的URL是一樣的
雖然頁面不同,但是他們公用的部分,URL地址是一樣的。看起來如果不同的爬蟲抓取到這些頁面的時候,會重複抓取,從
而浪費很多不必要的時間。這確實是一個問題,不過這個問題搜索引擎倒是基本解決好了。實際上,爬蟲的抓取模式不是
像我們理解的那樣看到一個網頁就開始抓取一個網頁的。
爬蟲順著一個個的URL在互聯網上抓取頁面,它一邊下載這個網頁,一邊在提取這個網頁中的鏈接。假設從搜索引擎某一個
節點出來的爬蟲有爬蟲A、爬蟲B、爬蟲C,當他們到達blog這個網站的時候,每個爬蟲都會抓取到很多URL,然後他們都會
把那個網頁上所有的鏈接都放在一個公用的“待抓取列表”裏。(可以用lynx在線版模擬一下爬蟲提取鏈接。)
這樣一來,在“待抓取列表”裏,那些重複的URL就可以去重了。這是一個節點在一種理想狀態下的情況,不過實際上因爲
搜索引擎以後還要更新這個網頁等等一些原因,一個網站每天還是有很多重複抓取。所以在以後的文章中,我告訴大家用
一些方法減少重複抓取的幾率。
這裏有一個問題,很多人肯定想問是不是一個網頁上所有的鏈接搜索引擎都會提取的,答案是肯定的。但是在《Google網
站質量指南》中,有這樣一句:“如果站點地圖上的鏈接超過100個,則需要將站點地圖拆分爲多個網頁。”有些人把這句
話理解爲:“爬蟲只能抓取前100個鏈接”,這是不對的。
因爲在“待抓取列表”裏的URL,爬蟲並不會每一個鏈接都會抓取的。鏈接放在這個列表裏是沒有問題的,但是爬蟲沒有那
麽多時間也沒有必要每個連接都要去抓取,需要有一定的優先級,在“待抓取列表”裏,爬蟲一邊按照優先級抓取一部分
的URL,一邊把還未被抓取的URL記錄下來等待下次抓取,只是這些還未被抓取的URL,下次爬蟲來訪問的頻率就每個網站都
不一樣了,每一類的URL被訪問的頻率也不一樣的。
那麽在”待抓取列表”裏的URL,哪些是能被優先抓取,哪些是被次要抓取的呢?
我們稍微思考一下都能明白這個抓取的優先級策略應該怎麽定。首選,那些目錄層級比較深的URL是次要抓取的; 那些在模板部分的或重複率非常高的URL是被次要抓取的;那些動態參數多的URL是次要抓取的。
這麽做的原因,就是因爲搜索引擎的資源是有限的,一個網站實際擁有的內容也是有限的,但是URL數量是無限的。爬蟲需
要一些“蛛絲馬迹”來確定哪些值得優先抓取,那些不值得。
在《谷歌搜索引擎入門指南》中,Google建議要優化好網站的URL結構,如建議不
要“/dir1/dir2/dir3/dir4/dir5/page.html”這樣的多層嵌套。就是因爲在待抓取列表裏,在其他條件相同的情況下,爬
蟲會優先抓取目錄層級淺的URL。
又有一個誤區,有人在SEO過程中,把所有的網頁都建立在根目錄下,以爲這樣能有排名的優勢。這樣也是沒有理解這個原
因。而且爬蟲在這個網站上先抓取哪些URL後抓取哪些URL,都是自己的URL和自己的URL比,如果所有網頁都在同一個目錄
下,那就沒有區別了。
最好的規劃URL目錄層級的方式,就是按照業務方的邏輯來規劃,從內容上應該是什麽從屬關系就怎麽規劃URL就是。就像
《谷歌搜索引擎入門指南》中舉的那些例子一樣。
(順帶說一下。我經常看到,一個網站中,很多人非SEO的人員,如工程師和網頁設計人員或者網站編輯,都以爲SEO和他
們做的事情是相反的。這都是因爲長期以來一些SEOer經常提交很多明顯違反用戶體驗的SEO需求給他們,造成他們以後SEO
就是和他們做的事情是有沖突的。實際上,SEO和別的部門是非常少的沖突,只要你能用科學的方法去實踐,就能發現以前
有太多誤導的觀點了。還有,對于其他部門的專業人員,他們專業領域的意見非常值得去考慮。)
爬蟲有一個特點,就是它不能實時的比較它正在抓取的內容是不是重複的內容。因爲如果要做到實時的比較,那它至少要
把正在抓取的頁面和那些已經在索引庫的頁面做對比,這是不可能短時間內可以完成的。前面把所有的RUL統一放到一個“
待抓取列表”中的方法只能避免那種URL完全一模一樣的重複抓取,但是無法應用對URL不一樣的、但是內容一樣的抓取。
正如所有搜索引擎都強調的那樣,動態參數是一個經常産生URL不一樣、但是內容一樣的現象的原因。所以搜索引擎建議大
家用靜態化的方法去掉那些參數。靜態化的本質是URL唯一化,在《優化網站的抓取與收錄》這篇文章中,曾經用的“一人
一票”這個描述就很貼切的表達了這個意思。靜態化只是一個手段而不是目的,爲了保證URL的唯一化,可以把URL靜態化
、也可以用robots.txt或nofollow屏蔽動態內容、可以用rel=canonical屬性、還可以用webmaster tool裏屏蔽一些參數等
等。而靜態化也會有好的靜態化和不好的靜態化之別。我們這裏不說那種把多個參數直接靜態化了的案例,而是單純的來看看
如下兩個URL: https://www.inspirr.com/blog/archives/1000和https://www.inspirr.com/blog/?p1000
這兩個URL中,這個靜態化的是不是就比動態的好呢? 實際上這兩個URL的差別很小。首選這兩種URL搜索引擎都能收錄,
如果說動態URL“?p1000”可能産生大量重複的內容讓爬蟲抓取,那這個靜態化的URL“archives/1000”也不能保證不會
産生大量重複的內容。特別是爬蟲在抓取時碰到大量有ID的靜態化的URL時,爬蟲無法判斷這個網站是不是把session ID等
參數靜態化了才造成的,還是這個網站本來就有這麽多內容。所以更好的靜態化是這樣的: https://www.inspirr.com/fenci-suoyinku/
這種URL就能保證唯一化而不會和其他情況混淆了,所以URL中要盡量用有意義的字符。這不是因爲要在URL增加關鍵詞密度
而這麽做的,是爲了方便搜索引擎抓取。
以上是因爲爬蟲固有的特點造成的抓取障礙,而有時網站的結構也能造成爬蟲的抓取障礙。這種結構在《優化網站的抓取
和收錄》一文中用的名字是“無限空間”。文中舉了一個日曆的例子:如很多博客上都會有一個日曆,順著這個日曆的日期
一直往下點,永遠都有鏈接供你點擊的,因爲時間是無限的。
其實還有更多的“無限空間”的例子,只是“無限空間”這個名詞沒怎麽翻譯好,翻譯做“無限循環”就容易理解多了。