竞品 SERP 周报自动化:每周一早上 9 点自动生成

做 SEO 的应该都写过竞品周报------每周手动查竞品排什么词、谁进前五、谁掉了。一次小半天,还容易漏。

这篇文章讲怎么把竞品周报做成全自动:每周一早上 9 点,一份报告自动生成发到群/邮箱。全程不用人管。

整体思路

竞品周报 = 定时抓 → 对比上周 → 生成报告 → 推送。

下面以 SerpBase 的 /google/search 接口为例。

第一步:竞品词表

先把要监控的词列好。两类:

  • 竞品品牌词:竞品名、竞品产品名
  • 行业核心词:你所在的行业高频词
python 复制代码
KEYWORDS = [
    "竞品A",
    "竞品B",
    "行业词1",
    "行业词2",
]

第二步:定时抓取

python 复制代码
import requests
from datetime import datetime

def fetch_top5(keyword):
    r = requests.post(
        "https://api.serpbase.dev/google/search",
        headers={"X-API-Key": "你的key"},
        json={"q": keyword, "hl": "zh-CN", "gl": "cn"},
        timeout=10,
    )
    r.raise_for_status()
    organic = r.json().get("organic", [])
    return [
        {"rank": i + 1, "title": x.get("title", "")[:30], "link": x.get("link", "")}
        for i, x in enumerate(organic[:5])
    ]

第三步:存历史,对比

每周抓一次,存下来,对比上周:

python 复制代码
import json, os

def load_prev():
    if os.path.exists("prev.json"):
        return json.load(open("prev.json", encoding="utf-8"))
    return {}

def save_curr(data):
    json.dump(data, open("prev.json", "w", encoding="utf-8"), ensure_ascii=False)

def build_report():
    prev = load_prev()
    curr = {kw: fetch_top5(kw) for kw in KEYWORDS}
    lines = ["## 竞品 SERP 周报", f"时间: {datetime.now():%Y-%m-%d}", ""]

    for kw in KEYWORDS:
        lines.append(f"### {kw}")
        old = prev.get(kw, [])
        new = curr[kw]
        if old and new:
            # 找出变化
            for item in new:
                rank = item["rank"]
                before = next((p["rank"] for p in old if p["link"] == item["link"]), None)
                mark = ""
                if before and before != rank:
                    mark = f" (从{before}变)"
                lines.append(f"{rank}. {item['title']}{mark}")
        else:
            for item in new:
                lines.append(f"{item['rank']}. {item['title']}")
        lines.append("")

    save_curr(curr)
    return "\n".join(lines)

第四步:推送

生成完报告,推送到目标。两种常见:

发邮件:

python 复制代码
import smtplib
from email.mime.text import MIMEText

def send_email(body):
    msg = MIMEText(body, "plain", "utf-8")
    msg["Subject"] = "竞品 SERP 周报"
    msg["From"] = "you@example.com"
    msg["To"] = "team@example.com"
    with smtplib.SMTP("smtp.example.com", 587) as s:
        s.starttls()
        s.login("you", "pass")
        s.send_message(msg)

发群(飞书/钉钉 webhook):调 webhook 就行,几行代码。

第五步:定时跑

GitHub Actions 每周一早上:

yaml 复制代码
name: competitor-weekly
on:
  schedule:
    - cron: "0 1 * * 1"   # 周一 1 点 UTC(北京 9 点)
jobs:
  weekly:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
      - run: pip install requests
      - run: python weekly.py
        env:
          SERPBASE_API_KEY: ${{ secrets.SERPBASE_API_KEY }}

效果

以前:每周手动 2-3 小时,容易漏。

现在:周一早上自动生成,看一眼变化就行。

注意

  1. 固定 hl/gl:周报对比才有意义
  2. 别盯太细:一天的变化可能是噪声,周维度看趋势
  3. 成本:几十个词一周一次,一个月几美元

完整参数和响应字段参考:serpbase.dev/docs。这套周报,我搭完就没再手动做过。

相关推荐
VIP_CQCRE2 小时前
AceData Cloud MCP:把整个平台能力接入你的 AI 助手
ai·api·mcp·acedatacloud
XLYcmy7 小时前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api
VIP_CQCRE11 小时前
用一个 API 接入 GPT-Image-2 与 Nano Banana:Ace Data Cloud 图像生成能力实践
ai·aigc·openai·api·图像生成
星核0penstarry1 天前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
VIP_CQCRE1 天前
用 Ace Data Cloud 开启 AI 能力商业化:推广平台,或打造自己的白标 AI 平台
ai·api·mcp·ace data cloud·白标平台
VIP_CQCRE1 天前
用一句镜头语言生成商业级视频:Ace Data Cloud Veo API 实战指南
api·ai视频·acedatacloud·veo
东方不败耶耶耶2 天前
多模态API接入实战-看图接口与多模型路由
api
探数API小喇叭2 天前
基站查询 API 怎么用?LAC、CELLID 参数详解与实战】
java·开发语言·api·基站定位
VIP_CQCRE2 天前
用 Ace Data Cloud 快速接入 MiniMax H3:从提示词到 2K 商业级视频生成
人工智能·api·ai视频·minimax·ace data cloud