SEO

30 个不重样的城市页,从一张 30×5 的表格来(Claude,零模板)

30 个不重样的城市页,从一张 30×5 的表格来(Claude,零模板)
目录

绝大多数"AI 城市页"工作流在 Claude 被打开之前就已经失败了。错就错在:你让模型只看到一个城市名和一个模板,让它自己去"想"整页内容。结果就是 30 个城市页听起来都是同一篇博文,只是把城市名换了一下。Google 读完,标成"瘦内容升级版",你又回到原点。

真正能跑通的工作流是反过来的:电子表格才是真正的交付物,Claude 只是打字员。 去年春天我给一个区域 HVAC(Heating, Ventilation, and Air Conditioning,暖通空调)客户搭了一套 30 行 × 5 列的网格。每个格子里已经填好了城市级数据——全是根据本地调研由我自己写进去的。Claude 的活儿是:把这些数据翻成通顺的散文,一次一行,不用 spintax(一种把同义词随机替换的伪原创手法),不用模板变量,不许凭空编地标。最后 30 个页面读起来就像当地文案真的了解这个城市——某种意义上他确实了解:在打开 AI 之前的我。

30 × 5 网格长什么样

五个版块,一版一列,每个城市占一行:

版块 这一列到底装什么
开头段(Intro) 一段话:自我介绍、提供什么服务、为什么专做这个城市。约 120 词。
服务覆盖的街区 4–6 个具名街区,每个一句话说明覆盖理由(车程、技术员驻地等)。
价格语境 2–3 句关于本地服务成本的事实——水电费率、地区建筑规范、当地用工惯例。不给具体报价。
FAQ 5 个问题,每个 2–3 句回答。问题必须确实是本地用户在问的(我们挖了 GBP 的 Q&A 和 Reddit 城市子版)。
本地地标 3–5 个地标,技术员上门时真的会经过。作为路线描述用,不是凑字数。

