我之前写过一篇文章,介绍了本站是使用Hugo进行构建并发布在Github Pages上的。也向大家介绍过将网站提交给搜索引擎的方法,但是手工提交未免繁琐和低效。今天给大家介绍下如何通过IndexNow 对网站进行SEO优化。

SEO的作用

搜索引擎优化 (SEO) 对于网站的重要性无法忽视。如果你想让你的网站获得更多的曝光,那么你需要理解 SEO 的作用,以及它是如何帮助你获得更高的搜索引擎排名的。以下是使用 SEO 的 5 大理由:

  1. 提高可见性
  2. 提高网站流量
  3. 提供用户友好的体验
  4. 建立信任和信誉
  5. 获得竞争优势

IndexNow介绍

IndexNow是一个开源协议,由微软提出并开发。它使网站无论是新增页面,更新页面或删除页面,发布者都可以使用 IndexNow 协议将这些更新快速推送至搜索引擎。

对于 SEOIndexNow 有着直接的影响。使用 IndexNow 的网站可以使其内容更快地呈现在搜索结果中,从而提高网站的 SEO 排名。由于搜索结果的新鲜度是影响 SEO 的一个重要因素,因此 IndexNow 的使用对于 SEO 而言具有重大价值。

另一个巨大优势在于:支持 IndexNow 协议的搜索引擎会立即共享数据至其它的搜索引擎,因此您只需通知其中一个搜索引擎即可。目前支持的搜索引擎有:BingNaverSeznam.czYandex

接入准备

访问https://www.bing.com/indexnow,上面给出了接入步骤分为4步:

  • Generate API Key
  • Host API key
  • Submit URLs with parameters
  • Get details on how many submitted

实际上准备工作就是上面的步骤1和步骤2。在上面的网站上生成一个API Key (按钮1),下载API Key文件(按钮2),最后将文本文件放置在你的网站根目录下。

IndexNow Implementation Steps

IndexNow Implementation Steps

这样准备工作就完成了。

利用Github Actions自动提交

由于我的网站是通过Hugo 在本地生成静态页面,然后推送到仓库,通过Guthub Actions部署到Github Pages上的,因此我这里做了如下改动:

  • 写了一个python脚本,读取sitemap里最近更新的10篇文章的url。构建一个POST请求,将url提交给IndexNow
  • 新增加一个workflow ,在代码推送至仓库时,调用上面这个python脚本。

代码参考:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def get_latest_posts(sitemap_path, n=10):
    # Parse the XML sitemap.
    tree = ET.parse(sitemap_path)
    root = tree.getroot()

    # Namespace dictionary to find the 'loc' and 'lastmod' tags.
    namespaces = {'s': 'http://www.sitemaps.org/schemas/sitemap/0.9'}

    # Get all URLs.
    urls = [(url.find('s:loc', namespaces).text, url.find('s:lastmod', namespaces).text)
            for url in root.findall('s:url', namespaces)
            if "/posts/2" in url.find('s:loc', namespaces).text]

    # Sort URLs by the lastmod tag (in descending order), hence most recent pages come first.
    urls.sort(key=lambda x: x[1], reverse=True)

    # Return the n most recent URLs.
    return [url[0] for url in urls[:n]]

def ping_bing(url_list):
    # Prepare the URL and headers.
    url = 'https://www.bing.com/indexnow'
    headers = {
      'Content-Type': 'application/json; charset=utf-8',
    }

    # Prepare the body data.
    data = {
      "host": HOST,
      "key": KEY,
      "keyLocation": f"https://{HOST}/{KEY}.txt",
      "urlList": url_list
    }

    # Send the POST request.
    response = requests.post(url, headers=headers, json=data)
    return response

if __name__ == "__main__":

    sitemap_path = "../sitemap.xml"
    url_list = get_latest_posts(sitemap_path, 9)
    url_list.insert(0, f'https://{HOST}/')
    print(url_list)

    response = ping_bing(url_list)
    # Print the response.
    print(response.status_code)
    print(response.text)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Simple workflow for deploying static content to GitHub Pages
name: Submit IndexNow Request To Bing

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["main"]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  indexnow:
    name: IndexNow
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install requests          

      - name: Run script
        run: |
          cd .github
          python ping_bing.py          

最后查看下效果,登录Bing Webmaster Tools,选择左边菜单栏的IndexNow

IndexNow on Bing Webmaster Tools

IndexNow on Bing Webmaster Tools

使用 Cloudflare 集成 IndexNow

Cloudflare已经集成了IndexNowhttps://blog.cloudflare.com/cloudflare-now-supports-indexnow。所以如果你的网站是托管在Cloudflare上的,可以直接在控制台里设置。这个功能免费用户可用。

  1. Sign in to your Cloudflare Account.
  2. In the dashboard, navigate to the Cache tab.
  3. Click on the Configuration section.
  4. Locate the Crawler Hints sign up card and enable. It’s that easy.

Cloudflare Crawler Hints

Cloudflare Crawler Hints

但是有个奇怪的地方,我没有用Cloudflare Pages进行网站托管,仅仅使用了它的DNS解析,开启Crawler Hints后,效果很差。它并不能将我的文章url准确推送给IndexNow,相反推送的是一些图片和txt文件。