網(wǎng)站性能優(yōu)化和安全

Web性能、安全及SEO
性能優(yōu)化及安全篇
感謝網(wǎng)上有那么多的分享blog猫态,講的挺詳細(xì)的,有了一個(gè)很全面的了解披摄。

網(wǎng)站性能

從輸入U(xiǎn)RL到頁(yè)面加載懂鸵,總體來(lái)說(shuō)分為以下幾個(gè)過(guò)程:
  1. DNS解析
  2. TCP連接
  3. 發(fā)送HTTP請(qǐng)求
  4. 服務(wù)器處理請(qǐng)求并返回HTTP報(bào)文
  5. 瀏覽器解析渲染頁(yè)面
  6. 連接結(jié)束

反應(yīng)給客戶(hù)的直觀(guān)感覺(jué)就是一個(gè)頁(yè)面打開(kāi)的速度,但這時(shí)間所受的影響因素很多行疏,網(wǎng)絡(luò)兆寬,頁(yè)面套像、軟件打開(kāi)多少占據(jù)內(nèi)存等等酿联。
常見(jiàn)網(wǎng)站性能指標(biāo):

  • 白屏?xí)r間
  • 首屏?xí)r間
  • 整頁(yè)時(shí)間
  • DNS時(shí)間
  • CPU占用率

對(duì)前端來(lái)說(shuō),處理的有限夺巩,可以從以下一些方面做處理優(yōu)化贞让。

content方向:
  1. 減少HTTP請(qǐng)求:合并文件、CSS精靈柳譬、inline Image
  2. 減少DNS查詢(xún):DNS查詢(xún)完成之前瀏覽器不能從這個(gè)主機(jī)下載任何文件喳张。方法:DNS緩存、將資源分布到恰當(dāng)數(shù)量的主機(jī)名美澳,平衡并行下載和DNS查詢(xún)
  3. 避免重定向:多余的中間訪(fǎng)問(wèn)
  4. 使Ajax可緩存
  5. 非必須組件延遲加載
  6. 未來(lái)所需組件預(yù)加載
  7. 減少DOM元素?cái)?shù)量
  8. 將資源放到不同的域下:瀏覽器同時(shí)從一個(gè)域下載資源的數(shù)目有限销部,增加域可以提高并行下載量
  9. 減少iframe數(shù)量
  10. 減少404頁(yè)面
Server方面
  1. 使用CDN
  2. 添加Expires或者Cache-Control響應(yīng)頭
  3. 對(duì)組件使用Gzip壓縮
  4. 配置ETag
  5. Flush Buffer Early
  6. Ajax使用GET進(jìn)行請(qǐng)求
  7. 避免空src的img標(biāo)簽
Cookie方面
  1. 減小cookie大小
  2. 引入資源的域名不要包含cookie
css方面
  1. 將樣式表放到頁(yè)面頂部
  2. 不使用CSS表達(dá)式
  3. 使用不使用@import
  4. 不使用IE的Filter
Javascript方面
  1. 將腳本放到頁(yè)面底部
  2. 將javascript和css從外部引入
  3. 壓縮javascript和css
  4. 刪除不需要的腳本
  5. 減少DOM訪(fǎng)問(wèn)
  6. 合理設(shè)計(jì)事件監(jiān)聽(tīng)器
圖片方面
  1. 優(yōu)化圖片:根據(jù)實(shí)際顏色需要選擇色深摸航、壓縮
  2. 優(yōu)化css精靈
  3. 不要在HTML中拉伸圖片
  4. 保證favicon.ico小并且可緩存
  5. 使用字體圖標(biāo)
  6. 圖片進(jìn)行懶加載
  7. 合理的設(shè)置緩存

網(wǎng)站安全

一般常見(jiàn)的Web攻擊都是下三個(gè)方法:

  1. XSS(Cross-Site Scripting,跨站腳本攻擊):指通過(guò)存在安全漏洞的Web網(wǎng)站注冊(cè)用戶(hù)的瀏覽器內(nèi)運(yùn)行非法的HTML標(biāo)簽或者JS進(jìn)行的一種攻擊舅桩。
  2. SQL注入攻擊
  3. CSRF(跨站點(diǎn)請(qǐng)求偽造):指攻擊者通過(guò)設(shè)置好的陷阱酱虎,強(qiáng)制對(duì)已完成的認(rèn)證用戶(hù)進(jìn)行非預(yù)期的個(gè)人信息或設(shè)定信息等某些狀態(tài)更新
