一、前言
關于 sitemap 的作用,做過網站 SEO 的站長應該不陌生了吧,下面引用百度搜尋的解釋,供各位了解:
**sitemap:**您可以定期将網站連結放到Sitemap中,然後将Sitemap送出給百度。百度會周期性的抓取檢查您送出的Sitemap,對其中的連結進行處理,但收錄速度慢于API推送。
從百度給出的解釋可知,如果等百度蜘蛛來抓取
Sitemap
,這個時間是随機的,而且對于收錄來說要慢于 API 主動推送的。
說一個可能不嚴謹的問題,假設自己釋出了一篇辛苦創作的原創文章,結果後面被其他站點第一時間“盜取”并釋出,而自己的站點沒有第一時間将這個文章推送給百度蜘蛛,結果是盜取的站點先推送了給百度蜘蛛(或者說是百度蜘蛛先抓取了對方的 sitemap 檔案),那麼就可能會造成一種問題——百度會認為該文章是對方原創的,而不是自己,是以會給予對方較高的流量,而自己卻沒有。怎麼?有沒有一種被截胡的心酸…
是以,主動推送 Sitemap 對于 SEO 來說是很有必要的。
對于主動推送政策有:
- 新文章釋出即刻推送: 如有新文章釋出,則在釋出後的第一時間立即推送給百度蜘蛛。
- 定時推送Sitemap檔案:例如,在每天的某個特定時間将sitemap檔案推送給百度蜘蛛。
本文将介紹第二種方式:定時推送 Sitemap 檔案給百度蜘蛛。以下是一個可将 Typecho 網站 Sitemap 送出給百度搜尋蜘蛛的自動化腳本。
二、使用要求
- 僅支援 Typecho 站點;
- 已安裝 Sitemap 這個插件, 并確定可用;
- 確定系統安裝了 python 和 pip (預設Linux系統已内置)。
驗證辦法:
python -v
pip -v
如果輸出了對應的版本資訊,表明已完成安裝,否則,請自行完成安裝.
三、安裝&配置
Step1: 安裝依賴包
pip install requests
pip install commands
pip install beautifulsoup4
Step2: 建立存放腳本的目錄并切換到該目錄下
mkdir -p /usr/tmp/SitemapAutoCommitScript
cd /usr/tmp/SitemapAutoCommitScript
Step3: 編輯自動化腳本
執行
vim main.py
指令建立并打開檔案,然後按
i
鍵進入編輯模式,接着粘貼以下代碼:
#!/usr/bin/python
# coding: utf-8
######################################
# 作者: wuqintai
# 時間: 2021/4/13
# 網站: www.wuqintai.com
######################################
import requests
from bs4 import BeautifulSoup
import commands
import datetime
def commit_sitemap(sitemap_url, post_api):
"""
# 送出網站 Sitemap.xml 檔案到百度收錄中心
"""
execution_time = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
try:
# (1)提取資料
soup = BeautifulSoup(requests.get(sitemap_url).text, "lxml")
# (2)過濾網站 Sitemap 資訊并寫入 urls.txt
with open("./urls.txt", "w") as fp:
fp.truncate() # 清空原内容
for tag in soup.find_all("loc"):
fp.write(tag.text + "\n")
# (3)送出給百度
status, output = commands.getstatusoutput('curl -H "Content-Type:text/plain" --data-binary @urls.txt \"' + post_api + '\"')
# (4)寫入日志
save_commit_log("./Baidu_commit.log", execution_time + "\t" + output.split('\n')[-1] + "\n")
except Exception:
save_commit_log("./Baidu_commit.log", "Sitemap.xml grab failed")
def save_commit_log(file_name, text):
"""
# 寫入執行日志
"""
with open(file_name, "a+") as fp:
fp.write(text)
if __name__ == "__main__":
# 網站 Sitemap.xml 位址
sitemap_url = "https://www.wuqintai.com/sitemap.xml"
# 百度 curl 推送 API 接口
baidu_post_api = "http://data.zz.baidu.com/urls?site=https://www.wuqintai.com&token=AeUAatgO96pSIKCj"
commit_sitemap(sitemap_url, baidu_post_api)
注意:
上述代碼中需要修改以下兩項内容:
- sitemap_url : 修改為你網站的 sitemap.xml 的位址。
- baidu_post_api : 修改為你在 百度資源平台 >> 對應的站點 >> 普通收錄 >> 資源送出 >> API送出 的接口調用位址。
修改完成後,按
Esc
鍵推出編輯模式,接着輸入
:wq
回車執行,儲存退出檔案。
Step 4: 測試腳本可用性
在腳本目錄下,執行以下指令:
python main.py
或
./main.py
如果一切順利,程式不會提示任何資訊,此時,在存放腳本的目錄下會生成以下兩個檔案:
- urls.txt : 送出的 URL 集合(資料來源于 sitemap.xml)。
- Baidu_commit_sitemap.log : 送出給百度的記錄日志。
Step5: 配置定時任務
執行
vim /etc/crontab
指令, 開始編輯系統定時任務檔案, 在檔案末尾追加以下内容:
# 設定每晚 23:00 将網站 sitemap.xml 檔案中的 url 送出給百度.
00 23 * * * root cd /var/tmp/SitemapAutoCommitScript && ./main.py >/dev/null 2>&1
注意: 如果你存放腳本的路徑與本教程的不一緻, 那麼上述腳本也需适當調整。
如需知道配置是否可用,可通過調整促發時間和配合檢視日志的方式來判斷腳本是否正常執行。
這樣每天系統就會自動幫我們完成網址 sitemap 的送出啦!