整张表是 Google Sheet。表头固定。行序就是 URL 顺序(/service-area/arlington-va//service-area/fairfax-va/ ……)。每个单元格都是纯文本,句首大写,不要 markdown。总格数 150 格。其中 130 格是我手填的。 Claude 只接到了开头段那一列。

这个比例才是关键。很多人反着来——让 AI 干 95%——然后纳闷为什么页面读起来像 AI。模型做 95% 的思考,你搭的是内容农场。模型做 30%,你搭的是一个编辑。

第一步:一列一列地把网格填出来

先填服务覆盖的街区。这是最重调研的一列,也是 Claude 最不擅长瞎编的一列。素材从这些地方挖:Zillow 街区页、维基百科的城市条目、Google Maps 的"neighborhood"图层,外加你的开单系统数据——这才是真正的金矿。如果你在那个城市接过活儿,你的 CRM(Customer Relationship Management,客户关系管理系统)里就有你技工自己填的街区名。街区这一列必须是"真的",不能只是"听起来像"。

接着是价格语境。对 HVAC 来说就是:冬天多冷、当地电力公司冬季费率多少、城市执行的是 IECC(国际节能规范)C 还是 D,外加一句关于用工情况的描述。换成律所就完全不一样了——法院立案费、典型 retainer(预付律师费)区间、辖区特有的程序。关键是这一格装的是你核实过的事实,不是印象。

再然后是FAQ。最省力的素材来源是这个城市头部 3 家同行 Google Business Profile(GBP)上的"问答"板块——那就是真实客户问过的问题。再配合 Reddit 的城市子版,按"过去一年 Top"排序筛一遍服务类问题。挑出被问最多的 5 个,每个写 2–3 句答案。不要让 Claude 写答案——答案部分是用户会引用、转述的部分。

接着是本地地标。3–5 个你的技工上门时会经过的地方。机场、体育场、大型医院、市中心广场、一个具体的高速出口。这一列是最好填的,但对"读起来像本地"的贡献最大。"我们的服务范围覆盖 [具体体育场] 周边,以及 [具名街区] 桥对岸"——读着像真。"我们自豪地为 [城市] 及周边地区提供服务"——读着不像。

最后是开头段。你交给 Claude 的那一列。但即便是这一列,你也不是把"城市名"丢给它。你把另外四列都丢给它。模型读了街区、价格语境、FAQ、地标之后写出来的开头段,不可能和别的行一样——因为输入就不同。

第二步:把每一行串起来的 Prompt

每行开一个新对话跑这个 Prompt。是的,每行。30 行全塞一个对话,模型的上下文会污染,写出来的开头段会越来越像。开个新对话慢一点,但出来的页面是真的不一样。

你是一名本地文案,正在写一个服务区域页的开头段。
语气:自信、直接、没有营销黑话。约 120 词。

下面给你这个城市的四个事实,已经由人工核实:

服务覆盖的街区:[粘贴 Neighborhoods 单元格]
本地价格/服务语境:[粘贴 Pricing 单元格]
本地客户常问的 FAQ:[粘贴 FAQs 单元格]
我们工作经过的地标:[粘贴 Landmarks 单元格]

任务:写一个段落,要求 (1) 提到一次城市名,(2) 提到其中 2 个
街区名,(3) 引用 1 个地标或路线描述,(4) 说明这个城市的客户
为什么应该选我们。不要编造事实。如果某个事实不在上面四格里,
就不要写。输出纯散文,不要标题,不要项目符号。

Prompt 里嵌了三条规则,缺一不可:

  • "不要编造事实。" 这句是干掉幻觉(hallucination)的关键。不写它,Claude 会很高兴地编一个不存在的街区、引用一个 2019 年就关掉的地标、抄一个外州的电价。
  • "提到 2 个街区和 1 个地标。" 强迫这一段就是关于这一行的。不加这个约束,模型会写一段通用 HVAC 开头,把末尾的"Arlington"换成"Fairfax"就交差。
  • "纯散文,不要标题,不要项目符号。" 开头段就是一段话。模型一旦开始加 ## 标题,网格结构就已经破了。

第三步:把网格丢进 CMS

到这里,30 行 × 5 列已经全填好、风格统一。剩下的活儿全是机械动作:开发(或者 Webflow CMS,或者 Notion-to-Webflow 的 Zap)把每一行循环套进页面模板。5 列对应模板的 5 个槽位。整个站点里唯一的"AI 产出"就是开头段这一列,而且你已经 QA 过了。

这一步是绝大多数"AI 城市页"文章跳过的,也正是这套系统能真正出货的原因。这个网格是确定性的(deterministic)。给定同样的 4 个输入格,Prompt 10 次里有 9 次会产出能用的开头段。第 31 行、第 100 行、第 500 行,你的开发都不用动脑子。

那个 HVAC 客户的项目,总共花了大概 16 小时:3 小时调研、90 分钟跑模型并改 30 个开头段、4 小时开发把网格接进 Webflow CMS。不是我发过的最便宜的城市页,但是最干净的一批。

第四步:发布前 QA

两项检查,都是人工的,都不能省。

1. 抽三行左右对比读。 把 Arlington、Fairfax、Alexandria 三个开头段分别开三个 tab 打开。如果三段都以"At [Company], we are proud to serve..."开头——三段全砍,用更严格的 Prompt 重跑。模板填充的味道永远首先出现在第一句。

2. 把每一条地标和街区都过一遍事实。 打开 Google Maps,30 行全查。点街区:在地图上是不是真的有这个名字?点地标:还在不在?我曾经发过一个城市页,引用了一个"近期翻新"的社区中心,那地方 2017 年就拆了。调研那一列本来能拦住;当时赶工没拦住。那一页从来没排上。

什么时候这个工作流反而不该用

它不是锤子。三种情况我不会上:

  • 没法在桌面上做调研的城市。 如果你从没进过那个市场,CRM 里也没数据,四个输入列全靠猜,那开头段也就是猜的。30 页别发猜的。
  • 每个城市月搜量 <5,000 的市场。 30 页的投入产出比会垮,长尾量撑不起这个工作量。5 页的项目手写就行。
  • 头部 3 个结果是 2,000+ 词、还带图带视频带嵌入地图的硬骨头本地 SERP。 30×5 网格出来的是 600 词级别的页。这种市场你需要更重的模板或更长的开头列,不是同样五个版块。

收个尾

30×5 电子表格不是 AI 技巧。它是生产纪律,只是恰好把 AI 用到了最小、最受约束的那一块。护城河是那四列 Claude 编不出来的调研,不是它写的那一列。网格搭得好,你可以把 Claude 换成初级文案、菲律宾 freelancer、市场实习生——出来的页差不多。网格搭得烂,换个更强的模型也救不回来。

这是我做所有"AI 内容"项目时用的同一道题:如果模型明天没了,纯粹靠人能不能产出同样的输出? 如果不能,你搭的不是系统,是依赖。