XSS(跨站腳本攻擊)

XSS,即 Cross Site Script擂涛,中譯是跨站腳本攻擊读串;其原本縮寫(xiě)是 CSS,但為了和層疊樣式表(Cascading Style Sheet)有所區(qū)分撒妈,因而在安全領(lǐng)域叫做 XSS恢暖。
XSS 攻擊是指攻擊者在網(wǎng)站上注入惡意的客戶(hù)端代碼,通過(guò)惡意腳本對(duì)客戶(hù)端網(wǎng)頁(yè)進(jìn)行篡改狰右,從而在用戶(hù)瀏覽網(wǎng)頁(yè)時(shí)杰捂,對(duì)用戶(hù)瀏覽器進(jìn)行控制或者獲取用戶(hù)隱私數(shù)據(jù)的一種攻擊方式。
攻擊者對(duì)客戶(hù)端網(wǎng)頁(yè)注入的惡意腳本一般包括 JavaScript挟阻,有時(shí)也會(huì)包含 HTML 和 Flash琼娘。有很多種方式進(jìn)行 XSS 攻擊,但它們的共同點(diǎn)為:將一些隱私數(shù)據(jù)像 cookie附鸽、session 發(fā)送給攻擊者脱拼,將受害者重定向到一個(gè)由攻擊者控制的網(wǎng)站,在受害者的機(jī)器上進(jìn)行一些惡意操作坷备。

a. 持久型 XSS

持久型 XSS 就是對(duì)客戶(hù)端攻擊的腳本植入到服務(wù)器上熄浓,從而導(dǎo)致每個(gè)正常訪(fǎng)問(wèn)到的用戶(hù)都會(huì)遭到這段 XSS 腳本的攻擊。(如在留言評(píng)論功能添加惡意腳本)

b. 非持久型 XSS

非持久型 XSS 是對(duì)一個(gè)頁(yè)面的 URL 中的某個(gè)參數(shù)做文章省撑,把精心構(gòu)造好的惡意腳本包裝在 URL 參數(shù)中赌蔑,再將這個(gè) URL 發(fā)布到網(wǎng)上,騙取用戶(hù)訪(fǎng)問(wèn)竟秫,從而進(jìn)行攻擊
非持久性 XSS 的安全威脅比較小娃惯,因?yàn)橹灰?wù)器調(diào)整業(yè)務(wù)代碼進(jìn)行過(guò)濾,黑客精心構(gòu)造的這段 URL 就會(huì)瞬間失效了肥败,而相比之下趾浅,持久型 XSS 的攻擊影響力很大,有時(shí)候服務(wù)端需要?jiǎng)h好幾張表馒稍,查詢(xún)很多庫(kù)才能將惡意代碼的數(shù)據(jù)進(jìn)行刪除皿哨。

XSS 攻擊的防范

1.HttpOnly 防止劫取 Cookie

瀏覽器將禁止頁(yè)面的Javascript 訪(fǎng)問(wèn)帶有 HttpOnly 屬性的Cookie。
上文有說(shuō)到纽谒,攻擊者可以通過(guò)注入惡意腳本獲取用戶(hù)的 Cookie 信息证膨。通常 Cookie 中都包含了用戶(hù)的登錄憑證信息,攻擊者在獲取到 Cookie 之后鼓黔,則可以發(fā)起 Cookie 劫持攻擊央勒。所以不见,嚴(yán)格來(lái)說(shuō),HttpOnly 并非阻止 XSS 攻擊订歪,而是能阻止 XSS 攻擊后的 Cookie 劫持攻擊脖祈。

2. 輸入檢查

