搜索引擎在對(duì)網(wǎng)頁(yè)進(jìn)行收錄和排序時(shí),首先需要搜索引擎爬蟲來抓取網(wǎng)頁(yè)。所以針對(duì)搜索引擎爬蟲的優(yōu)化,算是 SEO 的第一環(huán)。
去年在 AliExpress SEO 工作中遇到了一些搜索引擎爬蟲的問題(主要是 Googlebot),比如爬蟲抓取過量導(dǎo)致服務(wù)器崩潰、彈窗廣告被搜索引擎判斷為體驗(yàn)差、JavaScript 內(nèi)容如何更好的抓取等。因此,我們啟動(dòng)了一個(gè)爬蟲優(yōu)化的專項(xiàng) - “蜘蛛俠項(xiàng)目”,最后效果也不錯(cuò):每天整體抓取量提升了幾億,流量提升了幾十萬,虛擬機(jī)也下線了幾百多臺(tái)。
中間有些方案是國(guó)內(nèi)首創(chuàng),甚至是國(guó)際首創(chuàng),所以我還是比較開心的??
搜索引擎爬蟲的 SEO 優(yōu)化,主要分為這幾個(gè)部分:
抓取穩(wěn)定性機(jī)制的建立 - 解決了服務(wù)器被搜索引擎爬蟲抓崩的問題
搜索引擎爬蟲的體驗(yàn)優(yōu)化 - 解決了彈窗廣告被爬蟲判斷為負(fù)面體驗(yàn),流量影響的問題
SEO 差異化承接,包含人蟲分離、緩存、SSR - 解決了 JavaScript 內(nèi)容抓取的問題,也提升了整體抓取效率、降低了內(nèi)部服務(wù)器成本
事情要從一次 P0 bug 說起。有一天我被叫去參加一個(gè) P0 bug 的分析會(huì):AliExpress 的搜索服務(wù)器崩了,用戶無法正常站內(nèi)搜索。后來發(fā)現(xiàn) “罪魁禍?zhǔn)住?就是 Googlebot,抓取量突然提升了一倍,導(dǎo)致搜索服務(wù)器負(fù)載過高。開發(fā)同學(xué)也理解爬蟲量的增加對(duì) SEO 有幫助,但為了保證用戶在站內(nèi)正常搜索,只能把搜索引擎爬蟲屏蔽了。
根據(jù)之前的經(jīng)驗(yàn),搜索引擎爬蟲無法正常抓取時(shí),會(huì)認(rèn)為頻道/網(wǎng)站無法正常訪問(當(dāng)時(shí)網(wǎng)站是返回驗(yàn)證碼網(wǎng)頁(yè),還是200返回碼),然后會(huì)大范圍降低網(wǎng)站的排名和流量。于是,我馬上提出了一版爬蟲穩(wěn)定性方案:當(dāng)爬蟲 QPS 超過一定“水位”時(shí),返回對(duì)爬蟲友好的狀態(tài)碼(429/500/503),告訴 Googlebot 目前是網(wǎng)站服務(wù)器壓力過大,需要降低抓取頻率;當(dāng)爬蟲訪問在可接受范圍內(nèi),就正常返回網(wǎng)頁(yè)( 200 狀態(tài)碼)。當(dāng)這個(gè)方案上線后,爬蟲收到了信號(hào),馬上調(diào)低了抓取頻率,服務(wù)器狀態(tài)也迅速恢復(fù)正常。最后,我們將這套機(jī)制沉淀了下來,形成了一套長(zhǎng)期可用的爬蟲穩(wěn)定性機(jī)制。
值得一提的是,雙十一也成功應(yīng)用了這個(gè)方案。大促期間為了保障用戶的正常訪問,就調(diào)低了爬蟲的 QPS,把爬蟲抓取限制在較低的范圍。大促后,爬蟲 QPS 設(shè)置恢復(fù)正常,SEO 流量完全正常,并沒有出現(xiàn)往年大促抓取異常導(dǎo)致流量下降的情況。
在當(dāng)前電商 SEO 領(lǐng)域,一般無線端的流量比例是高于 PC 端的,但難受的是這部分流量的轉(zhuǎn)化遠(yuǎn)低于 PC(這中間可能有網(wǎng)絡(luò)、設(shè)備、網(wǎng)站基建等原因)。AliExpress 為了提升無線端流量的利用效率,在用戶訪問時(shí)有個(gè)全屏遮罩的彈窗廣告,引導(dǎo)用戶下載 APP 再轉(zhuǎn)化。但其實(shí)這類彈窗其實(shí)是非常傷害用戶體驗(yàn)的,Google 在一個(gè)文檔里也說過這類彈窗對(duì)用戶體驗(yàn)的傷害,并且在排名上會(huì)有較大的影響(百度也有體驗(yàn)優(yōu)化的文檔提到廣告的問題)。為了流量提升,我需要把這個(gè)彈窗下掉。第一期在不影響 APP 下降量的基礎(chǔ)上,我針對(duì) Googlebot 和其他搜索引擎爬蟲下掉了這個(gè)彈窗。也就是說,當(dāng)搜索引擎爬蟲訪問時(shí),這個(gè)頁(yè)面是不展示這個(gè)彈窗廣告的;當(dāng)用戶訪問時(shí),彈窗廣告還是正常顯示。果然,下掉彈窗廣告的第二周,SEO 流量就有了明顯提升,最后粗估大概有 10 萬+的流量提升吧。后續(xù),在和其他團(tuán)隊(duì)一起推動(dòng)下,用戶側(cè)的彈窗廣告也下掉了,改成了對(duì)體驗(yàn)更友好,更智能的廣告形式。這是后話了。
有一些用戶可能會(huì)有疑問,如何區(qū)分搜索引擎呢?主要是通過訪問時(shí)的 User-Agent 字段來判斷。一般搜索引擎爬蟲,都會(huì)有個(gè)固定的 User-Agent 的值。
以下是我整理的2個(gè)搜索引擎的特征字段:
搜索引擎 |
特征字段 | 官方文檔 |
Google |
Googlebo |
https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers?hl=en&visit_id=637570336155585559-1748790381&rd=1 |
百度 |
Baiduspide |
https://help.baidu.com/question?prod_id=99&class=476&id=2996 |
從彈窗開始,我意識(shí)到很多類似的場(chǎng)景:網(wǎng)站在針對(duì)用戶瀏覽時(shí),希望展示 coupon/code 來提升轉(zhuǎn)化,也希望放上廣告增加商業(yè)化收入,但在針對(duì)爬蟲抓取時(shí),希望網(wǎng)站越簡(jiǎn)單、越快越好。也就是說,其實(shí)同一套頁(yè)面承載了兩類用戶的需求:真實(shí)的訪問用戶、搜索引擎爬蟲。而且這兩類的訴求并不完全一致的(如圖架構(gòu)1.0)。其實(shí),AliExpress 也有個(gè)解決方案,就是做兩套頁(yè)面(2 個(gè) URL),一套服務(wù)于真實(shí)用戶的訪問,一套是服務(wù)于搜索引擎爬蟲的抓?。ㄈ鐖D架構(gòu)1.1)。但仍有個(gè)比較嚴(yán)重的問題,就是這兩套頁(yè)面都去做了 SEO 投放,內(nèi)容高度重復(fù),也就有了權(quán)重分散、排名內(nèi)部打架的情況。所以我提出了新的方案,就是 SEO 差異化承接(如圖架構(gòu)2.0)。主要內(nèi)容是:
同一個(gè)頁(yè)面(1個(gè) URL)根據(jù)真實(shí)用戶、爬蟲訪問時(shí)返回不同的模版;
當(dāng)真實(shí)用戶訪問時(shí),展示 SEO 用戶定制頁(yè)面,主要考慮承接轉(zhuǎn)化、商業(yè)化。比如放上新人的 coupon/code、P4P 廣告等;
當(dāng)搜索引擎爬蟲訪問時(shí),展示爬蟲定制頁(yè)面,主要保證頁(yè)面易抓取、易分析、良好體驗(yàn),比如內(nèi)容同步、頁(yè)面緩存、結(jié)構(gòu)化數(shù)據(jù)、代碼精簡(jiǎn)、無彈窗等;
另外,兩個(gè)頁(yè)面的主體內(nèi)容保持完全一致,避免被搜索引擎判斷為作弊;
在實(shí)施側(cè),最好用同一個(gè)模版實(shí)現(xiàn)差異化,減少整體的開發(fā)成本。
這樣既可以實(shí)現(xiàn) SEO 用戶的精細(xì)化運(yùn)營(yíng)、商業(yè)化,又能保證 SEO 流量正常增長(zhǎng)。
最后,這個(gè)方案在開發(fā)同學(xué)的支持下逐漸實(shí)現(xiàn),效果當(dāng)然也很不錯(cuò):
直接指標(biāo) - 整體抓取量提升了幾億,目前漲幅 50%+
間接指標(biāo) - 部分國(guó)家站的收錄翻了一倍,流量也有 20~40% 的增長(zhǎng)。
其實(shí)就是把真實(shí)訪客和搜索引擎爬蟲分開,具體的實(shí)現(xiàn)方式就是使用前文講的 User-Agent 的方式來區(qū)分。分開之后,就可以有不同的策略:針對(duì)用戶主要做承接轉(zhuǎn)化、針對(duì)爬蟲主要做易于爬蟲的抓取和分析。
說實(shí)話,針對(duì)爬蟲的緩存是最有效果的一部分。因?yàn)橐环矫妫?strong>緩存能大大提升爬蟲的抓取效率,另一方面,也能極大的降低服務(wù)器的成本。爬蟲訪問一個(gè)頁(yè)面時(shí),每次都需要實(shí)時(shí)調(diào)用服務(wù)器來獲取一些數(shù)據(jù)(因?yàn)楝F(xiàn)在都是動(dòng)態(tài)網(wǎng)頁(yè)),所以有一些跟服務(wù)器的握手時(shí)間。另外,因?yàn)榕老x每天的抓取量巨大,對(duì)服務(wù)器也是一個(gè)不小的壓力(參考第一部分服務(wù)器被抓掛的案例)。所以,我們把網(wǎng)頁(yè)做了靜態(tài)緩存放在服務(wù)器上,每次爬蟲來抓取時(shí)直接返回這個(gè)靜態(tài)緩存頁(yè)面,無需動(dòng)態(tài)獲取數(shù)據(jù)。在提升抓取速度的同時(shí),服務(wù)器的壓力也得到了釋放。當(dāng)然,中間也有一些緩存策略,比如主動(dòng)緩存和被動(dòng)緩存、緩存頻道的選擇、緩存時(shí)間的選定等。
之前在《JavaScript SEO》提到過,Googlebot 已經(jīng)具備了 JavaScript 內(nèi)容的解析能力,但同步化仍是效率更高的方式,因?yàn)?JavaScript 渲染還是有一些成本。所以在人蟲分離的架構(gòu)下,就可以考慮采用 SSR+CSR 的實(shí)現(xiàn)方式:
針對(duì)爬蟲,采用 SSR 的方式,方便爬蟲直接獲取到內(nèi)容,不需要 JavaScript 引擎的渲染
針對(duì)用戶,采用 CSR 的方式,更有利于用戶體驗(yàn),比如 LCP、CLS 等性能指標(biāo)的優(yōu)化
《減慢 Googlebot 的抓取速度》https://developers.google.com/search/docs/guides/reduce-crawl-rate?hl=zh_cn
《實(shí)現(xiàn)動(dòng)態(tài)呈現(xiàn)》https://developers.google.com/search/docs/guides/dynamic-rendering
《JavaScript SEO 完全指南》https://www.zhidaow.com/post/javascript-seo-2021
(來源:)
以上內(nèi)容屬作者個(gè)人觀點(diǎn),不代表雨果跨境立場(chǎng)!本文經(jīng)原作者授權(quán)轉(zhuǎn)載,轉(zhuǎn)載需經(jīng)原作者授權(quán)同意。
(來源:SEO技術(shù)流)