技能市场

网站SEO体检与收录推送·百度IndexNow

@user_2ckqg/seo-check-push

网站SEO检测与百度收录推送站长工具:给自己的网站做SEO体检,检查百度收录障碍、站内死链、robots.txt、sitemap、标题描述、规范地址、手机适配、禁止收录标记等,输出中文报告并指出最该先修的三件事;首页打不开或被防火墙拦截时只给诊断不出误报,被拦会自动换百度蜘蛛身份重试;可生成死链清单供百度死链提交、从本地网站目录生成sitemap.xml与robots.txt,并通过百度普通收录…

来源:千问AI平台需要配置 API Key开发运维MIT

网站SEO检测·百度收录与推送·死链检查·站长工具

什么时候用

  • 用户说「我的站百度搜不到 / 百度不收录 / 帮我看看 SEO / 查一下死链」。
  • 新站上线、改版、加了新页面,想让百度快点知道。
  • 想要一份 sitemap.xml / robots.txt,或者要一份死链清单去百度提交。

前提:用户得能改自己网站的文件(或有人帮他改)。体检只能看出问题,修要改网页。第一次对话就把这句说清楚,别让用户以为跑完脚本排名就变了。

所有脚本都是 Python 标准库写的,不用装任何第三方包,要求 Python 3.8 以上(python --version 确认)。Windows / macOS / Linux 通用。本机访问某些网站需要代理时,每个脚本都可以加 --proxy http://127.0.0.1:端口,也会自动读取系统的 HTTPS_PROXY 环境变量。

四个脚本

1. 体检:scripts/audit.py

python {baseDir}/scripts/audit.py <网址或 sitemap 地址> [--max 200] [--out report.md] [--json report.json]
                                  [--deadlinks-out 死链.txt] [--only-page] [--no-links] [--timeout 20]
  • 先过首页门槛:用常见浏览器的身份打开首页。被拦(403/429/503、人机验证页、内容几乎为空)就自动换百度蜘蛛身份再试一次;报告第一段会写明「访问身份」。
  • 首页打不开就只出诊断:域名解析不到 / 超时 / 被防火墙拦截 / 内容几乎为空 / 证书问题,这时只输出一段诊断和下一步建议,不出完整报告(否则每一项都会误报)。此时退出码为 1,照诊断内容转述给用户即可,不要自己再编一份报告。
  • 首页:自动读 robots.txt 里写的 sitemap(没写就试 /sitemap.xml),逐页体检,最多 200 页。
  • sitemap 地址:展开后逐页体检。给内页:只体检那一页;首页只想看一页时加 --only-page
  • 站内死链:默认会检查抓到的页面里所有指向本站的链接(最多 300 个),打不开的列进报告。加 --deadlinks-out 死链.txt 会同时存一份一行一个地址的清单,可上传到百度搜索资源平台的「死链提交」。不想查就加 --no-links
  • 并发 5、单个请求等 20 秒;网站慢就加 --timeout 40

检查项、问题名和修法见 references/checklist.md

2. 百度推送(主推):scripts/baidu.py

python {baseDir}/scripts/baidu.py --site https://example.com --token <准入密钥> --sitemap --dry-run
python {baseDir}/scripts/baidu.py --site https://example.com --token <准入密钥> https://example.com/新页面
python {baseDir}/scripts/baidu.py --site https://example.com --token <准入密钥> --file 网址清单.txt
  • 准入密钥在「百度搜索资源平台 → 普通收录 → API 提交」页面,接口地址里 token= 后面那串;也可以放进环境变量 BAIDU_PUSH_TOKEN
  • --site 的写法要和百度后台验证的站点完全一致(http/https、有没有 www)。子域名各算一个站,密钥不通用。
  • 结果会说:成功推了几条、今天还能推几条(额度用完就等明天)、有几条因为不属于本站或格式不对被丢掉。
  • 一次最多推 2000 条。先用 --dry-run 试运行,用户确认后再去掉。

3. 生成 sitemap / robots:scripts/sitemap.py

python {baseDir}/scripts/sitemap.py <网站根目录> --origin https://example.com [--en-prefix en] [--out <输出目录>]
  • 扫目录下所有 .htmlindex.html 对应目录地址;带「禁止收录」标记的页面和 404/500 页自动排除。
  • --en-prefix en 时把 /foo/en/foo 配成中英一对,互相标注。
  • 不带 --out 直接打印;带 --out 写文件,已存在的不覆盖(要覆盖得加 --force,且要先问用户)。
  • 生成后提醒用户:上传到网站根目录,再到百度搜索资源平台「普通收录 → sitemap」提交。