對(duì)于用戶(hù)的任何輸入要進(jìn)行檢查、過(guò)濾和轉(zhuǎn)義刷晋。建立可信任的字符和 HTML 標(biāo)簽白名單盖高,對(duì)于不在白名單之列的字符或者標(biāo)簽進(jìn)行過(guò)濾或編碼。
在 XSS 防御中眼虱,輸入檢查一般是檢查用戶(hù)輸入的數(shù)據(jù)中是否包含 <喻奥,>等特殊字符,如果存在捏悬,則對(duì)特殊字符進(jìn)行過(guò)濾或編碼撞蚕,這種方式也稱(chēng)為 XSS Filter。
而在一些前端框架中过牙,都會(huì)有一份 decodingMap甥厦, 用于對(duì)用戶(hù)輸入所包含的特殊字符或標(biāo)簽進(jìn)行編碼或過(guò)濾,如<寇钉,>刀疙,script,防止 XSS 攻擊:

// vuejs 中的 decodingMap
// 在 vuejs 中扫倡,如果輸入帶 script 標(biāo)簽的內(nèi)容谦秧,會(huì)直接過(guò)濾掉
const decodingMap = {
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&amp;': '&',
  '&#10;': '\n'
}
3.輸出檢查

用戶(hù)的輸入會(huì)存在問(wèn)題,服務(wù)端的輸出也會(huì)存在問(wèn)題撵溃。一般來(lái)說(shuō)疚鲤,除富文本的輸出外,在變量輸出到 HTML 頁(yè)面時(shí)缘挑,可以使用編碼或轉(zhuǎn)義的方式來(lái)防御 XSS 攻擊集歇。例如利用 sanitize-html 對(duì)輸出內(nèi)容進(jìn)行有規(guī)則的過(guò)濾之后再輸出到頁(yè)面中。

CSRF(跨站點(diǎn)請(qǐng)求偽造)

CSRF语淘,即 Cross Site Request Forgery鬼悠,中譯是跨站請(qǐng)求偽造,是一種劫持受信任用戶(hù)向服務(wù)器發(fā)送非預(yù)期請(qǐng)求的攻擊方式亏娜。
未被授權(quán)的系統(tǒng)想要有權(quán)訪(fǎng)問(wèn)某個(gè)資源的情況(跨站點(diǎn)請(qǐng)求偽造),首先會(huì)偽裝自己蹬挺,讓處理請(qǐng)求的服務(wù)器認(rèn)為他是合法的维贺。收到CSRF 攻擊的Ajax 程序有大有小,目的是:

  • 惡意的數(shù)據(jù)竊取和數(shù)據(jù)銷(xiāo)毀

通常情況下巴帮,CSRF 攻擊是攻擊者借助受害者的 Cookie 騙取服務(wù)器的信任溯泣,可以在受害者毫不知情的情況下以受害者名義偽造請(qǐng)求發(fā)送給受攻擊服務(wù)器虐秋,從而在并未授權(quán)的情況下執(zhí)行在權(quán)限保護(hù)之下的操作。

攻擊方法

假設(shè)有一個(gè) bbs 站點(diǎn):http://www.c.com垃沦,當(dāng)?shù)卿浐蟮挠脩?hù)發(fā)起如下 GET 請(qǐng)求時(shí)客给,會(huì)刪除 ID 指定的帖子:

http://www.c.com:8002/content/delete/:id

如發(fā)起 http://www.c.com:8002/content/delete/87343請(qǐng)求時(shí),會(huì)刪除 id 為 87343 的帖子肢簿。當(dāng)用戶(hù)登錄之后靶剑,會(huì)設(shè)置如下 cookie:

res.setHeader('Set-Cookie', ['user=22333; expires=Sat, 21 Jul 2018 00:00:00 GMT;']);

user 對(duì)應(yīng)的值是用戶(hù) ID。然后構(gòu)造一個(gè)頁(yè)面 A:

<p>CSRF 攻擊者準(zhǔn)備的網(wǎng)站:</p>
<img src="http://www.c.com:8002/content/delete/87343">

