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