1. 程式人生 > >讓百度和谷歌收錄自己的GitLab部落格

讓百度和谷歌收錄自己的GitLab部落格

這篇就不介紹如何搭建部落格了,hexo用github page搭建的教程一搜一大堆,gitlab步驟也沒多大區別,這裡主要說一下怎樣讓百度和谷歌能夠搜尋到我們搭建的部落格。

為什麼選擇GitLab搭建部落格

以前用的github,換成gitlab的原因主要是github不讓百度蜘蛛爬啊,百度蜘蛛爬不到就沒辦法在百度裡展示了,查了一些解決方法,有的掛CDN的,有買伺服器的,有另作一個映象的,自我感覺還不如換一個方便。

GitLab的CI也很方便,這樣就不用本地構建了,直接修改檔案pull上去,後臺自動進行構建操作。

GitLab的CI

個人認為使用gitlab的ci還是比較方便的,需要在部落格目錄下加一個檔案,.gitlab-ci.yml

這是我的檔案,可以依照這個編寫

image: node:8.11.2

pages:
  cache:
    paths:
    - node_modules/

  script:
  - npm install hexo-cli -g
  - npm install
  - npm install hexo-generator-sitemap --save
  - npm install hexo-generator-baidu-sitemap --save
  - hexo clean
  - hexo g
  - hexo deploy
  artifacts:
    paths:
    - public
  only:		
  - master

沒用過docker,只說一下我自己的理解,不對請指出。

  • image:映象,這個設定成node原因我也不知道為啥,看的別人這樣設定的。

  • pages: cache: paths:這個就填寫為node_modules,這裡邊放的應該是hexo和node的指令碼?庫?大概是這些吧。

  • script:這裡填要執行的命令,按順序執行。

  • artifacts:這個應該是要釋出的網站存放的資料夾,hexo經過deploy後都是public資料夾。

  • only:這個不知道什麼意思,但是看到別人填master我也填,應該是分支的意思。

檔案寫好以後pull上去,以後的每次pull都會執行script裡的命令,也就實現了自動釋出網站了。

讓Google收錄部落格

  • 首先,確保部落格已經發布了,自己可以正常訪問

  • 要有一個Google賬號,沒有就註冊一個吧,中國的手機有些不給註冊,如果你的手機號也在此列的話,還是淘寶買一個改密碼吧。

  • 點選新增屬性按鈕,把自己的部落格連結填進去

  • 選擇HTML檔案上傳的驗證方法,然後按照提示的步驟進行驗證。基於hexo的部落格,我們把驗證檔案放在source資料夾裡就可以了,deploy時會自動釋出。注意:驗證檔案要手動編輯一下,在檔案開頭加上layout: false標籤,否則該html檔案也會使用當前的主題樣式,導致內容無法被google正確獲取,也就無法驗證成功了。

    ---
    layout: false
    ---
    google-site-verification: googlexxxxxxxxxx.html
    

    複製好以後,先將改動pull上去,等待網站構建完成釋出後,可以人工訪問一下,就是在域名後加上驗證檔案的檔名,例如:https://xiaoming.gitlab.io/google2744c3c83d7970a5.html。期望的結果是,不帶任何樣式的一句google-site-verification: googlexxxxxxxxxx.html,如果有樣式的話就說明沒有加上上邊的layout: false。可以正常訪問的就點驗證吧!

  • 驗證成功了就說明這個網站是屬於你的了,為保持已進行過驗證的狀態,即使成功通過了驗證也請不要刪除該 HTML 檔案,不然後期google就無法爬取你的網站了。

  • 使用npm安裝sitemap的外掛,每次deploy時自動生成google可用的sitemap檔案。

    命令為:npm install hexo-generator-sitemap --save
    
  • 進入google的網站管理頁面,在左側控制檯處依次點選抓取—站點地圖,右上角有新增/測試站點地圖,點選以後將sitemap.xml填進去,然後測試提交。

  • 提交成功以後,google以後就會週期性的爬去sitemap.xml記錄的網址了,更新也不用重複提交sitemap,只需要更新sitemap即可。

  • 也可以選擇手動提交,在左側控制檯處,點選抓取—Google 抓取工具,然後輸入網址,進行抓取,過程中可以重新整理下頁面看結果,成功以後列表中有將網址和連結頁編入索引,點選以後會編入索引,即顯示在搜尋結果中。

  • PS:google在收錄過程中有快有慢,這個沒辦法改,我的部落格提交了十幾天才能在搜尋中展示。

  • 查詢是否被展示,可以在google搜尋中,輸入site:主頁網址,例如site:rhirufxmbcyj.gitlab.io。

