談WEB標(biāo)準(zhǔn)與SEO關(guān)系(二)
***篇鏈接:談WEB標(biāo)準(zhǔn)與SEO關(guān)系(一)
***篇說(shuō)到,web標(biāo)準(zhǔn)取決于我們?cè)趯慼tml/css/js時(shí)所定義的版本,比如我html用的是xhtml 1.0標(biāo)準(zhǔn),那么我的html也應(yīng)該是要符合xhtml 1.0規(guī)范的。但是事實(shí)似乎并不是這樣,互聯(lián)網(wǎng)上幾乎接近99.999%的網(wǎng)頁(yè)都無(wú)法通過(guò)驗(yàn)證,總是有這樣或那樣的錯(cuò)誤,w3c的官方網(wǎng)站:http://www.w3.org所有頁(yè)面都是可以通過(guò)驗(yàn)證的,有興趣的朋友可以去測(cè)試下。
說(shuō)到這里,我們的文章似乎走入了一個(gè)死胡同,既然這么多的網(wǎng)頁(yè)不符合web標(biāo)準(zhǔn),他們同樣也能取得很好的排名和流量,那web標(biāo)準(zhǔn)與SEO到底還有啥聯(lián)系呢,這個(gè)還得從html結(jié)構(gòu)和解析說(shuō)起.
網(wǎng)頁(yè)設(shè)計(jì)中強(qiáng)調(diào)結(jié)構(gòu)(html)和表現(xiàn)(css)分離,我們可以這樣去理解它們的概念。結(jié)構(gòu)是一幢房子。是鋼筋水泥和磚堆成的架子,而表現(xiàn)是對(duì)結(jié)構(gòu)的裝修和修飾,他就像裝修,給房子裝了地板,墻面抹了石灰和油漆。
沒有了結(jié)構(gòu),表現(xiàn)也就沒有了實(shí)際表現(xiàn)的價(jià)值,這也是為什么在xhtml 1.0 strict及其更高的標(biāo)準(zhǔn)中取消了<font color="#ccc" size="12">文本</font>或之類的標(biāo)簽或性性,因?yàn)閷?duì)于結(jié)構(gòu)來(lái)說(shuō),它更像是一種表現(xiàn),它應(yīng)該呆在表現(xiàn)層也就是CSS之中,如果我們?cè)趚html 1.0 strict頁(yè)面應(yīng)用了font標(biāo)簽,實(shí)際上它也可以正確解析,因?yàn)樵?**篇中我們說(shuō)過(guò),標(biāo)準(zhǔn)都是向前兼容的。
我們?cè)賮?lái)理解瀏覽器和搜索引擎如何來(lái)解析我們的html,為什么在這里說(shuō)到瀏覽器,因?yàn)樵谖铱磥?lái)搜索引擎和瀏覽器在解析html的時(shí)候它們的方法大致是一樣的,當(dāng)網(wǎng)頁(yè)抓取下來(lái)之后,就開始了html的解析,它最終會(huì)把整個(gè)頁(yè)面解析成一棵擁有嚴(yán)格父子關(guān)系節(jié)點(diǎn)的dom樹。然后再呈現(xiàn)給用戶,比如當(dāng)我寫了如下這段代碼:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>標(biāo)題</title>
- </head>
- <body>
- <div id="top">
- <h1>這是標(biāo)題<h1>
- <img src="xx.jpg"/>
- <p>這是一段<strong>文本</strong>內(nèi)容<p>
- </div>
- <div id="container">
- <h2>這是另一個(gè)標(biāo)題</h2>
- <p>這是另一段<strong>文本</strong></p>
- </div>
- </body>
- </html>
可以看到這是一段xhtml 1.0過(guò)渡標(biāo)準(zhǔn)下的html.卻有很多錯(cuò)誤(錯(cuò)誤包括:***個(gè)div中<h1>標(biāo)簽沒有結(jié)束標(biāo)簽.img沒有alt屬性。<p>標(biāo)簽也沒有結(jié)束標(biāo)簽),但是如果把這段代碼放到瀏覽器中去執(zhí)行,卻可以看到正確的效果,<h1>標(biāo)簽起作用了。P標(biāo)簽也起作用了,圖片也能顯示出來(lái)了,我們很奇怪為什么這段代碼連標(biāo)簽都沒寫對(duì)為什么在瀏覽器中卻能正確解析,如果我們假設(shè)這段代碼是沒有錯(cuò)的,它正確的dom結(jié)構(gòu)應(yīng)該為所示。
瀏覽器為什么能把錯(cuò)誤的代碼給正確解析出來(lái)呢?而且似乎能“猜測(cè)”到錯(cuò)誤代碼的真實(shí)意圖。原理就在于瀏覽器在構(gòu)建標(biāo)簽樹的時(shí)候,使用了詞典分析模式和整理模式(html tidy)。
簡(jiǎn)單的說(shuō),瀏覽器會(huì)把所有的標(biāo)簽及屬性與內(nèi)置的詞典里面的信息去匹配,如果匹配正常,就直接解析,如果匹配不正常。就啟用整理模式,整理模式會(huì)分析你錯(cuò)誤的代碼并進(jìn)行修復(fù),比如將上面結(jié)尾處的<h1>,<p>標(biāo)簽自動(dòng)改為結(jié)束標(biāo)記,又比如你寫入了一個(gè)<jiacu>文本</jiacu>的標(biāo)簽對(duì)。這個(gè)根本匹配不到,也無(wú)法修復(fù)。它就會(huì)將這個(gè)無(wú)效的標(biāo)簽對(duì)直接清除掉,僅保留里面的文字。
當(dāng)然瀏覽將html解析成dom樹時(shí)它并不會(huì)更改你的html源代碼,它只是一種解析的動(dòng)作,所以很多時(shí)候我們頁(yè)面的html錯(cuò)誤我們不去做驗(yàn)證,是不會(huì)發(fā)現(xiàn)這些錯(cuò)誤的,因?yàn)闉g覽器已經(jīng)自動(dòng)給我們修復(fù)了。通常來(lái)說(shuō).瀏覽器對(duì)html中的錯(cuò)誤保證了充分的兼容性。能幫你修正的就修正。多余的標(biāo)簽或?qū)傩阅芮宄颓宄?,無(wú)法清除和修正的就自動(dòng)幫你將標(biāo)簽剔除以保證正常顯示。
但是“整理模式”并不是***的,我們不能苛求瀏覽器能幫我們修復(fù)所有的錯(cuò)誤,所以很多時(shí)候當(dāng)我們的頁(yè)面嵌套層次越來(lái)越深,標(biāo)簽越來(lái)越多,內(nèi)容越來(lái)越多的時(shí)候,在瀏覽器無(wú)法修正標(biāo)簽的時(shí)候,它唯一能做的就是“將某個(gè)錯(cuò)誤塊內(nèi)的所有標(biāo)簽全部去除,僅保留內(nèi)容”。
從搜索引擎的角度來(lái)講,在分析內(nèi)容之前它的前提也跟瀏覽器一樣要先構(gòu)建一棵完整的dom樹,只有當(dāng)這棵樹構(gòu)建完成,搜索引擎才能確定頁(yè)面中上下文的關(guān)系,以及你在頁(yè)面中使用了哪些加權(quán)(如<strong>,<h1>)的標(biāo)簽,以及它們的分布位置等等。但是搜索引擎在解析時(shí)更強(qiáng)調(diào)“內(nèi)容塊”的概念,即一個(gè)標(biāo)簽一個(gè)塊。還是以上html的例子。
當(dāng)搜索引擎在構(gòu)建這個(gè)dom樹時(shí),當(dāng)它解析到***個(gè)div內(nèi)的<h1>標(biāo)簽時(shí),發(fā)現(xiàn)這里出現(xiàn)了錯(cuò)誤,解析到P標(biāo)簽的時(shí)候,又遇到了錯(cuò)誤,這個(gè)時(shí)候?yàn)榱苏_構(gòu)建這棵dom樹,它會(huì)啟用整理模式,但這個(gè)時(shí)候的模式可能并不是幫你修復(fù)錯(cuò)誤,而是以“塊”為單位。查找錯(cuò)誤塊(節(jié)點(diǎn))的上級(jí)塊(節(jié)點(diǎn))(如果上一級(jí)還有錯(cuò)誤,則繼續(xù)往上一級(jí)查找),如果上一級(jí)塊沒有錯(cuò)誤,則將這個(gè)上級(jí)塊內(nèi)的所有子塊及子子塊有錯(cuò)誤的標(biāo)簽全部剔除,也就是說(shuō)把<div id="top">之內(nèi)的所有有錯(cuò)誤的標(biāo)簽全部剔除。
這樣一來(lái),我們看到自己精心寫入的<h1>和<strong>標(biāo)簽在解析后都不見了,整個(gè)塊的“權(quán)重”發(fā)生了偏移,根據(jù)html解析原理,我們很容易能得出一些結(jié)論:
1.當(dāng)頁(yè)面節(jié)點(diǎn)層次越來(lái)越多的時(shí)候,我們要特別小心標(biāo)簽層次的錯(cuò)誤,越是接近頂層的的節(jié)點(diǎn)越是要小心,比如少寫了結(jié)束標(biāo)簽,這個(gè)影響對(duì)seo也許是致命的.
2.不論你用什么布局,節(jié)點(diǎn)嵌套層次是越少越好,一來(lái)可以減小搜索引擎解析節(jié)點(diǎn)時(shí)的負(fù)擔(dān),二來(lái)搜索引擎更容易確定節(jié)點(diǎn)之間(上下文)的關(guān)系,第二點(diǎn)對(duì)關(guān)鍵詞的加權(quán)很重要。
3.當(dāng)標(biāo)簽的屬性能用css替代時(shí),則盡可能移到css中去.
4.瀏覽器和搜索引擎都允許html錯(cuò)誤,但標(biāo)準(zhǔn)的html在外部條件相同的情況,顯然更容易獲得更好的排名。
敬請(qǐng)期待,下一篇。
【編輯推薦】