頁(yè)面 A 使用了一個(gè)img標(biāo)簽池充,其地址指向了刪除用戶(hù)帖子的鏈接,當(dāng)?shù)卿浻脩?hù)訪(fǎng)問(wèn)攻擊者的網(wǎng)站時(shí)桩引,會(huì)向 www.c.com 發(fā)起一個(gè)刪除用戶(hù)帖子的請(qǐng)求。此時(shí)若用戶(hù)在切換到 www.c.com的帖子頁(yè)面刷新收夸,會(huì)發(fā)現(xiàn)ID 為 87343 的帖子已經(jīng)被刪除坑匠。

由于 Cookie 中包含了用戶(hù)的認(rèn)證信息,當(dāng)用戶(hù)訪(fǎng)問(wèn)攻擊者準(zhǔn)備的攻擊環(huán)境時(shí)卧惜,攻擊者就可以對(duì)服務(wù)器發(fā)起 CSRF 攻擊厘灼。在這個(gè)攻擊過(guò)程中,攻擊者借助受害者的 Cookie 騙取服務(wù)器的信任咽瓷,但并不能拿到 Cookie设凹,也看不到 Cookie 的內(nèi)容。而對(duì)于服務(wù)器返回的結(jié)果忱详,由于瀏覽器同源策略的限制围来,攻擊者也無(wú)法進(jìn)行解析。因此匈睁,攻擊者無(wú)法從返回的結(jié)果中得到任何東西监透,他所能做的就是給服務(wù)器發(fā)送請(qǐng)求,以執(zhí)行請(qǐng)求中所描述的命令航唆,在服務(wù)器端直接改變數(shù)據(jù)的值胀蛮,而非竊取服務(wù)器中的數(shù)據(jù)。
但若 CSRF 攻擊的目標(biāo)并不需要使用 Cookie糯钙,則也不必顧慮瀏覽器的 Cookie 策略了粪狼。

CSRF攻擊防范

1. 驗(yàn)證碼

驗(yàn)證碼被認(rèn)為是對(duì)抗 CSRF 攻擊最簡(jiǎn)潔而有效的防御方法。
從上述示例中可以看出任岸,CSRF 攻擊往往是在用戶(hù)不知情的情況下構(gòu)造了網(wǎng)絡(luò)請(qǐng)求再榄。而驗(yàn)證碼會(huì)強(qiáng)制用戶(hù)必須與應(yīng)用進(jìn)行交互,才能完成最終請(qǐng)求享潜。因?yàn)橥ǔG闆r下困鸥,驗(yàn)證碼能夠很好地遏制 CSRF 攻擊。
但驗(yàn)證碼并不是萬(wàn)能的剑按,因?yàn)槌鲇谟脩?hù)考慮疾就,不能給網(wǎng)站所有的操作都加上驗(yàn)證碼澜术。因此,驗(yàn)證碼只能作為防御 CSRF 的一種輔助手段猬腰,而不能作為最主要的解決方案鸟废。

2. Referer Check

根據(jù) HTTP 協(xié)議,在 HTTP 頭中有一個(gè)字段叫 Referer姑荷,它記錄了該 HTTP 請(qǐng)求的來(lái)源地址盒延。通過(guò) Referer Check,可以檢查請(qǐng)求是否來(lái)自合法的"源"厢拭。
比如兰英,如果用戶(hù)要?jiǎng)h除自己的帖子,那么先要登錄 www.c.com供鸠,然后找到對(duì)應(yīng)的頁(yè)面畦贸,發(fā)起刪除帖子的請(qǐng)求。此時(shí)楞捂,Referer 的值是http://www.c.com薄坏;當(dāng)請(qǐng)求是從 www.a.com 發(fā)起時(shí),Referer 的值是 http://www.a.com了寨闹。因此胶坠,要防御 CSRF 攻擊,只需要對(duì)于每一個(gè)刪帖請(qǐng)求驗(yàn)證其 Referer 值繁堡,如果是以www.c.com 開(kāi)頭的域名沈善,則說(shuō)明該請(qǐng)求是來(lái)自網(wǎng)站自己的請(qǐng)求,是合法的椭蹄。如果 Referer 是其他網(wǎng)站的話(huà)闻牡,則有可能是 CSRF 攻擊,可以拒絕該請(qǐng)求绳矩。