讓百度收錄部落格

  • 註冊一個百度賬號

  • 訪問百度的站長平臺https://ziyuan.baidu.com/dashboard/index,點選新增網站,然後輸入網址,http和https按實際選擇,gitlab搭建的部落格是https的。然後是站點資訊,隨便選吧。然後就到了驗證這一步,和上邊google的驗證過程一樣,選擇檔案驗證,下載檔案,放到source資料夾,加上layout: false",pull到倉庫,等待網站成功釋出,然後手動校驗一下,在百度上點選完成驗證按鈕。

  • 進入站長平臺,點選左側的列表中資料引入—連結提交,向下翻發現,有自動提交和手動提交兩種方式,手動提交也就是直接把網址貼上進去,然後提交就可以了,這種方法如果以後文章寫的多了也就費時費力了,推薦儘量使用自動提交的三種方法。

百度的sitemap

原理是,sitemap裡邊存放著部落格裡的網址,提交了sitemap,只能被動著等待百度的爬取。

  • 使用npm安裝sitemap的外掛,每次deploy時自動生成baidu可用的sitemap檔案。

    命令為:npm install hexo-generator-baidu-sitemap --save
    
  • 提交成功以後,大約十幾秒就可以看到結果了,在百度站長平臺的sitemap頁面下邊,狀態有等待、正常、錯誤,錯誤的話就得檢查原因了,sitemap通過以後,也像google的sitemap一樣,不需要重複提交,百度週期性爬取。只需要釋出新文章時更新sitemap即可,更新sitemap,hexo的外掛已經幫我們做了,所以到這裡,sitemap也就不用我們操心了。

百度的自動推送

原理是,每次有人訪問頁面時,都會將網址提交給百度,比sitemap主動一些,但是與訪問量有關,如果沒有訪問量,那這個功能也就廢了。

  • 自動推送較為簡單,介紹說是要在每個網頁中都加入這段JS程式碼,但是我們使用hexo只需在一處加入就可以讓每個網頁都存在這段程式碼。

  • 部落格資料夾下,尋找目錄 themes\yilia\layout\_partial,我使用的主題是yilla,其他主題不清楚,應該都是類似的。

  • 資料夾中有一個after-footer.ejs檔案,裡邊已經有一段script程式碼了,這段程式碼放在其後即可。

百度的主動推送

原理是,百度開放介面,讓我們可以在每次釋出都可以使用指令碼或工具進行提交。

四種推送方法,curl、post、php、ruby,百度也提供了demo,可以依照這自己研究。這裡只寫一下我使用的curl推送方法。

將要提交的連結按照每行一條的格式寫入一個文字檔案中,命名此檔案為urls.txt,然後進入該檔案所在目錄,執行如下命令:
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=https://rhirufxmbcyj.gitlab.io&token=XXXXXXXXXXX"

將要提交的連結按照每行一條的格式寫入一個文字檔案中,命名此檔案為urls.txt,然後進入該檔案所在目錄,執行如下命令:

也就是說要把需要提交的連結提取出來,這個連結其實可以從sitemap裡拿,我是用python的正則表示式把地址截出來的。

程式碼:

import re
import os

content = ''

# 讀取sitemap檔案 因為hexo g之後會生成public資料夾 sitemap也在裡邊 所以就直接讀取了
def get_sitemap_content():
    global content
    f = open("public/baidusitemap.xml", "r")
    content = f.read()
    f.close()

# 用正則表示式取出網址 新增換行符存放到檔案中
def write_urls():
    global content
    urls = re.findall(r"<loc>(.+?)</loc>", content)
    f = open("urls.txt","w")
    for url in urls:
        url = url + '\n'
        f.write(url)
    f.close()


if __name__ == '__main__':
    get_sitemap_content()
    write_urls()
    # 這一串字串是從百度站長平臺拷貝的 因為token不同,所以需要填寫自己的
    print(os.system('''curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=https://rhirufxmbcyj.gitlab.io&token=xxxxxxxxxxxxxx"'''))

這個python檔案放在根目錄即可,連同著部落格一塊pull上去,並且修改一下.gitlab-ci.yml檔案,讓其執行python程式碼。

.gitlab-ci.yml檔案內容:

image: node:8.11.2

services:
  - python:3.7.0

pages:
  cache:
    paths:
    - node_modules/

  script:
  - npm install hexo-cli -g
  - npm install
  - npm install hexo-generator-sitemap --save
  - npm install hexo-generator-baidu-sitemap --save
  - hexo clean
  - hexo g
  - hexo deploy
  - python active_push.py
  artifacts:
    paths:
    - public
  only:
  - master

最終,在gitlab的ci構建裡同步顯示的視窗中,看到了主動推送成功的提示。