
静态站 SEO 与 GEO 入门:从 sitemap 到被 AI 引用,一次讲完
群里朋友做企业静态站,卡在「怎么让搜索引擎和 AI 都看见我」这一关。本喵把能落地的流程整成一份向导:地基八件套、三大平台提交、AI 爬虫怎么放行、发文自动化流水线、便宜又稳的部署选型,另附可复制提示词与十几条实测踩坑。
01 三条路,一块地基
先把三个听起来很像的词分开,不然做着做着就会互相打架。
| 说法 | 面对的是谁 | 要解决的问题 | 典型动作 |
|---|---|---|---|
| SEO 搜索引擎优化 | Google、百度、必应这类传统搜索 | 让人搜关键词时,你的页面出现在结果页里 | TDK、内链、sitemap、结构化数据、页面速度、外链 |
| AEO 答案引擎优化 | 结果页顶部的摘要块 / 问答块 | 让答案被抽走时,来源是你 | 直接回答式小标题、FAQ、表格、清晰定义 |
| GEO 生成式引擎优化 | 豆包、DeepSeek、Kimi、元宝、ChatGPT 这类会「答」的引擎 | AI 组织答案时,引用的是你的内容 | 可抓取、可摘录、带数据与出处、被多方提及 |
三者不是三个战场,而是一条流水线上的三段。本喵给朋友画过一张漏斗,他看完就不慌了——因为绝大部分人卡住的其实是最上面那一层,却天天在担心最下面那一层。
02 地基八件套:静态站的「可收录」最低装备
企业静态站的好处是结构简单,坏处是,没有后台替你兜底。WordPress 装个插件就有的东西,静态站得自己写进模板。下面八件,缺哪件都会在某个环节静默丢分。
| # | 件 | 放哪 / 长什么样 | 一行验收命令 |
|---|---|---|---|
| 1 | robots.txt | 站点根目录,文件名必须全小写 | curl -s https://你的域名/robots.txt |
| 2 | sitemap.xml | 根目录或子目录,列出全部页面绝对 URL | curl -s https://你的域名/sitemap.xml | grep -c '<loc>' |
| 3 | canonical | 每页 head 里,值必须等于本页自己的 URL | curl -s URL | grep -o 'rel="canonical"[^>]*' |
| 4 | TDK | title / description / keywords,每页各不相同 | 看长度:标题 30–60 字,描述 80–140 字 |
| 5 | 唯一 h1 + 语义标题 | h1 只许一个,正文用 h2/h3 分级,别拿加粗当标题 | curl -s URL | grep -c '<h1' 应为 1 |
| 6 | 内链 | 任意一页从首页 ≤3 跳可达 | 列表页与文章互相链,别留孤岛页 |
| 7 | 结构化数据 JSON-LD | 同页 head 或 body 里的 <script type="application/ld+json"> | Google 富媒体测试工具 / Schema 校验器 |
| 8 | favicon + 验证文件 | /favicon.ico 与平台给的验证文件 | curl -o /dev/null -w '%{http_code}' 域名/favicon.ico |
robots.txt:一份能直接抄的模板
它只干两件事:告诉爬虫哪些别抓、以及顺手把 sitemap 指给它。写错的代价很大,因为它是路径匹配、区分大小写的,一个多余的斜杠就能把整站关在门外。
# https://example.com/robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /*.json$
Disallow: /draft/
# AI 爬虫:检索型放行(带流量),训练型你自己决定(见第 4 章)
User-agent: OAI-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
# sitemap 必须写完整的绝对地址;跨域会被忽略
Sitemap: https://example.com/sitemap.xml
Sitemap: 后面只能跟绝对 URL,写成相对路径等于没写;③ 一行一个 User-agent 段,段与段之间用空行隔开,别把几条规则挤在一起。sitemap.xml:别手写,让脚本生成
手写的 sitemap 一定会腐坏:加了页面忘了加、改了时间忘了改 <lastmod>。而引擎对「时间戳明显不对」的做法相当粗暴,整个忽略 lastmod,等于你那次更新白推了。
- 格式 UTF-8;每个
<loc>必须是绝对地址;单文件不超过 5 万条 URL / 50MB(未压缩)。 <lastmod>取文件的真实修改时间,不要写死、不要全站填同一天。- 每个域名各有一份。A 域名的 sitemap 里写 B 域名的 URL,引擎直接当无效,本喵在自己的门面站上真踩过这一条。
- 生成器要幂等:连跑两次产物一模一样;生成完把线上文件拉回仓库,否则下次部署会用旧副本把新 sitemap 覆盖回去。
canonical 与「重复内容」
静态站最容易被判重复的三个来源:带 www 与不带 www、带斜杠与不带斜杠、以及站根下遗留的旧副本目录(版式改版、子域拆分时常留一份)。
- 统一到唯一形态,其余 301 过去;
canonical每页指向自己。 - 发现重复内容时,用 301 重定向而不是删成 404,删掉会连外链权重一起丢。
- nginx 上要把无斜杠与带斜杠两种写法都配上,否则会出现「先补斜杠、再跳目标」的两跳链条,白白浪费抓取预算。
结构化数据:企业站先做这三个就够
| 类型 | 用在哪 | 必备字段 |
|---|---|---|
Organization | 全站(首页或每页) | name、url、logo、sameAs(官网/公众号/工商主页) |
LocalBusiness | 有实体门店或本地服务 | name、address、telephone、openingHours、geo |
Article / FAQPage | 文章页 / 问答页 | headline、datePublished、author、mainEntityOfPage |
速度与移动端:三项硬指标
Google 的 Core Web Vitals 目前看三项,取值是真实访问的第 75 百分位,也就是要求 75% 的真实访问都得达标,不是你自己跑一次 Lighthouse 的分数好看就行。
| 指标 | 衡量什么 | 良好 | 需要改进 | 差 |
|---|---|---|---|---|
| LCP | 最大内容元素的加载时间 | ≤ 2.5 秒 | 2.5 – 4 秒 | > 4 秒 |
| INP | 交互到下一次绘制的响应(2024 年取代 FID) | ≤ 200 毫秒 | 200 – 500 毫秒 | > 500 毫秒 |
| CLS | 布局偏移(元素乱跳) | ≤ 0.1 | 0.1 – 0.25 | > 0.25 |
静态站通常天然占便宜,最容易砸在这几处:没压缩的大图(一上来就两三兆)、没设宽高的 img(导致 CLS 跳动)、字体阻塞渲染。图片给宽高、转 WebP、压到 200KB 以内,基本就把 LCP 和 CLS 救了。
03 三大平台提交:Google / 必应 / 百度
顺序永远一样,三家通用:先证明这个站是你的 → 再交 sitemap → 最后对重点页面点一次「请求编入索引」。跳过第一步,后面全是白忙。
3.1 先验证所有权:三种方式选一种
| 方式 | 怎么做 | 优点 | 坑 |
|---|---|---|---|
| DNS TXT 记录 | 平台给你一串值,加一条 TXT 解析 | 一次覆盖全部子域名,最省事 | 解析生效有延迟,平台可能还看不到 |
| HTML 文件 | 把验证文件丢到站点根目录 | 静态站最简单,一行 scp | 只对该域名有效;文件删了 = 掉线 |
| meta 标签 | 往首页 head 里塞一行 meta | 不用动服务器目录 | 改模板时容易丢,改完全站得复验 |
baidu_verify_*.html、BingSiteAuth.xml、Google 的验证 meta 一律不许删,删掉就等于从平台掉线,之前的提交记录与数据全部断档。把它们加进巡检,每天确认还在。3.2 Google Search Console
- 添加资源。推荐「网域」属性(用 DNS TXT 验证),它一次覆盖 http/https、带与不带 www 的全部版本;「网址前缀」属性只覆盖你写的那一种。
- 左侧「站点地图」→ 填
sitemap.xml→ 提交。提交成功只代表登记,别把它读成收录。 - 用「网址检查」逐个查重点页,需要时点「请求编入索引」。这个动作有配额,大约每天十次左右,具体以界面提示为准,省着用,先给真正重要的页面。
- 过几天回来看「网页索引编制」报告,里面会明说每类页面为什么没被收录:最常见的是「已抓取,尚未编入索引」(内容判定不值得收)和「已发现,尚未抓取」(排队中)。
3.3 必应 Webmaster Tools 与 IndexNow
必应是三家里最容易见效的一家:它有官方 URL 提交 API,每天每域名可提交 1 万条,配额按域名级计算(子域名不单独算),UTC 零点重置,提交历史里能看到最近 1000 条。而且可以直接从 Google Search Console 导入站点,省掉验证步骤。
比它更省心的是 IndexNow,一个由必应牵头的开放协议:你只需在站点根目录放一个 <密钥>.txt(文件内容就是密钥本身),以后每次发布只要往接口 POST 一次 URL 列表。
# 1) 生成密钥并在站点根放好 https://example.com/你的密钥.txt(内容=密钥)
# 2) 发布后推一次(单次最多 1 万条 URL)
curl -s -X POST https://api.indexnow.org/indexnow \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"host":"example.com","key":"你的密钥","keyLocation":"https://example.com/你的密钥.txt",
"urlList":["https://example.com/blog/new-post.html"]}'
一次推送,响应你的所有支持方:必应、Yandex、Naver、Seznam、Yep 等。清单里没有 Google,Google 从 2021 年评估到现在仍未采用,这不是你配置错了。
3.4 百度搜索资源平台
面向国内客户的站,这一家是必须做的。验证方式与另外两家类似(HTML 文件 / meta 标签 / CNAME,推荐前两种)。验证完进「普通收录」,它有三条通道,建议全用:
| 通道 | 怎么做 | 特点 |
|---|---|---|
| API 推送 | 后台拿 site 与 token,POST 到 http://data.zz.baidu.com/urls?site=…&token=…,body 为换行分隔的 URL | 最实时,配额按站点等级给;新站常见 10 条/天,提升后常见 100 条/天,以后台显示的当日剩余为准 |
| sitemap 提交 | 把 sitemap 地址填进后台 | 不限条数,适合全量铺底 |
| 手动提交 | 后台粘贴 URL | 适合临时补几页 |
# 百度 API 推送(把 token 放环境变量里,别写进脚本)
curl -s -H 'Content-Type:text/plain' \
--data-binary @urls.txt \
"http://data.zz.baidu.com/urls?site=https://example.com&token=$BAIDU_TOKEN"
# 返回 JSON 里的 success 是成功条数,remain 是当日剩余配额——每次都记下来
另外还有「快速收录」:需要单独申请,权限按站点质量评估,主要服务移动端页面。新站先别纠结它,把普通收录跑顺更有价值。百度也提供一段「自动推送 JS」,页面加载时自动上报当前 URL,挂进全站模板即可,成本极低。
baidu-site-verification 基本等于没在百度验证过,这经常就是「百度搜不到」的直接原因。3.5 三家的差异,一张表看完
| 必应 Bing | 百度 | ||
|---|---|---|---|
| 验证方式 | DNS TXT(推荐,覆盖全域)/ 文件 / meta | 文件 / meta / 可从 GSC 一键导入 | 文件 / meta / CNAME |
| sitemap | 支持,建议提交 | 支持 | 支持 |
| 主动推送 | 无公开 API(有非官方工具,不建议依赖) | URL 提交 API 1 万条/天·域名 + IndexNow | API 推送(配额按站点等级)+ 自动推送 JS |
| 单页加速 | 「请求编入索引」,约每天十次 | URL 提交即加速 | 手动提交 / 快速收录(需申请) |
| 反馈与诊断 | 最详细(覆盖状态、Google 认定的规范页、抓取时间) | 中等 | 中等,侧重移动端 |
| 适合谁 | 面向海外 / 英文站 / 技术站 | 面向海外 + 部分国内(必应国内份额不小) | 面向中国大陆客户 |
除这三家,还有 360、神马(移动端)、搜狗等站长平台。了解即可,优先级远低于前三家,别把有限的精力平摊给八个平台。
04 GEO:让 AI 愿意引用你
朋友问本喵最多的一句是:「AI 搜索起来了,我的站会不会更没人看?」本喵的答案是:入口变了,地基没变。AI 一样要靠爬虫去拿你的页面,只是它拿完还要「读」和「摘」。
4.1 先弄清楚:AI 是怎么拿到你的内容的
AI 爬虫不是一个整体,得分成两类看。这一条分对了,后面所有的放行策略都顺了。
| UA 名称 | 归属 | 干什么用 | 本喵的建议 |
|---|---|---|---|
GPTBot | OpenAI | 抓取内容用于模型训练 | 自己定(不给训练就拦) |
OAI-SearchBot | OpenAI | 为 ChatGPT 搜索建索引 | 放行,这是带流量的那个 |
ChatGPT-User | OpenAI | 用户点开链接时代表用户实时访问 | 放行 |
ClaudeBot / Claude-SearchBot | Anthropic | 训练 / 检索与引用 | 训练自定,检索型放行 |
PerplexityBot | Perplexity | 检索并带出处引用 | 放行 |
Google-Extended | 只控制 Gemini / Vertex 训练与内容使用 | 与 Googlebot 搜索收录无关,别混为一谈 | |
Applebot-Extended | Apple | Apple Intelligence 训练 | 自定 |
Bytespider | 字节跳动 | 豆包 / 抖音系的内容抓取 | 面向国内 AI 搜索的话,拦了就等于退出这一档 |
CCBot | Common Crawl | 公开语料库(很多模型的上游) | 自定 |
meta-externalagent | Meta | Meta AI 训练 | 自定 |
OAI-SearchBot 当成 GPTBot 一起拦了,拦掉的是流量,留下的才是训练;② 觉得这些爬虫会拖垮服务器,检索型爬虫的抓取频率很低,一天可能就来几次,跟它带来的流量比可以忽略;③ 在防火墙层面封爬虫 IP,将来想放开时你都想不起封在哪了。只在 robots.txt 里做控制,随时可改。
4.2 内容侧:AI 爱引用的写法
这一节有正经学术出处。2024 年 KDD 上那篇《GEO: Generative Engine Optimization》第一次把这个方向做成了可测量的研究:他们拿一批真实查询去测生成式引擎的回答,结论是内容侧的优化可以把来源在回答里的可见性提升最多约 40%;而且有效的方法因领域而异。
它测的九种写法里,收益最明显的是三类:标注引用来源、加统计数字、加引语;而关键词堆砌几乎没用,个别场景还往下掉。翻译成能照着做的六条:
| # | 写法 | 怎么落地 |
|---|---|---|
| 1 | 先给结论,再给论证 | 每个小标题下第一句就是完整答案(谁、是什么、多少钱、多久),别绕三段才说出来 |
| 2 | 带具体数字 | 「快」改「2.4 秒」、「便宜」改「每月 8 元」,并写清统计口径与时间 |
| 3 | 写清出处 | 官方文档、标准编号、发布日期、你自己实测的日期,AI 引用有出处的段落时更放心 |
| 4 | 能引用的话就写进去 | 把官方原话、客户原话用引号引出来,比转述更容易被摘 |
| 5 | 该用表格就用表格 | 对比、清单、参数一律上表,机器读表格比读散文稳,人也更爱看 |
| 6 | 把定义段独立出来 | 「X 是指……」单独成段,别埋在长句中间,方便被整段摘走 |
4.3 llms.txt:便宜的加分项,不是救命稻草
llms.txt 是 2024 年 9 月由 Answer.AI 的 Jeremy Howard 提出的一种约定:在站点根放一份 Markdown 文件,用一句话说明列出站内最重要的内容,方便 AI 直接读到「你有哪些好货」。
本喵得实话实说:它至今仍是社区约定,不是 W3C 或 IETF 标准,真正遵守它的系统很少。所以本喵的建议是顺手放一个(十分钟的事,白送),但别指望它带来收录。真正管用的控制机制还是 robots.txt。
# 公司名 / 站点名
> 一句话说清你是谁、做什么、服务于谁。
## 核心页面
- [产品介绍](https://example.com/product.html): 做什么、解决什么问题、价格区间
- [价格与方案](https://example.com/pricing.html): 各档位包含什么、怎么计费
- [联系我们](https://example.com/contact.html): 电话、地址、工作时间
## 内容 / 文档
- [使用手册](https://example.com/docs/): 从安装到进阶的完整说明
## 可选
- [关于我们](https://example.com/about.html): 公司背景与资质
4.4 怎么知道 AI 到底有没有引用你
这件事没有官方后台,只能自己动手测。方法很土但有效:拿 10 个真实客户会问的问题,去几个 AI 里问一遍,看答案里有没有提到你、有没有引你的站。
| 记录项 | 为什么要记 |
|---|---|
| 平台 / 日期 | 不同平台的检索源不一样,变化要分开看 |
| 提问原文 | 同一批问题每月重问一遍才有对比 |
| 是否提到品牌 / 是否给出链接 | 「提到」与「被引用」是两档,别混算 |
| 被引用的是哪一页 | 告诉你哪类内容真的被 AI 吃进去了 |
| 同题下 AI 引了谁 | 最值钱的一列:你的竞品做对了什么 |
测的平台按你的客户在哪就用哪几个:国内的豆包、DeepSeek、Kimi、腾讯元宝、通义千问;海外的 ChatGPT、Perplexity、Gemini、Copilot。别只看一次,生成式引擎有随机性,同一个问题问三次答案都可能不同,看的是趋势不是单次。
05 发文自动化流水线:一次配好,以后只管写
静态站最大的红利在这里。你不需要 CMS 的「发布」按钮,因为你的发布流程本身就是一串命令,而命令是可以自动跑的。
5.1 构建与部署:一段能用的 GitHub Actions
用 GitHub 存源码就顺便用它的 Actions,免费额度对静态站绰绰有余。下面这份是骨架,把部署那步换成你自己的方式(rsync 到服务器 / 传到对象存储 / Cloudflare Pages 的官方 Action 都行)。
name: build-and-deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 构建(生成页面 / sitemap.xml / rss.xml)
run: python3 build.py
- name: 部署到服务器
run: |
echo "$SSH_KEY" > key && chmod 600 key
rsync -avz --delete -e "ssh -i key -o StrictHostKeyChecking=no" \
./public/ "$USER@$HOST:/var/www/site/"
env:
SSH_KEY: ${{ secrets.SSH_KEY }}
USER: ${{ secrets.SSH_USER }}
HOST: ${{ secrets.SSH_HOST }}
- name: 通知必应与 Yandex(IndexNow)
run: |
curl -s -X POST https://api.indexnow.org/indexnow \
-H "Content-Type: application/json; charset=utf-8" \
-d "{\"host\":\"example.com\",\"key\":\"$INDEXNOW_KEY\",
\"urlList\":[\"https://example.com/\"]}"
env:
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY }}
- name: 通知百度(配额小,只推新增的几页)
run: python3 tools/push_baidu.py --status
env:
BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }}
rsync --delete 要小心,它会把线上多出来的文件删掉,第一次跑建议先加 --dry-run 看清楚要删什么。5.2 自动推送:把「推过了没」记在台账里
百度那边的配额是有限的(新站常见 10 条/天),所以推送天生是多日分批的长跑,必须有状态文件记着「哪些推过了」。这段脚本的关键不在推送,而在把两种「没得推」分开报:
pending = [u for u in all_urls if u not in state["pushed"]] # 真源 = 状态文件
room = min(BATCH, QUOTA - state["used_today"]) # 今日还能推几条
if room <= 0:
print(f"今日配额已用满({state['used_today']}/{QUOTA}),仍有 {len(pending)} 条待推")
# ↑ 明天还能推,不是干完了
elif not pending:
print("没有可推送的 URL(全部已推过)")
# ↑ 这才是真·完工
else:
todo, pending = pending[:room], pending[room:]
resp = push(todo) # POST 到 data.zz.baidu.com
state["pushed"] += todo
state["used_today"] += resp["success"]
save(state)
print(f"推送 {resp['success']} 条,剩余配额 {resp.get('remain')},队列还剩 {len(pending)} 条")
5.3 巡检:让静默故障自己叫出来
自动化最危险的状态不是「失败了」,而是「什么都没发生」,定时任务悄悄没跑、证书悄悄快到期、验证文件悄悄被删,页面上一切正常,你毫无察觉。所以每个自动化都要带一条「今天到底跑没跑」的判据:成功就静默,失败就写一条告警;连续几天没信号,等于出事。
| 巡检项 | 判据 | 多久跑一次 |
|---|---|---|
| 死链 | 列表页与站内链接逐条请求,非 200 即报 | 每周 |
| sitemap 覆盖率 | 三方对齐:sitemap 条数 == 实际页面数 == 列表页链接数 | 每次发文后 |
| TDK 完整性 | 全站扫描:标题/描述缺失或超出长度、canonical 不是自身 URL | 每月 |
| 验证文件与证书 | 验证文件仍 200;HTTPS 证书到期 ≥ 21 天 | 每天 |
| 站根卫生 | .bak、.old、临时文件不得公网可下载(应 404) | 每周 |
| AI 爬虫访问 | 从访问日志里看检索型爬虫有没有来、抓的是不是内容页 | 每月 |
5.4 三条自动化纪律
- 先手动跑通,再谈自动化。手工执行三次都稳的脚本,才值得挂上定时;反过来,第一次就上定时的脚本,出问题你连它哪一步走的都不知道。
- 配额小就别上定时器。只剩几条 URL、手动跑一次就清空的事,别顺手建个定时任务,建了就要维护,还得配告警,成本比手点高。
- 每个「成功」都要有回执。推送成功要看返回的条数与剩余配额;提交 sitemap 要看后台的读取时间;点了「请求编入索引」要看到界面确认。没回执的「已执行」不算数。
06 部署与 CDN 选型:先看备案这道门槛
朋友问「用 Cloudflare 还是腾讯云」,本喵的答案取决于一句更前置的话:你的客户在哪。而这句后面还卡着一道硬门槛,备案。
6.1 备案:这不是技术选择,是合规前提
- 服务器在中国大陆境内、面向公众提供网页服务的站点,域名必须做 ICP 备案;没备案,国内机房与国内 CDN 都不会给你接入。企业备案一般需要营业执照、法人或负责人信息、接入商(云厂商)代办,各省审核时间不同,通常以周计。
- 备案号按要求要展示在页脚,并链接到工信部备案系统。涉及在线交易、收费会员等经营性服务的,可能还需要额外的经营许可,具体按当地通信管理局的要求来。
- 用境外托管(Cloudflare、Vercel 等)可以免备案,代价是:大陆没有直连节点,访问要绕国际出口,晚高峰会抖,极端情况下还可能不稳定。对「给国内客户看的企业主站」来说,这个体验通常不能接受。
6.2 方案对照表
| 方案 | 免费 / 成本量级 | 国内访问 | 要备案吗 | 适合谁 |
|---|---|---|---|---|
| Cloudflare Pages (+ 免费 CDN / DNS) |
纯静态的免费额度基本用不完;一旦带 Functions(接口、SSR、鉴权)就进入每天 10 万请求、单请求 10ms CPU 的额度 | 走国际出口,不稳 | 不需要 | 英文站、外贸展示站、作品集、给海外客户看的站 |
| Vercel / Netlify / GitHub Pages | 都有免费档,额度对静态站够用 | 同上,不稳 | 不需要 | 演示站、开源项目页,不建议当企业主站 |
| 腾讯云 EdgeOne Pages | 有免费档,静态托管 + 全球加速一体 | 绑国内节点后快 | 国内加速需要 | 面向国内的企业静态站,想省运维 |
| 腾讯云 COS 静态托管 + CDN (阿里云 OSS + CDN 同理) |
对象存储有额度内的低价/免费空间,超出按量;CDN 按流量 GB 计费 | 快 | 需要 | 流量不大的展示型官网,性价比最高的一档 |
| 轻量应用服务器 + nginx | 包年套餐,月成本几十元量级 | 快 | 需要 | 除静态页外还要放接口、后台、表单的站(本喵自己的站就是这条路) |
6.3 上线必配的速度三件套
- 缓存头分开设:带指纹的静态资源(
style.a1b2c3.css)给长缓存Cache-Control: public, max-age=31536000, immutable;但 HTML、sitemap.xml、robots.txt 不要用 immutable,否则你更新了内容,用户和爬虫拿到的还是旧的。 - 图片压缩加现代格式:上传前压到 200KB 以内、宽度按展示尺寸给(正文图 1200px 足够),能上 WebP 就上;
<img>一定写width/height,这是 CLS 不跳的关键。 - HTTPS 与压缩全开:证书用免费自动续期方案(如 Let's Encrypt + certbot 自动续期),同时开启 HTTP/2 或 HTTP/3 与 gzip/brotli。别忘了把续期能力本身写进巡检,证书挂了,前面所有优化都归零。
07 提示词包:让 AI 帮你干这活
这一章是朋友点名要的。本喵给七个可直接复制的提示词,覆盖从体检到改写的全流程。用之前先记住四条规矩,不然 AI 会给你帮倒忙:
- 喂真输入。把真实的 HTML、robots、sitemap 片段贴给它,别只说「帮我优化一下网站」,那种输出一定是通用套话。
- 不许编数字、不许编来源。提示词里明确要求:拿不准的写「未验证」,绝不允许编造统计数字、引用文献或竞品数据。
- 要可核对的产出。要求它同时给「问题 → 判据 → 怎么验」,这样你能一条条复核,而不是照单全收。
- AI 生成的结构化数据,必须和页面可见内容逐字对得上。这一条是红线,写在提示词里、也写进你的验收清单。
7.1 站点可收录性体检
你是搜索引擎技术审计员。下面是某个静态站的 robots.txt、sitemap.xml 与一篇文章的 HTML 片段。
请检查并输出问题清单,按「必须先修 / 值得做 / 长期积累」三层排序:
1) 抓取层:robots 规则是否会误伤;sitemap 是否为绝对 URL、是否与页面清单一致;是否有 noindex 冲突。
2) 解析层:TDK 是否缺失、是否有重复、标题与描述长度是否合理(标题 30-60 字、描述 80-140 字);
canonical 是否等于本页 URL;h1 是否唯一;图片是否有 alt;是否有结构化数据。
3) 内容层:是否属于薄页、是否与站内其他页高度重复、是否有清晰的小标题层级。
输出格式:一张表,列 = 问题 / 严重级别 / 判据(怎么证明) / 修复动作(具体到文件或标签)。
凡是材料里看不出来的,写「需补充材料」,不要猜。不要编造任何数字或外部事实。
【robots.txt】
(粘贴)
【sitemap.xml 前 50 行】
(粘贴)
【页面 HTML】
(粘贴)
7.2 批量生成 TDK
你是中文 SEO 文案。下面是一批页面的正文摘要,请为每一页生成 TDK:
- title:30-60 字,把「用户会搜的词」放在前 15 字内,不要堆砌,不要用「最」「第一」这类绝对化用语。
- description:80-140 字,写清楚这页能给读者什么,像在推荐给朋友,不要写成关键词列表。
- keywords:3-6 个真实相关的词,从用户视角写,不要造词。
要求:
1) 每页 TDK 互不重复,风格统一;
2) 从摘要里找不到的信息,先在「待确认」里列出,不要编;
3) 输出表格:页码 | title | description | keywords | 待确认项。
【页面清单与摘要】
(粘贴)
7.3 生成结构化数据(JSON-LD)
你是 Schema.org 结构化数据专家。根据下面这家企业的真实信息,生成 JSON-LD:
- 首页:Organization(name / url / logo / sameAs)+ WebSite
- 若有实体门店:额外给 LocalBusiness(address / telephone / openingHours / geo)
- 文章页:Article(headline / datePublished / author / image / mainEntityOfPage)
硬性要求:
1) 只输出 JSON-LD 代码块,不要注释、不要解释性文字混在代码里;
2) 所有字段必须来自我给的资料,**不得虚构 logo 地址、电话、账号链接**;缺的字段直接省略,并在代码块外用一行列出「缺哪些字段、去哪补」;
3) 数据必须与页面可见内容一致(页面上看不到的,不许写进结构化数据)。
【企业信息】
公司名:… 官网:… Logo:… 公众号/社媒:…
门店地址:… 电话:… 营业时间:…
文章标题:… 发布日:… 作者:… 配图:…
7.4 把段落改写成人机都爱引用的「答案块」
你是面向生成式引擎的内容编辑。把下面这段说明改写成一个「答案块」,目标是:用户扫一眼就懂,AI 摘录时不容易摘错。
要求:
1) 第一句直接给结论(谁 / 是什么 / 多少钱 / 多久),不要铺垫;
2) 保留原有的全部事实与数字,一个都不许改、不许加——原文没写的数字,不要补;
3) 把对比、参数、条件改写成 Markdown 表格;
4) 把「X 是指……」这类定义独立成段;
5) 删掉形容词堆砌、删掉「众所周知」这类填充词;
6) 输出:改写后的正文 + 一段「我改了什么」的说明(逐条),方便我复核。
【原文】
(粘贴)
7.5 生成 llms.txt
根据下面的站点页面清单,生成一份 llms.txt(Markdown 格式,放在站点根目录):
- 第一行:# 公司名 / 站点名
- 第二行:> 一句话说明你是谁、做什么、服务谁(控制在一行内)
- 之后按「核心页面 / 内容与文档 / 可选」分组,每条格式: - [页面标题](绝对 URL): 一句话说明这页讲什么
- 只收录真正重要的页面(建议 5-15 条),不要把页脚、隐私政策这类塞进来撑数量
- 输出纯文本,不要额外解释
7.6 内链建议
下面是一个站点的页面清单(标题 + 摘要)。请规划内链:
1) 找出「孤岛页」(没有任何站内页面链向它),给出最少需要新增的链接数;
2) 给出具体的链接建议:从哪一页、在什么上下文、链到哪一页、锚文本写什么(锚文本必须是自然的句子片段,不许写「点击这里」「了解更多」);
3) 每篇文章至少链出 2 条站内链接、至少被 1 条链入;
4) 不要为了凑数链无关内容——不相关就明确写「无合适内链」。
输出表格:源页面 | 目标页面 | 建议锚文本 | 理由(一句话)。
7.7 生成巡检脚本
用 Python 写一个静态站巡检脚本(标准库优先,不要引第三方依赖),检查以下几项并输出报告:
1) sitemap 覆盖率:sitemap 里的 URL 数 vs 本地页面文件数 vs 列表页链接数,三者不一致要指出差在哪;
2) 死链:遍历站点内链,逐个请求,非 200 的列出来;
3) TDK 完整性:title / description 缺失或长度越界、canonical 不等于本页 URL 的页面;
4) 站根卫生:.bak / .old / .tmp 文件是否存在且公网可访问;
5) 证书到期天数。
要求:全绿时静默退出(退出码 0),有问题时输出问题清单并以非 0 退出;脚本要幂等、可重复跑。
另外给我一个「怎么故意制造一个错误来验证这个脚本真的会报警」的自测方法。
08 实测踩坑清单:十五条
这一章是本喵自己站上真踩过的,按「症状 → 根因 → 修法」写。你不可能全踩一遍,但大概率会中其中三到五条。
| # | 症状 | 根因 | 修法 |
|---|---|---|---|
| 1 | 日志里 Googlebot 访问量惊人 | 日志里的 Googlebot 大半是伪造 UA 的扫描器(真 Googlebot 只来自固定 IP 段) | 先按 IP 段验真再统计;请求 /config.env、各类凭据文件路径的一律是扫描器 |
| 2 | 用 site: 查收录,结果忽多忽少 | site: 在多个引擎上不可靠,无头请求还会撞上安全验证页 | 改用站长平台的官方数据(GSC 的「网页索引编制」、百度的索引量) |
| 3 | 子域名一直是「未收录」 | 该子域用的是另一个域的 robots/sitemap,跨域 sitemap 被引擎忽略 | 每个域名配自己的 robots.txt 与 sitemap,别共用 |
| 4 | 改了内容,引擎像没发现 | <lastmod> 是旧的或全站同一天,引擎干脆整个忽略它 | sitemap 由脚本生成、lastmod 取文件真实修改时间;生成完把线上文件拉回仓库,否则下次部署会用旧副本覆盖回去 |
| 5 | 站根躺着一堆 .bak-2026xxxx | 模板复制法的副产物,公网可下载 | 造成重复内容与信息暴露:先备份回本地,再删线上,然后逐条 curl 断言 404 |
| 6 | 栏目目录 URL 打开是 403 | 目录没有 index 页,且服务器关了目录列表 | 把 /栏目/ 精确 301 到对应的列表页 |
| 7 | GSC 报「重复网页,未选定规范网页」 | 站点根下留着一份旧位置的整份副本 | 301 到正确域名(不要删成 404),且无斜杠与带斜杠两种写法都配,避免两跳 |
| 8 | 每个页面都在偷偷 404 一次 | 浏览器会自动请求 /favicon.ico,该请求由浏览器进程发起,不在页面的 Network 里,很容易漏查 | 放一个 favicon.ico;改完用全新的无头实例重扫(缓存过的失败不会再报,旧的会给你假绿) |
| 9 | 页面能打开,但爬虫/预览看到的是空壳 | 纯前端渲染(SPA),服务端只返回骨架 | 首屏内容改为服务端渲染或预渲染;curl 一下首页看有没有正文,这是最快的判据 |
| 10 | 同一个账号,某些诊断功能「没有权限」 | 平台的权限是逐属性给的:「网址前缀」是所有者,「网域」属性可能没有 | 去资源列表核对每个属性各自的权限级别,别当成脚本坏了 |
| 11 | 推送脚本说「没有新 URL」,可明明还剩一堆没推 | 当日配额用满被错报成「全部推完」 | 两种「没得推」分开报:配额满要说还剩多少条、明天继续 |
| 12 | 提交了 sitemap,一直没动静 | 「提交成功」只是登记;引擎还要排期抓取,而且不保证收录 | 看后台的「上次读取时间」与「已发现/已抓取」状态,别反复重交 |
| 13 | 新站上线两周,一个内页都没进搜索结果 | 新域名、零外链、零品牌提及,这是正常现象,不是配置问题 | 别猛改技术;把精力放到内容与外链上,或者对重要页手动请求编入索引 |
| 14 | 关键词密度调了很久,排名没动 | 堆砌关键词的收益极低(GEO 那篇论文测下来甚至是负的) | 改结构与小标题,用表格与直接回答式段落替代堆词 |
| 15 | 某个 AI 爬虫被拦了,想放开却找不到在哪拦的 | 当初在防火墙/安全组层面封了 IP | 控制只写在 robots.txt 里,随时可改、可复验 |
09 30 / 60 / 90 天节奏与一页速查表
最后给一条能照着走的时间线。本喵的原则是:先把当天能修完的技术项修完,再把长周期的内容与外链交给时间,反过来做,你会一直在焦虑里改来改去。
| 阶段 | 做什么 | 完成判据 |
|---|---|---|
| 第 1 周 地基 |
备案(如需)→ 部署 + HTTPS 上齐;robots / sitemap / TDK / canonical / 唯一 h1 / favicon / 结构化数据;三家平台完成验证并提交 sitemap | 体检脚本全绿;三家后台都能看到「sitemap 已提交/已读取」 |
| 第 2–4 周 结构 |
标题层级整理、内链补孤岛、把关键页改成「结论先行 + 表格 + 来源」的答案块;确定 AI 爬虫放行策略;顺手放一份 llms.txt;给两三个重点页请求编入索引 | 任意页从首页 ≤3 跳可达;列表页无死链;AI 问答复测有 1 条以上提到你的品牌 |
| 第 2–3 月 自动化与复盘 |
上 CI 构建 + 自动部署 + IndexNow/百度推送 + 每周巡检;每月做一次 AI 可见性记录;看后台真实数据(哪些词有展现、哪些页被收录) | 发一篇文章不需要手工做任何一步;巡检能自己报出问题而不是沉默 |
| 长期 | 持续产出有信息量的内容、积累外链与品牌提及(媒体、行业目录、合作方互链) | 这不是技术工作,是时间与信誉的积累,别指望哪一次优化能跳过它 |
一页速查表
| 要查什么 | 怎么查 |
|---|---|
| robots 有没有生效 | curl -s https://域名/robots.txt |
| sitemap 条数与入口 | curl -s 域名/sitemap.xml | grep -c '<loc>' |
| canonical 是否自洽 | curl -s 页面URL | grep -o 'rel="canonical"[^>]*' |
| h1 是否唯一 | curl -s 页面URL | grep -c '<h1' → 必须是 1 |
| favicon 是否在 | curl -o /dev/null -w '%{http_code}' 域名/favicon.ico → 200 |
| 结构化数据是否正确 | Google 富媒体搜索结果测试 / Schema 校验器 |
| 页面速度三项 | PageSpeed Insights(看真实用户数据的第 75 百分位) |
| 是否被 Google 收录 | GSC →「网址检查」看覆盖状态与抓取时间 |
| 是否被必应收录 | 必应 Webmaster Tools → URL 提交 / 索引报告 |
| 是否被百度收录 | 百度搜索资源平台 → 索引量 / 抓取诊断 |
| AI 有没有引用你 | 拿 10 个真实问题问各家 AI,每月记录一次 |
写到这儿,本喵最想留下的其实是一句心法:SEO 与 GEO 不是两件事,是同一条流水线的上下两段。你先把「能被抓到、能被读懂」做扎实,剩下那些 AI 时代的技巧才有地方落。地基没打好就去追新概念,本喵见过太多,花三个月研究 GEO,结果 robots.txt 里把自己整站屏蔽了。
有进展或者卡住了,欢迎来 经验分享栏目翻一翻本喵别的笔记;想看本喵怎么用 AI 把这类杂活自动化,可以读《AI Agent 驾驭工程全解》那篇。也欢迎直接来门口找本喵(首页)。
来源:Google Search Console / 必应 Webmaster Tools / IndexNow 官方文档、百度搜索资源平台帮助中心、Cloudflare 与腾讯云官方产品页、Google Search Central 结构化数据与 Core Web Vitals 文档、论文《GEO: Generative Engine Optimization》(KDD 2024, arXiv:2311.09735);坑位部分含本喵自建站的实测记录(2026-09 至 2026-10)。
核对日期:2026-10-02。各家免费额度与计费口径会变,动手前请以官方页面为准;本喵没做跨站对照实验,个人站经验未必适用你的业务规模。