if (req.headers.referer !== 'http://www.c.com:8002/') {
    res.write('csrf 攻擊');
    return;
}

Referer Check 不僅能防范 CSRF 攻擊罩润,另一個(gè)應(yīng)用場(chǎng)景是 “防止圖片盜鏈”。

3. 添加 token 驗(yàn)證

CSRF 攻擊之所以能夠成功翼馆,是因?yàn)楣粽呖梢酝耆珎卧煊脩?hù)的請(qǐng)求割以,該請(qǐng)求中所有的用戶(hù)驗(yàn)證信息都是存在于 Cookie 中,因此攻擊者可以在不知道這些驗(yàn)證信息的情況下直接利用用戶(hù)自己的 Cookie 來(lái)通過(guò)安全驗(yàn)證应媚。要抵御 CSRF严沥,關(guān)鍵在于在請(qǐng)求中放入攻擊者所不能偽造的信息,并且該信息不存在于 Cookie 之中中姜∠可以在 HTTP 請(qǐng)求中以參數(shù)的形式加入一個(gè)隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個(gè)攔截器來(lái)驗(yàn)證這個(gè) token,如果請(qǐng)求中沒(méi)有 token 或者 token 內(nèi)容不正確莱找,則認(rèn)為可能是 CSRF 攻擊而拒絕該請(qǐng)求。

客戶(hù)端頻繁向服務(wù)端請(qǐng)求數(shù)據(jù)嗜桌,服務(wù)端頻繁的去數(shù)據(jù)庫(kù)查詢(xún)用戶(hù)名和密碼并進(jìn)行對(duì)比奥溺,判斷用戶(hù)名和密碼正確與否,并作出相應(yīng)提示骨宠,在這樣的背景下浮定,Token便應(yīng)運(yùn)而生。Token是服務(wù)端生成的一串字符串层亿,以作客戶(hù)端進(jìn)行請(qǐng)求的一個(gè)令牌桦卒,當(dāng)?shù)谝淮蔚卿浐螅?wù)器生成一個(gè)Token便將此Token返回給客戶(hù)端匿又,以后客戶(hù)端只需帶上這個(gè)Token前來(lái)請(qǐng)求數(shù)據(jù)即可方灾,無(wú)需再次帶上用戶(hù)名和密碼。

SQL注入

什么是SQL注入

就是通過(guò)把 SQL 命令插入到 Web 表單提交或頁(yè)面請(qǐng)求的查詢(xún)字符串碌更,最終達(dá)到服務(wù)器執(zhí)行惡意的 SQL 命令
具體來(lái)說(shuō)裕偿,它是利用現(xiàn)有應(yīng)用程序,將(惡意) 的 SQL 命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力痛单,它可以通過(guò)在 Web 表單中輸入 (惡意) SQL 語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù)嘿棘,而不是按照設(shè)計(jì)者意圖去執(zhí)行 SQL 語(yǔ)句。

SQL注入的危害
  • 數(shù)據(jù)庫(kù)信息泄漏:數(shù)據(jù)庫(kù)中存放的用戶(hù)的隱私信息的泄露旭绒。
  • 網(wǎng)頁(yè)篡改:通過(guò)操作數(shù)據(jù)庫(kù)對(duì)特定網(wǎng)頁(yè)進(jìn)行篡改鸟妙。
  • 數(shù)據(jù)庫(kù)被惡意操作:數(shù)據(jù)庫(kù)服務(wù)器被攻擊
  • 服務(wù)器被遠(yuǎn)程控制,被安裝后門(mén)
  • 刪除和修改數(shù)據(jù)庫(kù)信息
SQL 防護(hù)
  • 永遠(yuǎn)不要信任用戶(hù)的輸入: 對(duì)用戶(hù)的輸入進(jìn)行校驗(yàn)挥吵,可以通過(guò)正則表達(dá)式重父,或限制長(zhǎng)度;對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等蔫劣。
  • 永遠(yuǎn)不要使用動(dòng)態(tài)拼裝 SQL坪郭,可以使用參數(shù)化的 SQL 或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢(xún)存取。
  • 永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接脉幢,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接歪沃。
  • 不要把機(jī)密信息直接存放,加密或者 hash 掉密碼和敏感的信息嫌松。

