都2021年了,个人博客都成为小众产品了,几乎都是开发者,十有八九还是个前端开发。

虽然GitHub时常被墙,但大部分人还是会选择GitHub Pages,以减少服务器的维护成本。

而作为个人博客站长,几乎都会不务正业的折腾各种功能模块,今天就来介绍SEO相关,关于网站收录的部分。

常用的搜索引擎一般分为以下三种:

  • 百度
  • Google
  • Bing

百度作为检索信息最多,且最乱的典型代表,你常常会在第一页找不到你想要的结果,但无奈它是我国最常用的搜索引擎。

常规的提交方法是去百度站长平台提交Sitemap,文件名一般为sitemap.xml,由于我目前使用的Gridea,没有生成Sitemap的方法,于是乎决定采用API的方式提交。

我们先准备好推送网站收录的脚本,以下是我写好的.push.py

import re
import json
import requests

domain = "blog.xwl.io"
token   = "xxxxxxxxxx"

res = requests.get("https://%s/archives/" % domain)

tags = re.findall(r'href="([a-zA-z]+://[^\s]*)"', str(res.text))

urls = []
for t in tags:
    if t.endswith("css") or t.endswith("js"):continue
    if not t.startswith(domain):continue
    urls.append(t)

urls = "\n".join(urls)

headers = {"Content-Type": "text/plain"}
resp = requests.post("http://data.zz.baidu.com/urls?site=https://%s&token=%s" & (domain, token), headers=headers, data=urls)
print(resp.text)

该脚本的功能是抓取网页上的所有链接,目标页面一般是首页,或者归档页,然后通过百度提供的API进行提交。

另外有两个值得注意的地方:

  • 脚本中的token在百度站长平台内的普通收录里获取。
  • 百度之前有个自动提交的JS,据我所知目前已经作废了,但接口还会正常返回。

然后我们进入到Github的博客项目中,选择Action,创建一个Workflow,会生成一个基础的模版,然后直接在steps路径下执行自己的脚本。

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
         
      - name: update baidu
        uses: actions/setup-python@v2
        with:
          python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
          architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
      - run: pip install requests && python .push.py

以上是我使用的完整的workflow配置,再添加上Google和Bing的部分,就大功告成了。

Google和Bing的Sitemap提交就非常的简单,直接通过一个GET请求即可。

在配置中的steps字段下继续增加即可。

- name: update google
  uses: wei/curl@master
  with:
    args: https://www.google.com/ping?sitemap=https://blog.xwl.io/atom.xml

- name: update bing
  uses: wei/curl@master
  with:
    args: http://www.bing.com/webmaster/ping.aspx?sitemap=https://blog.xwl.io/atom.xml

把自己的小站弄的花里胡哨,除了知识的分享,也是希望更多的人能看到。