提高網(wǎng)站性能的SEO后端優(yōu)化全列表
提高網(wǎng)站性能的SEO 后端優(yōu)化全列表從我開(kāi)始知道 SEO 這幾年起,基本上所有的 SEO 活動(dòng)都是基于前端的,從header 到 body ,從小標(biāo)簽到 CSS ,從鏈接到關(guān)鍵詞密度;初期牛人們?cè)\斷一
提高網(wǎng)站性能的SEO 后端優(yōu)化全列表
從我開(kāi)始知道 SEO 這幾年起,基本上所有的 SEO 活動(dòng)都是基于前端的,從header 到 body ,從小標(biāo)簽到 CSS ,從鏈接到關(guān)鍵詞密度;初期牛人們?cè)\斷一個(gè)網(wǎng)站 SEO 的標(biāo)準(zhǔn)也是從前端頁(yè)面著手,不過(guò)的確也是,從排名算法前端的代碼的確占了大部分的比例,但后端的服務(wù)器速度優(yōu)化,也開(kāi)始成為一個(gè)越來(lái)越重要的因素,特別是流言四起的Google 將會(huì)把網(wǎng)站速度作為算法的一部分。
當(dāng)然,服務(wù)器那種事不該是一個(gè) SEOer 或者 SEMer 應(yīng)該去精通的東西,其實(shí)只要了解并掌握其規(guī)律就可以了(推薦另外一片文章:大型網(wǎng)站架構(gòu)演變和知識(shí)體系) ;但依然要熟悉網(wǎng)站系統(tǒng)或者 CMS 的加速手段,正如國(guó)平在《怎樣形成一套非??茖W(xué)系統(tǒng)的SEO 方法》中分析的 什么措施能影響網(wǎng)頁(yè)加載速度呢? 網(wǎng)絡(luò)環(huán)境、服務(wù)器硬件、CMS 本身都能影響網(wǎng)頁(yè)加載速度。優(yōu)化其中的任何一項(xiàng),都能提升網(wǎng)頁(yè)加載速度。那馬上又可以得出:網(wǎng)絡(luò)環(huán)境影響SEO 流量、服務(wù)器硬件影響SEO 流量、CMS 本身的速度影響SEO 流量。
影響速度的因素有很多,這里做一個(gè)匯總(不包括硬件)
本文內(nèi)容參考Yahoo :Best Practices for Speeding Up Your Web Site 和 高性能網(wǎng)頁(yè)開(kāi)發(fā)的14條軍規(guī)
一、盡可能的減少 HTTP 的請(qǐng)求數(shù)
這個(gè)第一條是我們大多數(shù)SEO 所知道的,我再做一個(gè)簡(jiǎn)單的描述:大多數(shù)的HTTP 請(qǐng)求都是前端的,用戶的大多數(shù)時(shí)間都被用來(lái)下載圖片、CSS 樣式表、各種Scripts 、Flash 等等。當(dāng)然或許將css ,js 文件拆分多個(gè)是因?yàn)閏ss 結(jié)構(gòu),共用等方面的考慮。阿里巴巴中文站當(dāng)時(shí)的做法是開(kāi)發(fā)時(shí)依然分開(kāi)開(kāi)發(fā),然后在后臺(tái) 對(duì)js ,css 進(jìn)行合并,這樣對(duì)于瀏覽器來(lái)說(shuō)依然是一個(gè)請(qǐng)求,但是開(kāi)發(fā)時(shí)仍然能還原成多個(gè),方便管理和重復(fù)引用。yahoo 甚至建議將首頁(yè)的css 和 js 直接寫(xiě)在頁(yè)面文件里面,而不是外部引用。因?yàn)槭醉?yè)的訪問(wèn)量太大了,這么做也可以減少兩個(gè)請(qǐng)求數(shù)。而事實(shí)上國(guó)內(nèi)的很多門(mén)戶都是這么做的。
而css sprites是指只用將頁(yè)面上的背景圖合并成一張,然后通過(guò)css 的background-position 屬性定義不過(guò)的值來(lái)取他的背景。淘寶和阿里巴巴中文站目前都是這樣做的。有興趣的可以看下淘寶和阿里巴巴的背景圖。
,background-position 坐標(biāo)。并將結(jié)果以png 和gif 的格式輸出。
二、使用CDN (內(nèi)容分發(fā)網(wǎng)絡(luò))Content Delivery Network
之前曾經(jīng)問(wèn)過(guò)張智勇公子關(guān)于 CDN 是否對(duì) SEO 有影響,在征詢了技術(shù)老總的意見(jiàn)之后,這個(gè)影響其實(shí)幾乎可以忽略的,反而是用戶端的速度體驗(yàn)提升了,對(duì)網(wǎng)站的正向作用更大。
CDN 加速現(xiàn)在很流行,幾乎稍微大一點(diǎn)的網(wǎng)站都有用這個(gè)服務(wù),就是將網(wǎng)站的鏡像服務(wù)備份到多個(gè)服務(wù)器節(jié)點(diǎn),從而加速該服務(wù)器周?chē)挠脩粼L問(wèn)。
更詳細(xì)地內(nèi)容大家可以參考百度百科上對(duì)于CDN 的解釋
三、添加Expire/Cache-Control 頭
這個(gè)規(guī)則有兩個(gè)東西:
?
? 對(duì)靜態(tài)的組件:設(shè)置為永不過(guò)期; 對(duì)動(dòng)態(tài)的組件:設(shè)置為一個(gè)合理的緩存控制頭來(lái)幫助有條件的相應(yīng).
通過(guò)設(shè)置Expires header 來(lái)緩存這些文件。Expire 其實(shí)就是通過(guò)header 報(bào)文來(lái)指定特定類(lèi)型的文件在覽器中的緩存時(shí)間。大多數(shù)的圖片,flash 在發(fā)布后都是不需要經(jīng)常修 改的,做了緩存以后這樣瀏覽器以后就不需要再?gòu)姆?wù)器下載這些文件而是而直接從緩存中讀取,這樣再次訪問(wèn)頁(yè)面的速度會(huì)大大加快。 一個(gè)典型的HTTP 1.1協(xié)議返回的頭信息:
HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: “3e86-410-3596fbbc”
,Content-Length: 1040
Content-Type: text/html
其中通過(guò)服務(wù)器端腳本設(shè)置Cache-Control 和Expires 可以完成。
如,在php 中設(shè)置30天后過(guò)期:
= “Expires: ” . gmdate (“D, d M Y H:i:s”, time () $offset ) . “ GMT”;Header($ExpStr ); –>
在asp 中設(shè)置絕對(duì)時(shí)間過(guò)期:
< Response.ExpiresAbsolute=#May 31,2010 13:30:15 GMT# >
也可以通過(guò)配置服務(wù)器本身完成,這些偶就不是很清楚了,呵呵。想了解跟多的朋友可以參考
四、Gzip 壓縮
這個(gè)是目前應(yīng)用最多的加速方式之一,代碼也很簡(jiǎn)單,gzip 的壓縮比例非常大,一般壓縮率為85,就是 說(shuō)服務(wù)器端100K 的頁(yè)面可以壓縮到25K 左右再發(fā)送到客戶端。雅虎開(kāi)發(fā)者特別強(qiáng)調(diào), 所有的文本內(nèi)容都應(yīng)該被gzip 壓縮: html (php), js, css, xml, txt。
五、將css 放在頁(yè)面最上面
六、將script 放在頁(yè)面最下面
七、避免在CSS 中使用Expressions
css 表達(dá)是的執(zhí)行次數(shù)是遠(yuǎn)遠(yuǎn)多于我們想象的,往往會(huì)嚴(yán)重地影響性能。而且,它只能在IE 中執(zhí)行。所以因盡量地避免它。這一條以前倒沒(méi)想過(guò),個(gè)人用 這個(gè)就是在對(duì)ie 使用max-width 和min-width 屬性的時(shí)
,候。大家知道IE 是不支持max-width 和min-width 屬性的。有時(shí)候的 頁(yè)面(特別是自適應(yīng)大小的頁(yè)面)為了能在分辨率小到一定程度后還能顯示要用到這個(gè)功能,怎么辦。當(dāng)時(shí)我的做法就是利用expressions:
八、外置javascript 和css 文件
這個(gè)地球人都知道
九、減少DNS 查詢
在 Internet 上域名與IP 地址之間是一一對(duì)應(yīng)的,域名(SEMWatch.org )很好記,但計(jì)算機(jī)不認(rèn)識(shí),計(jì)算機(jī)之間的“相認(rèn)”還要轉(zhuǎn)成ip 地址。在網(wǎng)絡(luò) 上每臺(tái)計(jì)算機(jī)都對(duì)應(yīng)有一個(gè)獨(dú)立的ip 地址。在域名和ip 地址之間的轉(zhuǎn)換工作稱(chēng)為域名解析,也稱(chēng)DNS 查詢。一次DNS 的解析過(guò)程會(huì)消耗20-120毫秒的 時(shí)間, 在dns 查詢結(jié)束之前,瀏覽器不會(huì)下載該域名下的任何東西。所以減少dns 查詢的時(shí)間可以加快頁(yè)面的加載速度。yahoo 的建議一個(gè)頁(yè)面所包含的域 名數(shù)盡量控制在2-4個(gè)。這就需要對(duì)頁(yè)面整體有一個(gè)很好的規(guī)劃。
十、壓縮 JavaScript 和 CSS
壓縮js 和css 的左右很顯然,減少頁(yè)面字節(jié)數(shù)。容量小頁(yè)面加載速度自然也就快。而且壓縮除了減少體積以外還可以起到一定的保護(hù)左右。
當(dāng)然,壓縮帶來(lái)的一個(gè)弊端就是代碼的可讀性沒(méi)了。相信很多做前端的朋友都遇到過(guò)這個(gè)問(wèn)題:看Google 的效果很酷,可是去看他的源代碼卻是一大堆 擠在一起的字符,連函數(shù)名都是替換過(guò)的,汗死!自己的代碼也這樣豈不是對(duì)維護(hù)非常不方便。
十一、雅虎開(kāi)發(fā)者告訴我們要避免重定向
301,302重定向是普通 SEO 里最常見(jiàn)的,特別是301,對(duì)權(quán)重的轉(zhuǎn)移和保留非常有幫助,除非迫不得以,盡量少用重定向。
十二、移除重復(fù)的腳本
這點(diǎn)我想不說(shuō)也知道,不僅是從性能上考慮,代碼規(guī)范上看也是這樣。但是不得不承認(rèn),很多時(shí)候我們會(huì)因?yàn)閳D一時(shí)之快而加上一些或許是重復(fù)的代碼
,十三、配置實(shí)體標(biāo)簽(Configure ETags)
這點(diǎn)我也不懂,呵呵。在inforQ 上找到一篇解釋得比較詳細(xì)的說(shuō)明《使用ETags 減少Web 應(yīng)用帶寬和負(fù)載》,有興趣的同學(xué)可以去看看。
十四、使 AJAX 緩存 (Make Ajax Cacheable )
記住,即使AJAX 是動(dòng)態(tài)產(chǎn)生的而且只對(duì)一個(gè)用戶起作用,他們依然可以被緩存
Even though your Ajax responses are created dynamically, and might only be applicable to a single user, they can still be cached. Doing so will make your Web 2.0 apps faster.
十五、Flush the Buffer Early
十六、Use GET for AJAX Requests
十七、Post-load Components
十八、Preload Components
十九、Reduce the Number of DOM Elements
二十、Split Components Across Domains
二十一、Minimize the Number of iframes
框架最好都不要用。
二十二、No 404s
這個(gè)和SEO 的相關(guān)條款不一致,可以忽視哈。
二十三、Reduce Cookie Size
盡可能的吧,cookies 跟蹤好了,有可能比速度更重要
,二十四、Use Cookie-free Domains for Components 二十五、Minimize DOM Access
二十六、Develop Smart Event Handlers
二十七、Choose over @import
二十八、Avoid Filters
二十九、Optimize Images
三十、Optimize CSS Sprites
三十一、Don’t Scale Images in HTML
三十二、Make favicon.ico Small and Cacheable 三十三、Keep Components under 25K
三十四、Pack Components into a Multipart Document 三十五、Avoid Empty Image src
避免空的圖片地址鏈接
1. straight HTML
2. JavaScript var img = new Image();
img.src = “”;
這兩種形式都會(huì)導(dǎo)致同樣的效果:瀏覽器會(huì)向服務(wù)器進(jìn)行額外請(qǐng)求
,三十六、沒(méi)了 哎喲,太多了