Web性能、安全及SEO
性能優(yōu)化及安全篇
感謝網(wǎng)上有那么多的分享blog猫态,講的挺詳細(xì)的,有了一個(gè)很全面的了解披摄。
網(wǎng)站性能
從輸入U(xiǎn)RL到頁(yè)面加載懂鸵,總體來(lái)說(shuō)分為以下幾個(gè)過(guò)程:
- DNS解析
- TCP連接
- 發(fā)送HTTP請(qǐng)求
- 服務(wù)器處理請(qǐng)求并返回HTTP報(bào)文
- 瀏覽器解析渲染頁(yè)面
- 連接結(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方向:
- 減少HTTP請(qǐng)求:合并文件、CSS精靈柳譬、inline Image
- 減少DNS查詢(xún):DNS查詢(xún)完成之前瀏覽器不能從這個(gè)主機(jī)下載任何文件喳张。方法:DNS緩存、將資源分布到恰當(dāng)數(shù)量的主機(jī)名美澳,平衡并行下載和DNS查詢(xún)
- 避免重定向:多余的中間訪(fǎng)問(wèn)
- 使Ajax可緩存
- 非必須組件延遲加載
- 未來(lái)所需組件預(yù)加載
- 減少DOM元素?cái)?shù)量
- 將資源放到不同的域下:瀏覽器同時(shí)從一個(gè)域下載資源的數(shù)目有限销部,增加域可以提高并行下載量
- 減少iframe數(shù)量
- 減少404頁(yè)面
Server方面
- 使用CDN
- 添加Expires或者Cache-Control響應(yīng)頭
- 對(duì)組件使用Gzip壓縮
- 配置ETag
- Flush Buffer Early
- Ajax使用GET進(jìn)行請(qǐng)求
- 避免空src的img標(biāo)簽
Cookie方面
- 減小cookie大小
- 引入資源的域名不要包含cookie
css方面
- 將樣式表放到頁(yè)面頂部
- 不使用CSS表達(dá)式
- 使用不使用@import
- 不使用IE的Filter
Javascript方面
- 將腳本放到頁(yè)面底部
- 將javascript和css從外部引入
- 壓縮javascript和css
- 刪除不需要的腳本
- 減少DOM訪(fǎng)問(wèn)
- 合理設(shè)計(jì)事件監(jiān)聽(tīng)器
圖片方面
- 優(yōu)化圖片:根據(jù)實(shí)際顏色需要選擇色深摸航、壓縮
- 優(yōu)化css精靈
- 不要在HTML中拉伸圖片
- 保證favicon.ico小并且可緩存
- 使用字體圖標(biāo)
- 圖片進(jìn)行懶加載
- 合理的設(shè)置緩存
網(wǎng)站安全
一般常見(jiàn)的Web攻擊都是下三個(gè)方法:
- XSS(Cross-Site Scripting,跨站腳本攻擊):指通過(guò)存在安全漏洞的Web網(wǎng)站注冊(cè)用戶(hù)的瀏覽器內(nèi)運(yùn)行非法的HTML標(biāo)簽或者JS進(jìn)行的一種攻擊舅桩。
- SQL注入攻擊
- 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 = {
'<': '<',
'>': '>',
'"': '"',
'&': '&',
' ': '\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):
- 合理的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)鍵詞即可 - 語(yǔ)義化的HTML代碼,符合W3C規(guī)范:語(yǔ)義化代碼讓搜索引擎容易理解網(wǎng)頁(yè)
- 重要內(nèi)容HTML代碼放在最前:搜索引擎抓取HTML順序是從上到下碰凶,有的
搜索引擎對(duì)抓取長(zhǎng)度有限制暮芭,保證重要內(nèi)容一定會(huì)被抓取 - 重要內(nèi)容不要用js輸出:爬蟲(chóng)不會(huì)執(zhí)行js獲取內(nèi)容
- 少用iframe:搜索引擎不會(huì)抓取iframe中的內(nèi)容
- 非裝飾性圖片必須加alt
- 提高網(wǎng)站速度:網(wǎng)站速度是搜索引擎排序的一個(gè)重要指標(biāo)
標(biāo)簽語(yǔ)義化的優(yōu)勢(shì):
- 去掉樣式后頁(yè)面呈現(xiàn)清晰的結(jié)構(gòu)
- 盲人使用讀屏器更好地閱讀
- 搜索引擎更好地理解頁(yè)面鹿驼,有利于收錄
- 便于團(tuán)隊(duì)項(xiàng)目的可持續(xù)運(yùn)作及維護(hù)