防御方法

1. 數(shù)據(jù)校驗(yàn)

其實(shí)漏洞的主要原因還是沒(méi)有對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行過(guò)濾沪曙,所以對(duì)來(lái)自用戶(hù)的數(shù)據(jù)(GET, POST, cookie 等)最好做到以下兩種過(guò)濾校驗(yàn):
檢查輸入的數(shù)據(jù)是否具有所期望的數(shù)據(jù)格式。這種在參數(shù)是數(shù)字的時(shí)候特別有效萎羔,如果攻擊者選擇在參數(shù)中插入內(nèi)容的話(huà)則會(huì)被轉(zhuǎn)換成 NaN 導(dǎo)致攻擊失敗液走。在 ThinkJS 中我們提供了強(qiáng)大的 Logic 功能可以方便的對(duì)數(shù)據(jù)進(jìn)行格式校驗(yàn)。
使用數(shù)據(jù)庫(kù)特定的敏感字符轉(zhuǎn)義函數(shù)把用戶(hù)提交上來(lái)的非數(shù)字?jǐn)?shù)據(jù)進(jìn)行轉(zhuǎn)義。在 ThinkJS 中封裝了 escapeString() 方法可以對(duì)敏感字符進(jìn)行轉(zhuǎn)義缘眶,其原理則和 PHP 的 mysql_escape_string() 方法是一致的嘱根。

2. 權(quán)限限制

嚴(yán)格限制Web應(yīng)用的數(shù)據(jù)庫(kù)的操作權(quán)限,給此用戶(hù)提供僅僅能夠滿(mǎn)足其工作的最低權(quán)限巷懈,從而最大限度的減少注入攻擊對(duì)數(shù)據(jù)庫(kù)的危害该抒。請(qǐng)記住永遠(yuǎn)不要使用超級(jí)用戶(hù)或所有者帳號(hào)去連接數(shù)據(jù)庫(kù)!當(dāng)數(shù)據(jù)庫(kù)被攻擊時(shí)將損傷限制在當(dāng)前表的范圍是比較明智的選擇顶燕。通過(guò)權(quán)限限制可以防止攻擊者獲取數(shù)據(jù)庫(kù)其它信息凑保,甚至利用數(shù)據(jù)庫(kù)執(zhí)行 Shell 命令等操作。

3. 日志處理

當(dāng)數(shù)據(jù)庫(kù)操作失敗的時(shí)候涌攻,盡量不要將原始錯(cuò)誤日志返回欧引,比如類(lèi)型錯(cuò)誤、字段不匹配等恳谎,把代碼里的 SQL 語(yǔ)句暴露出來(lái)芝此,以防止攻擊者利用這些錯(cuò)誤信息進(jìn)行 SQL 注入。除此之外惠爽,在允許的情況下癌蓖,使用代碼或數(shù)據(jù)庫(kù)系統(tǒng)保存查詢(xún)?nèi)罩疽彩且粋€(gè)好辦法。顯然婚肆,日志并不能防止任何攻擊租副,但定期審計(jì)數(shù)據(jù)庫(kù)執(zhí)行日志可以跟蹤是否存在應(yīng)用程序正常邏輯之外的 SQL 語(yǔ)句執(zhí)行。日志本身沒(méi)用较性,要查閱其中包含的信息才行用僧。畢竟,更多的信息總比沒(méi)有要好赞咙。

SEO

