SEO|如何通过 Golang 快速通知 Google 抓取更新网页

让 Google 更快抓取你的网页:Golang 与 Google Indexing API 的应用

文章目录

今天,我们来做点需要进行代码编程开发的 SEO——使用 Golang 调用 Google Indexing API 让 google 更及时知道你的网页发生变化更快地抓取你更新的网页,提升网页抓取速度。

借助 Google Indexing API,任何网站所有者都可在添加或移除网页时直接告知 Google。这样一来,Google 就能及时整理网页并安排进行新的抓取,从而带来更优质的用户流量。

要使用 Indexing API,请按以下步骤操作:

  1. 启用 Indexing API,创建新服务帐号,在 Search Console 中验证所有权并获取访问令牌来验证 API 调用,从而满足前提条件。
  2. 发送请求,通知 Google 有新增、更新或删除的网页。

Google API 调用有默认配额,要查看您当前配额和请求更多配额,请转到 Google API 控制台

使用 Indexing API 的前期准备

在开始使用 Goole Indexing API 之前,需要先执行以下几项操作(如果尚未完成):

1、为客户端创建一个项目并启用 Indexing API

在向 Indexing API 发送请求之前,您需要先使用 设置工具 在 Google API 控制台中创建项目、启用 Indexing API 以及创建凭据。

在 Google Cloud 控制台创建项目

为项目启用 Indexing API,点击启用 API 和服务,搜索 “Web Search Indexing API”,点击启用

如果你在代码调用 API 时返回如下结果则表示你未启用 Indexing API:

googleapi: Error 403: Web Search Indexing API has not been used in project xxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/indexing.googleapis.com/overview?project=xxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
Details:
[
  {
    "@type": "type.googleapis.com/google.rpc.Help",
    "links": [
      {
        "description": "Google developers console API activation",
        "url": "https://console.developers.google.com/apis/api/indexing.googleapis.com/overview?project=xxx"
      }
    ]
  },
  {
    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
    "domain": "googleapis.com",
    "metadata": {
      "consumer": "projects/xxx",
      "service": "indexing.googleapis.com"
    },
    "reason": "SERVICE_DISABLED"
  }
]
, accessNotConfigured

2、创建服务帐号

选择进入您新创建的项目页面,点击创建服务账号。服务账号是一种通常由应用或计算工作负载(例如 Compute Engine 实例)而非真人使用的特殊账号。服务账号由其电子邮件地址(对该账号是唯一的)标识,最终我们需要使用该服务账号的邮箱地址作为鉴权账号。

输入服务帐号的名称和说明。您可以使用默认服务帐号 ID,也可以选择其他唯一的帐号 ID。完成后,点击创建并继续。后面的 权限(可选) 部分无需设置。

点击服务账号列表中新建的账号,进入详细信息页面,切换到密钥 tab,点击添加密钥按钮,创建新密钥。在弹出窗口中密钥类型建议使用 JSON

点击创建。您的新公钥/私钥对随后会以 json 文件的形式生成并下载到您的计算机上;代码调用中需要使用到该文件,请妥善保存。

3、将您的服务帐号添加为网站所有者

查看您新建的服务账号的详细信息,复制其邮箱地址。

如果你在此前没有使用过 Google search console 的话,需要先在 Google Search Console 中添加并验证您的网站(网域资源)。

选择您已验证所有权的资源,进入设置,点击用户和权限,点击添加用户,在弹出窗口中的电子邮件地址中填入我们创建的服务账号的电子邮件地址(在服务账号详细信息中可查看),注意添加用户时的权限有“拥有者”、“完整”、“受限”三种,一定要选择权限为拥有者才能正常通过 API 调用。

如果你通过代码调用 API 时返回以下错误:

googleapi: Error 403: Permission denied. Failed to verify the URL ownership., forbidden

则表示你的用户权限没有正确将服务账号的邮箱这个用户权限设置为网站拥有者。

使用 Golang 调用 Google Indexing API

除了 Google 提供的各种语言的 API 客户端 库,我们可以先通过 APIs Explorer 在网页上调试接口。

下面是一个使用 Golang 的客户端 通过调用 Indexing API 通知谷歌更新网页的使用示例:

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"

	"google.golang.org/api/indexing/v3"
	"google.golang.org/api/option"
)

func main() {
	ctx := context.Background()
	// 对 Indexing API 的每次调用都必须使用 OAuth 令牌进行身份验证
    // 该令牌以您前面下载的服务账号的私钥文件 `/path/to/my-svc-account-keys.json` 交换获得。
	client, err := indexing.NewService(ctx, option.WithCredentialsFile("/path/to/my-svc-account-keys.json"))
	if err != nil {
		log.Fatal(err)
	}
	data := &indexing.UrlNotification{
		Type: "URL_UPDATED",
		Url:  "https://example.com/new-url/",
	}
	rsp, err := client.UrlNotifications.Publish(data).Do()
	if err != nil {
		log.Fatal(err)
	}
	rspjson, _ := json.MarshalIndent(rsp, "", " ")
	fmt.Println(string(rspjson))
}

Google 会对成功的 Indexing API 调用做出 HTTP 200 响应。HTTP 200 响应意味着 Google 可能很快会尝试重新抓取此网址。响应的正文包含一个 UrlNotificationMetadata 对象,其字段对应通知状态请求返回的字段。

运行代码,输出结果:

{
  "urlNotificationMetadata": {
    "latestUpdate": {
      "notifyTime": "2024-07-22T08:25:44.182527840Z",
      "type": "URL_UPDATED",
      "url": "https://example.com/new-url/"
    },
    "url": "https://example.com/new-url/"
  }
}

我们可以通过 Indexing API 执行以下操作:

  • Publish 方法更新网址:type=URL_UPDATED
  • Publish 方法移除网址:type=URL_DELETED,在请求移除之前,网址必须返回 404 或 410 状态代码,或者网页包含 <meta name="robots" content="noindex" /> meta 标记。
  • GetMetadata 方法获取 Publish 调用后的通知状态

参考文档:

Golang package - urlsubmitter

由于经常有提交 URL 的需求,比如我更新了一个网页,需要将其通知到 google、bing 和 baidu,所以我将这三个搜索引擎的提交请求封装成了 golang package,有需要使用的可以试试,当前只支持最基础的提交。

源码仓库地址: https://github.com/axiaoxin-com/urlsubmitter

小结

通过本文的介绍,我们详细讲解了如何使用 Golang 调用 Google Indexing API,及时通知谷歌更新网页。借助这一强大的工具,我们可以大幅提升网页的抓取速度,确保最新内容能够快速被搜索引擎收录,从而带来更多的优质用户流量。希望通过这篇文章,您能够掌握这一技术,并应用到实际的 SEO 优化中。如果您在操作过程中有任何问题或建议,欢迎留言讨论。


也可以看看