一、前言
关于 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 的提交啦!