4. IndexNow 推送(可选,必应等搜索引擎可选):scripts/indexnow.py

百度不支持 IndexNow。用户的站也想让必应等搜索引擎快点知道时才用它,国内站长不用也行。

python {baseDir}/scripts/indexnow.py --host example.com                        # 生成密钥并说明放在哪
python {baseDir}/scripts/indexnow.py --host example.com --key <密钥> --sitemap --dry-run
  • 没有 --key 就现场生成一个,让用户在站根放 <密钥>.txt,内容就是密钥本身;放好再带 --key 跑。
  • 推送前先检查密钥文件能不能打开、内容对不对,不对就不推。先 --dry-run
  • 返回 200/202 表示收到;403 密钥文件不对;422 网址和域名对不上;429 推太频繁,等几分钟,别反复重试。

报告怎么讲给用户

  1. 先说最严重的三件(报告里「先修这三件」那段)。一次只让用户面对三件事。
  2. 每件说三句:哪儿坏了 → 会有什么后果 → 改哪一行。别说「优化 TDK」「提升权重」这种黑话,要说「首页没有规范地址,百度可能把带参数的地址当成另一个页面;在 <head> 里加一行 <link rel="canonical" href="https://…/">」。
  3. 逐页表格是给用户对照用的,别在对话里逐行念。用户问某一页再展开。
  4. 严重度:严重=影响能不能被收录(打不开、死链、禁止收录、没规范地址、没手机适配、没标题、正文为空、robots 屏蔽);中等=影响百度结果长什么样(描述、标题长度、主标题、分享卡片);轻微=锦上添花。轻微项别排在前面讲。
  5. 如果报告写着「浏览器身份被拦、改用百度蜘蛛身份」,要提醒用户:真实访客也可能被防火墙拦,去后台看看规则。
  6. 修完再推送:先把 sitemap 弄对,再用百度推送。顺序反了等于把坏页面报给百度。
  7. 推送前必须让用户确认一次(推哪个站、多少条),默认先跑 --dry-run

边界(要对用户说清楚)

  • 只做站内技术项:不买外链、不交换友链、不发垃圾外链,也不提供这类服务。
  • 不做黑帽:不做隐藏文字、关键词堆砌、门页、对搜索引擎和用户显示不同内容。用户要求这类做法直接拒绝,并说明会被降权甚至清除收录。
  • 不承诺排名:收录不等于排名,推送不等于收录。推送只是告诉百度「这页变了」,收不收、何时收、排第几都由搜索引擎决定。任何「几天上首页」的说法都不要给。
  • 不代替用户改网站:脚本只读线上页面、只读本地目录;生成的文件默认不覆盖已有文件。改网页、放密钥文件、上传 sitemap 由用户自己做(或明确授权后再做)。
  • 百度准入密钥、IndexNow 密钥是用户的凭据:不要写进聊天以外的地方,不要提交进代码仓库,不要转给第三方。
  • 别人的网站可以体检,不能推送:推送要求你是站点所有者。
  • 换百度蜘蛛身份只为判断「百度能不能看到」,每次体检只在首页被拦时换一次。不是用户自己的网站被拦了,就如实说「对方网站限制访问」,不要想办法反复绕过去抓。
  • 只抓网页源代码、只跟随 sitemap,不执行脚本。纯前端渲染的站会显得「什么都没有」,要提醒用户:百度的抓取看到的也大致是这个样子。

典型流程

  1. audit.py <首页> → 首页打不开就转述诊断、停在这一步;能打开就念「先修这三件」。
  2. 用户改完 → 再跑一次确认修掉了。
  3. 有死链 → --deadlinks-out 死链.txt 导出,确认页面确实已删除后到百度「死链提交」上传。
  4. 需要 sitemap 就 sitemap.py <本地目录> 生成,用户上传到站根,并在 robots.txt 里加 Sitemap: 行。
  5. baidu.py --site … --dry-run → 确认 → 真推,留意「今天还能推几条」。
  6. 用户也关心必应等搜索引擎时,再按需用 indexnow.py