本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。 2026 年 2 月至 4 月期间,我将 7 个程序化 SEO 模板上线到 TanStack Ship 参考应用,最终收录了 1184 个页面。在同样的 60 天窗口内,手写博客产出 14 篇,收录 14 篇。收录页面之比是 85:1,模板胜出;模板的已收录/已发出比率是 92%,手写是 100%。本文包含数据集、7 个附可运行代码的模板,以及 5 个程序化 SEO 不适用的场景。
已验证来源:Google Search Central — Sitemap 文档 · Google Search Central — Indexing API · Google Search Central — Helpful Content 指南 · Google Search Central — 结构化数据 · Schema.org ItemList · TanStack Start 文档 · Cloudflare Workers 文档 · Cloudflare D1 文档 · robots.txt 规范 最后更新:2026-05-06 · 更新日志
TL;DR: 7 个程序化 SEO 模板在 60 天内发出 1184 个 URL;1089 个被收录(92%)。手写文章:发出 14 个,收录 14 个(100%)。数据:程序化 SEO 用同样的写作预算,收获约 85 倍的收录页面,同时承担 8 个百分点的收录率损失作为薄内容风险。7 个模板分别是:
[产品] vs [产品]、[产品] 替代方案、[产品] 定价、[产品] 评测、[用例] 适用 [行业]、[功能] 工具、[集成] 适用于 [产品]。TanStack Ship 将这 7 个模板作为默认路由上线。
数据集:60 天、7 个模板、1184 个 URL
数据集来源:tanstackship.com,时间范围 2026-02-05 至 2026-04-05。两条内容线并行运行:手写博客(覆盖长尾信息类查询)和程序化 SEO 路由(7 个模板,针对交易类和对比类查询)。
| 模板 | URL 数量 | 已收录 | 收录率 | 平均排名 | CTR→演示转化 |
|---|---|---|---|---|---|
[产品] vs [产品] | 412 | 388 | 94% | 8.4 | 4.1% |
[产品] 替代方案 | 188 | 174 | 93% | 9.1 | 3.7% |
[产品] 定价 | 96 | 91 | 95% | 6.8 | 9.2% |
[产品] 评测 | 124 | 109 | 88% | 11.2 | 2.3% |
[用例] 适用 [行业] | 142 | 134 | 94% | 10.6 | 2.9% |
[功能] 工具 | 87 | 79 | 91% | 12.4 | 1.8% |
[集成] 适用于 [产品] | 135 | 114 | 84% | 13.7 | 1.4% |
| 模板总计 | 1184 | 1089 | 92% | — | — |
| 手写博客 | 14 | 14 | 100% | 4.7 | 0.4% |
两个关键发现。收录率并不均衡:[产品] 定价 达到 95%,因为 SERP 被供应商页面主导;[集成] 适用于 [产品] 只有 84%,因为 SERP 被合作伙伴页面主导。模板质量比数量更重要。
CTR→演示转化列展示的是转化数据。定价页面转化率 9.2%,对比页面 3.7%–4.1%,评测页面 2.3%,信息类模板 1.4%–2.9%。手写博客是 0.4%——这是信息类内容的合理数字。程序化 SEO 单页转化率是手写的 3.5 倍。BOFU mapping 模型详见 SaaS SEO 关键词策略文章。
2026 年 SaaS 适用的 7 个模板
这份清单限定在 SERP 被供应商或社区页面主导(非 Reddit 或单一权威)、且模板有可防御数据集的场景。
[产品] vs [产品] —— 最强模板
数据集:你的产品 + 竞品,每个都包含结构化字段(price、techStack、hosting、auth、billing、lastUpdated)。渲染带 Product + AggregateRating + Review + FAQPage schema 的对比表格。TanStack Ship 在 src/routes/compare/$slug.tsx 上线此模板。
[产品] 替代方案 —— 第二强
数据集:你的产品的替代品,每个包含一段诚实描述其优势的文字。渲染时使用 ItemList + Product schema。注意避开一个陷阱——如果某个替代品确实更好,就如实说出来。信任比转化更重要。
[产品] 定价 —— 转化率最高
数据集:你的定价档位,可选地加入竞品定价。渲染时使用 Product + Offer + AggregateRating + FAQPage schema。风险:如果与 /pricing 除关键词外完全相同,Google 会视为重复内容。解决方法:回答一个具体的定价问题。
[产品] 评测 —— 风险最高
数据集:第三方评测片段(UGC)。渲染时使用 Product + Review + AggregateRating schema。风险在于片段过短时内容单薄;解决方法:要求每个片段至少 80 词。88% 的收录率就是这个风险的成本。
[用例] 适用 [行业] —— 覆盖面最广
数据集:行业 × 用例。渲染时使用 Article + FAQPage schema。风险在于矩阵过大但每格内容过短时内容单薄。
[功能] 工具 —— 转化率最低
数据集:按功能分类的工具列表。渲染时使用 ItemList schema。转化率低是因为用户意图是信息类的。
[集成] 适用于 [产品] —— 风险最高
数据集:你的产品支持的集成。渲染时使用 Product + HowTo schema。风险:合作伙伴自己的页面会排名更靠前。84% 的收录率就是这个风险的成本。
模板引擎:一个数据集、一个路由、一个 sitemap 条目
所有 7 个模板遵循相同的模式。类型化数据集存放在 Cloudflare D1,TanStack Start 中的文件路由负责渲染页面,sitemap 发射器写入 URL。路由文件就是模板;数据集就是内容。手动写 412 篇对比文章需要 412 天;每篇对比填充一行数据库记录只需要 412 分钟。
以下是 [产品] vs [产品] 模板的数据集加载器:
// src/data/comparison-dataset.ts
import { z } from "zod";
export const ComparisonRowSchema = z.object({
slug: z.string(),
yourProduct: z.string(),
theirProduct: z.string(),
yourPrice: z.object({ starter: z.number(), pro: z.number(), enterprise: z.number().nullable() }),
theirPrice: z.object({ starter: z.number(), pro: z.number(), enterprise: z.number().nullable() }),
yourHosting: z.array(z.string()),
theirHosting: z.array(z.string()),
verdict: z.enum(["ship-wins", "they-win", "tie"]),
lastUpdated: z.string(),
});
export type ComparisonRow = z.infer<typeof ComparisonRowSchema>;
export async function loadComparisonDataset(): Promise<ComparisonRow[]> {
const rows = await db.prepare("SELECT * FROM comparison_dataset ORDER BY lastUpdated DESC").all();
return rows.results.map((r) => ComparisonRowSchema.parse(r));
}
路由为每行数据集渲染一页。路由文件就是模板;数据集就是内容。verdict 字段是信任信号——一个页面如果写明"这个场景他们确实更好",会赢得长期排名。TanStack Ship 的对比页面会明确指出竞品真正胜出的三个场景——参见 TanStack Ship vs Next-forge 对比 和 TanStack Ship vs Supastarter 对比。
大规模索引:Sitemap、robots.txt 和 Indexing API
三个机制共同决定你的 1184 个 URL 是否被索引。第一,sitemap 必须分割成每个文件最多 5000 个 URL;sitemaps.org 协议 规定每个文件最多 50000 个 URL。TanStack Ship 输出一个 sitemap-index.xml 加上每个模板的 sitemap-{模板}.xml 文件。
// src/routes/sitemap[.]xml.ts
import { createServerFileRoute } from "@tanstack/react-start/server";
const TEMPLATE_PATHS = [
{ prefix: "compare", base: "https://tanstackship.com" },
{ prefix: "alternatives", base: "https://tanstackship.com" },
{ prefix: "reviews", base: "https://tanstackship.com" },
{ prefix: "use-cases", base: "https://tanstackship.com" },
{ prefix: "tools", base: "https://tanstackship.com" },
{ prefix: "integrations", base: "https://tanstackship.com" },
];
export const ServerRoute = createServerFileRoute("/sitemap-index.xml").methods({
async GET() {
const lastmod = new Date().toISOString();
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${TEMPLATE_PATHS.map((t) => `<sitemap><loc>${t.base}/${t.prefix}-sitemap.xml</loc><lastmod>${lastmod}</lastmod></sitemap>`).join("\n")}
</sitemapindex>`;
return new Response(xml, { headers: { "Content-Type": "application/xml" } });
},
});
第二,robots.txt 必须显式允许程序化路径。默认的 Disallow: / 会屏蔽一切——这是程序化路由永远不被索引的最常见原因。TanStack Ship 的 robots.txt 允许 /compare/*、/pricing/*、/reviews/*、/use-cases/*、/tools/*、/integrations/*、/alternatives/*,并屏蔽 /admin/*、/api/*、/internal/*。
第三,对于时间敏感的页面,使用 Indexing API 请求重新爬取。该 API 的配额是每天 200 个 URL_UPDATED 和 URL_DELETED 请求。对于每月更新的页面,sitemap 的 lastmod 足够。
92% 的收录率来自三个机制协同工作。跳过任何一个,收录率就会降到 70% 以下。
程序化 SEO 不适用的场景
程序化 SEO 是 SaaS 的力量倍增器,而非判断目标查询的替代品。以下五个场景不适用。
无竞品集的单产品 SaaS
如果你的 SaaS 真的没有竞品(全新品类),[产品] vs [产品] 和 [产品] 替代方案 模板没有数据集。[用例] 适用 [行业] 和 [功能] 工具 模板仍然有效。先建用例模板,跳过对比类模板。
受监管行业
金融科技、医疗科技和教育科技领域,对比类查询的 SERP 被合规聚合器和认证页面主导。[产品] 评测 和 [产品] vs [产品] 模板的收录率低于 60%。改用带 Certification + Organization schema 的 [产品] 合规 模板代替。
单查询搜索量 < 1000 的细分 B2B SaaS
如果单查询量 < 100,程序化页面的单次获客成本超过 LTV。索引预算最好花在针对长尾的手写文章上。
快新闻或快速迭代内容
程序化页面最适用于底层数据稳定的场景。对于差异化在于"我们每周上线功能"的 SaaS,手写博客是更好的渠道,因为 lastmod 跟不上更新速度。
薄数据集来源
程序化页面收录率低于 70% 会触发全站 helpful-content 信号。如果数据集是从公开来源抓取而没有经过编辑整理,收录会崩溃。
每个模板的最小可行数据集
数据集质量是影响收录率的最大杠杆。下表列出每个模板的最小可行字段数,基于 92% / 88% / 84% 的收录率数据校准。
| 模板 | 最少行数 | 最少字段数 | 每页最少词数 |
|---|---|---|---|
[产品] vs [产品] | 50 | 8 | 600 |
[产品] 替代方案 | 30 | 5 | 400 |
[产品] 定价 | 10 | 6 | 350 |
[产品] 评测 | 40 | 4 | 500 |
[用例] 适用 [行业] | 100 | 3 | 500 |
[功能] 工具 | 50 | 4 | 450 |
[集成] 适用于 [产品] | 60 | 5 | 400 |
行数或字段数低于最小值的模板无法通过收录门槛。TanStack Ship 提供 CSV 转 D1 加载器,强制执行这些最小值。数据集是内容质量的唯一真实来源。
如何起步
机械步骤如下:
- 选一个模板。不要从全部 7 个开始。
- 构建数据集。从 30 行开始;发出 URL 前扩展到 100 行。
- 上线文件路由。TanStack Start 的文件路由使它成为一个 50 行文件。
- 为每行发出带
lastmod的 sitemap。 - 在 Google Search Console 提交 sitemap。
- 等待 14 天。在 URL Inspection 中检查收录率。
- 如果收录率 > 80%,扩展。如果 < 70%,回到步骤 2。
- 添加下一个模板。重复。
更广泛的 SEO 基础——BOFU 路由、schema 发射、sitemap 优先级——见 TanStack Ship 功能页面。BOFU 关键词映射模型见 SaaS SEO 关键词策略文章。
FAQ
什么是 SaaS 的程序化 SEO?
SaaS 的程序化 SEO 是指通过结构化数据集和模板生成大量搜索优化页面,而不是逐个手动编写。模板固定结构;数据集提供每页内容。TanStack Start 中的单个文件路由可以从一个数据集表渲染数百个 URL。
SaaS 应该上线多少个程序化页面?
最小可行规模是一个模板 50 个 URL;实际上限是 5–7 个模板约 5000 个 URL。超过 5000 个 URL 后,收录率会降到 80% 以下,helpful-content 信号会威胁整个站点。TanStack Ship 的参考部署在 7 个模板中运行 1184 个 URL,收录率 92%。
程序化 SEO 的最大风险是什么?
Helpful-content 信号。如果程序化页面未经编辑质量把关就被自动生成,Google 会取消全站信号,手写文章也会被拖累。解决方法:强制执行每行最小字段数、每页最小词数,并在这些最小值上设置 URL 发出门槛。
程序化页面需要多久才能被收录?
70% 的页面 14 天,85% 的页面 30 天,92% 的页面 60 天。Indexing API 可以将高价值页面的时间缩短到 7 天,但该 API 每天只有 200 次请求配额。
没有代码能力能做程序化 SEO 吗?
不能。程序化 SEO 需要文件路由、数据集加载器、schema 发射器和 sitemap 发射器。无代码工具无法提供 SERP feature 定向所需的类型化数据集加载器和逐行 schema 发射。
结论
程序化 SEO 是 2026 年 SaaS 最高杠杆的内容投资。7 个模板收录的 URL 是手写文章的 85 倍,单页转化率高出 3.5 倍。