熟知排名算法,快速提升網站轉化率
随着互聯網的(de)飛速發展, 使用傳統靜态頁面和(hé / huò)JavaScript技術開發一(yī / yì /yí)個(gè)大(dà)型網站的(de)難度越來(lái)越高。而(ér)Google 推出(chū)的(de)AngularJS 則是(shì)基于(yú)傳統JavaScript 的(de)一(yī / yì /yí)個(gè)MVC 框架,開發者可以(yǐ)通過它來(lái)編寫目前主流的(de)單頁面應用。它克服了(le/liǎo)HTML在(zài)構建大(dà)型Web 應用上(shàng)的(de)不(bù)足,使用HTML 作爲(wéi / wèi)模闆,簡化應用組件,利用依賴注入和(hé / huò)數據綁定,使開發人(rén)員可以(yǐ)更有效地(dì / de)進行一(yī / yì /yí)些大(dà)型網站以(yǐ)及APP 的(de)開發。爲(wéi / wèi)了(le/liǎo)使AngularJS 開發的(de)頁面支持搜索引擎爬蟲, 需要(yào / yāo)對此單頁面模式進行搜索引擎優化(Search Engine Optimization,SEO)。現有對于(yú)AngularJS 單頁面的(de)SEO 策略的(de)研究和(hé / huò)相關文獻較少, 所以(yǐ)本文還結合了(le/liǎo)相關社區、論壇等一(yī / yì /yí)系列的(de)網絡資源。本研究對AngularJS 單頁面的(de)動态數據無法被爬蟲解析到(dào)的(de)問題提出(chū)了(le/liǎo)非實時(shí)和(hé / huò)實時(shí)靜态化的(de)兩種基于(yú)JavaEE 攔截器的(de)SEO 策略。
1 單頁面靜态化策略
1.1 策略一(yī / yì /yí):非實時(shí)的(de)靜态化
智能識别爬蟲機器人(rén)返回定期更新的(de)緩存頁面的(de)非實時(shí)靜态化SEO 原理。具體分爲(wéi / wèi):①在(zài)項目部署或者在(zài)設定的(de)一(yī / yì /yí)段時(shí)間後,對頁面進行後台的(de)獲取、遍曆,通過配置文件設定的(de)遍曆深度開始對首頁進行深度的(de)鏈接獲取以(yǐ)及轉義,将各個(gè)鏈接對應的(de)頁面交給下一(yī / yì /yí)步處理,直到(dào)所有遍曆結束;②對遍曆的(de)頁面進行SEO 處理, 生成或更新靜态HTML 緩存放入靜态頁面池,即配置文件設置的(de)緩存路徑,并在(zài)遍曆結束後及時(shí)對無效鏈接的(de)緩存進行清理;③網絡請求首先通過攔截器(SEOFilter),攔截器根據HTTP 請求的(de)請求頭中包含的(de)“User-Agent”等參數判斷此請求是(shì)否爲(wéi / wèi)爬蟲機器人(rén)的(de)請求,如果不(bù)是(shì)則返回正常的(de)頁面用于(yú)AngularJS 内部渲染顯示, 反之(zhī)則通過URL 轉義查詢并返回對應的(de)SEO 緩存頁面給爬蟲機器人(rén)用于(yú)抓取關鍵字。由于(yú)此策略是(shì)非實時(shí)的(de),所以(yǐ)它适用于(yú)較爲(wéi / wèi)穩定且對于(yú)搜索引擎的(de)實時(shí)性要(yào / yāo)求不(bù)高的(de)網站。例如政府辦公網站,它每日更新的(de)内容不(bù)多且不(bù)會頻繁地(dì / de)修改頁面内容,則可以(yǐ)每日對服務器的(de)靜态頁面進行更新,即可滿足每日更新搜索引擎詞條的(de)需求。
1.2 策略二:實時(shí)的(de)靜态化
策略一(yī / yì /yí)爲(wéi / wèi)非實時(shí)的(de)靜态化策略, 然而(ér)它不(bù)會很好地(dì / de)适用于(yú)需要(yào / yāo)經常更新數據且對搜索引擎實時(shí)性要(yào / yāo)求較高的(de)大(dà)型門戶網站。例如大(dà)型的(de)新聞網站, 網站經常會發布新的(de)文章或者是(shì)公告, 并且需要(yào / yāo)搜索引擎能夠盡快地(dì / de)将新聞的(de)鏈接和(hé / huò)關鍵詞加入索引,那麽頻繁更新緩存頁面的(de)服務器開銷會很大(dà),并且緩存文件所占的(de)空間也(yě)會越來(lái)越大(dà), 因此針對此種情況提出(chū)了(le/liǎo)實時(shí)的(de)靜态化策略。請求頁面時(shí)即時(shí)生成定時(shí)銷毀的(de)靜态頁面緩存,爬蟲機器人(rén)請求時(shí), 首先查找是(shì)否存在(zài)緩存以(yǐ)及頁面緩存是(shì)否失效,如果緩存有效則返回靜态池中的(de)靜态頁面,反之(zhī)則生成新的(de)靜态頁面或者更新靜态池内的(de)靜态頁面, 修改後的(de)實時(shí)靜态化策略原理..同時(shí),此實時(shí)靜态化策略也(yě)改進了(le/liǎo)頁面的(de)緩存方式,它對于(yú)不(bù)同緩存頁面的(de)關鍵字設置不(bù)同的(de)清理權重(即更新頻率高低,需要(yào / yāo)人(rén)工設置)。 較爲(wéi / wèi)穩定的(de)頁面———例如首頁菜單、公司信息等展示頁面可以(yǐ)設定較小的(de)權重值;更新比較頻繁的(de)頁面,例如新聞公告、發布消息的(de)彙總頁則可以(yǐ)設定較大(dà)的(de)權重值。權重越小的(de)靜态頁面的(de)緩存時(shí)間越久,可以(yǐ)保存一(yī / yì /yí)天甚至是(shì)一(yī / yì /yí)周,這(zhè)樣可以(yǐ)大(dà)幅節省頻繁生成此類緩存的(de)資源浪費; 而(ér)權重越大(dà)的(de)靜态頁面由于(yú)更新頻繁,所以(yǐ)緩存時(shí)間越短,考慮到(dào)搜索引擎的(de)爬蟲機器人(rén)不(bù)會實時(shí)抓取信息,而(ér)是(shì)間隔一(yī / yì /yí)段時(shí)間(一(yī / yì /yí)般爲(wéi / wèi)四至五小時(shí))才會重新抓取,因此可以(yǐ)在(zài)兩到(dào)三小時(shí)或更短的(de)時(shí)間後清理此類緩存。這(zhè)裏的(de)緩存也(yě)可能會清理失敗,所以(yǐ)在(zài)判斷緩存是(shì)否存在(zài)的(de)同時(shí)也(yě)需要(yào / yāo)檢查靜态頁面的(de)失效時(shí)間, 避免過時(shí)的(de)舊頁面緩存影響新發布信息的(de)檢索。策略還規定了(le/liǎo)當網站重新部署後強制清理所有緩存。
2 單頁面靜态化策略實現及測試
2.1 實現步驟
靜态化策略的(de)實現主要(yào / yāo)分成配置攔截器以(yǐ)及攔截器實現兩步。首先将AngularJS 的(de)Web 項目加入JavaEE 的(de)webapp 文件夾中,設置WEB-INF / web.xml 文件,确定外部工具路徑、緩存路徑、遍曆深度、攔截規則等參數,下面爲(wéi / wèi)少量配置代碼:
針對策略二的(de)實時(shí)靜态化SEO 策略的(de)攔截器SEOFilter 的(de)實現原理攔截器首先判斷請求的(de)發送方, 如果不(bù)是(shì)爬蟲機器人(rén)則直接返回正常的(de)頁面,反之(zhī)則返回SEO 實時(shí)靜态化頁面。針對爬蟲機器人(rén)的(de)處理流程主要(yào / yāo)爲(wéi / wèi):首先進行URL 轉義,爬蟲請求分析,記錄URL 并查詢遍曆深度(沒有此項參數則使用配置文件中的(de)默認值);再将URL 進行二次轉義,查詢緩存文件;如果存在(zài)緩存文件并且沒有失效,則直接返回SEO 靜态頁面;如果緩存文件不(bù)存在(zài),或者緩存已失效并未及時(shí)銷毀,則先銷毀緩存,再進入SEO 處理器;SEO 處理器利用第三方工具PhantomJS,它是(shì)一(yī / yì /yí)個(gè)以(yǐ)WebKit 爲(wéi / wèi)基礎的(de)服務器端JavaScript 的(de)API,不(bù)依賴于(yú)浏覽器,全面支持各種Web 标準,例如頁面文檔對象模型(Document Object Model,DOM)處理等———對動态頁面進行搜索引擎優化; 最後生成緩存頁面, 保存文件至緩存文件目錄(緩存池),返回SEO 靜态頁面。
2.2 測試與分析
測試環境的(de)系統爲(wéi / wèi)Windows Server 2008 R2, 部署平台爲(wéi / wèi)Tomcat 7.0.70,端口8083 爲(wéi / wèi)實時(shí)靜态化策略實現後的(de)網站訪問入口,端口8084 則爲(wéi / wèi)原始的(de)AngularJS 網站的(de)訪問入口。首先使用浏覽器訪問網站, 攔截器判斷出(chū)請求爲(wéi / wèi)浏覽器請求,并在(zài)控制台顯示浏覽器版本,浏覽器可以(yǐ)正常浏覽網頁;之(zhī)後再使用模拟百度爬蟲機器人(rén)的(de)工具分别對原始網頁和(hé / huò)策略實現後網頁進行爬蟲,并顯示抓取的(de)頁面信息。表明了(le/liǎo)爬蟲機器人(rén)隻能抓取AngularJS 單頁面中的(de)部分關鍵字,包括标題、頁面底部描述等信息;而(ér)使用實時(shí)靜态化策略後,攔截器識别出(chū)了(le/liǎo)爬蟲機器人(rén)然後在(zài)控制台顯示,同時(shí)返回了(le/liǎo)SEO靜态頁面, 并且表明了(le/liǎo)網頁中的(de)動态數據已經可以(yǐ)被一(yī / yì /yí)般的(de)爬蟲機器人(rén)抓取到(dào),并顯示有用的(de)關鍵字,包括發布公告、網站信息等主要(yào / yāo)标題與信息。
3 結束語
本文提出(chū)了(le/liǎo)非實時(shí)和(hé / huò)實時(shí)靜态化的(de)兩種SEO 策略,它們均可以(yǐ)實現AngularJS 單頁面SEO 靜态化的(de)預期目的(de),不(bù)過它們也(yě)存在(zài)着一(yī / yì /yí)些不(bù)足。策略一(yī / yì /yí)針對的(de)是(shì)較爲(wéi / wèi)穩定且對搜索引擎檢索實時(shí)性要(yào / yāo)求不(bù)高的(de)大(dà)型網站,例如政府辦公網站等。它可以(yǐ)定期對網站中的(de)靜态頁面進行更新, 但是(shì)對于(yú)實時(shí)性要(yào / yāo)求較高的(de)門戶網站,它會頻繁地(dì / de)重新遍曆所有靜态頁面,大(dà)大(dà)增加服務器的(de)壓力, 生成所有緩存的(de)時(shí)間和(hé / huò)服務器緩存頁面的(de)數量也(yě)會相應增加。策略二針對的(de)則是(shì)對搜索引擎檢索實時(shí)性要(yào / yāo)求較高的(de)大(dà)型門戶網站,例如新聞網站等。它盡可能增加緩存頁面的(de)實時(shí)性并且節約緩存文件的(de)空間,但是(shì)對于(yú)實時(shí)性要(yào / yāo)求不(bù)高的(de)網站,它會頻繁地(dì / de)銷毀再生成不(bù)需要(yào / yāo)實時(shí)更新的(de)頁面緩存, 這(zhè)也(yě)會浪費服務器的(de)部分資源。因此,需要(yào / yāo)根據當前網站對于(yú)搜索引擎檢索實時(shí)性的(de)要(yào / yāo)求來(lái)選擇适合的(de)策略。同時(shí), 本文的(de)重點在(zài)于(yú)對AngularJS 單頁面的(de)SEO 靜态化的(de)策略與實現,所以(yǐ)對于(yú)關鍵字的(de)優化還可以(yǐ)做進一(yī / yì /yí)步的(de)研究。
最後,搜索引擎優化是(shì)對于(yú)整個(gè)系統的(de)一(yī / yì /yí)個(gè)協同優化的(de)過程,它由内部設計因素和(hé / huò)外部鏈接因素共同影響,SEO 其實隻是(shì)一(yī / yì /yí)個(gè)輔助行爲(wéi / wèi),對于(yú)一(yī / yì /yí)個(gè)網站更重要(yào / yāo)的(de)是(shì)其内容的(de)全面與創新。
上(shàng)一(yī / yì /yí)篇:網站優化的(de)新趨勢
下一(yī / yì /yí)篇:網站設計時(shí)應注意的(de)十個(gè)搜索引擎優化細節