SEO優(yōu)化要注意的事項(xiàng):

  1. 合理的title责循、description、keywords:
    title值強(qiáng)調(diào)重點(diǎn)即可攀操,重要關(guān)鍵詞出現(xiàn)不要超過(guò)2次院仿,而且要靠前,不同頁(yè)面title要有所不同速和;
    description把頁(yè)面內(nèi)容高度概括歹垫,長(zhǎng)度合適,不可過(guò)分堆砌關(guān)鍵詞颠放,不同頁(yè)面description有所不同排惨;
    keywords列舉出重要關(guān)鍵詞即可
  2. 語(yǔ)義化的HTML代碼,符合W3C規(guī)范:語(yǔ)義化代碼讓搜索引擎容易理解網(wǎng)頁(yè)
  3. 重要內(nèi)容HTML代碼放在最前:搜索引擎抓取HTML順序是從上到下碰凶,有的
    搜索引擎對(duì)抓取長(zhǎng)度有限制暮芭,保證重要內(nèi)容一定會(huì)被抓取
  4. 重要內(nèi)容不要用js輸出:爬蟲(chóng)不會(huì)執(zhí)行js獲取內(nèi)容
  5. 少用iframe:搜索引擎不會(huì)抓取iframe中的內(nèi)容
  6. 非裝飾性圖片必須加alt
  7. 提高網(wǎng)站速度:網(wǎng)站速度是搜索引擎排序的一個(gè)重要指標(biāo)

標(biāo)簽語(yǔ)義化的優(yōu)勢(shì):

  1. 去掉樣式后頁(yè)面呈現(xiàn)清晰的結(jié)構(gòu)
  2. 盲人使用讀屏器更好地閱讀
  3. 搜索引擎更好地理解頁(yè)面鹿驼,有利于收錄
  4. 便于團(tuán)隊(duì)項(xiàng)目的可持續(xù)運(yùn)作及維護(hù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辕宏,隨后出現(xiàn)的幾起案子畜晰,更是在濱河造成了極大的恐慌,老刑警劉巖瑞筐,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷蟀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡面哼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)扫步,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)魔策,“玉大人,你說(shuō)我怎么就攤上這事河胎〈程唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵游岳,是天一觀(guān)的道長(zhǎng)政敢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)胚迫,這世上最難降的妖魔是什么喷户? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮访锻,結(jié)果婚禮上褪尝,老公的妹妹穿的比我還像新娘。我一直安慰自己期犬,他們只是感情好河哑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著龟虎,像睡著了一般璃谨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲤妥,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天佳吞,我揣著相機(jī)與錄音,去河邊找鬼旭斥。 笑死容达,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垂券。 我是一名探鬼主播花盐,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼羡滑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了算芯?” 一聲冷哼從身側(cè)響起柒昏,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熙揍,沒(méi)想到半個(gè)月后职祷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡届囚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年有梆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片意系。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泥耀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛔添,到底是詐尸還是另有隱情痰催,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布迎瞧,位于F島的核電站夸溶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凶硅。R本人自食惡果不足惜缝裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望足绅。 院中可真熱鬧压语,春花似錦、人聲如沸编检。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)允懂。三九已至厕怜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蕾总,已是汗流浹背粥航。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留生百,地道東北人递雀。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懦鼠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • http://www.91ri.org/tag/fuzz-bug 通常情況下坦胶,有三種方法被廣泛用來(lái)防御CSRF攻擊...
    jdyzm閱讀 4,161評(píng)論 0 5
  • 作者:dwqshttps://github.com/dwqs/blog/issues/68 在 Web 安全領(lǐng)域中...
    grain先森閱讀 398評(píng)論 0 2
  • “我要回家杨凑,我要回家......”剛進(jìn)樓道口就聽(tīng)見(jiàn)有人邊哭邊喊滤奈,我心里猛地一沉,該不會(huì)是我班的朱同學(xué)吧撩满,...
    彩色的珊瑚閱讀 330評(píng)論 0 0
  • 越是周末越是忙蜒程!早晨六點(diǎn)半就起床了,急急忙忙給兩個(gè)孩子穿衣服伺帘,飯都沒(méi)吃就出門(mén)了昭躺,把老公送去上班,我們娘三就回老家了...
    薇薇冰朵閱讀 145評(píng)論 0 2
  • 今天的班會(huì)心得伪嫁,今天的主題是空間管理的秘密窍仰,也就是要斷舍離。聽(tīng)完天哥的分享礼殊,我覺(jué)得這正是我最需要學(xué)習(xí)的內(nèi)容...
    美麗的花仙子閱讀 141評(píng)論 0 0