关于 safe-publish
safe-publish 是用于检查并发布 Webflow 网站的技能,包含发布前验证和明确确认流程。它会检查网站变更、页面、CMS 项目及警告,发布后再验证结果。
主要功能
- 01检查网站发布状态和变更
- 02审查页面与 CMS 项目
- 03标记草稿项目和缺失的 SEO 元数据
- 04预览发布范围和域名
- 05要求明确确认并验证发布结果
适用场景
- 01发布 Webflow 网站前审查变更
- 02查找不会随发布上线的 CMS 草稿项目
- 03选择发布到子域名或自定义域名
- 04核对发布时间和网站状态
MCP 相关
该技能使用 Webflow MCP 工具检查网站、页面和 CMS 集合,并发布所选网站。发布前要求用户明确输入“publish”。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ webflow/ webflow-skills --skill safe-publish安装后在 Claude Code 中输入/safe-publish确认已加载。
详细介绍
安全发布
通过全面的预览、验证和明确的确认工作流发布 Webflow 网站。
重要提示
所有操作始终使用 Webflow MCP 工具:
- 使用 Webflow MCP 的
data_sites_tool,并将 action 设为list_sites,列出可用网站 - 使用 Webflow MCP 的
data_sites_tool,并将 action 设为get_site,获取网站详细信息 - 使用 Webflow MCP 的
data_pages_tool,并将 action 设为list_pages,获取所有页面 - 使用 Webflow MCP 的
data_cms_tool,并将 action 设为get_collection_list,列出 CMS 集合 - 使用 Webflow MCP 的
data_cms_tool,并将 action 设为list_collection_items,检查草稿项目 - 使用 Webflow MCP 的
data_sites_tool,并将 action 设为publish_site,发布网站 - 开始前使用 Webflow MCP 的
webflow_guide_tool获取最佳实践 - 不要使用任何其他工具或方法执行 Webflow 操作
- 所有工具调用都必须包含必需的
context参数(15-25 个词,使用第三人称视角)
说明
阶段 1:选择网站并检查状态
- 获取网站:确定目标网站。如果用户未提供网站 ID,请向其询问。
- 获取网站详情:使用 Webflow MCP 的
data_sites_tool,并将 action 设为get_site,获取以下信息:- 上次发布时间
- 上次更新时间
- 已配置的自定义域名
- 区域设置
- 检查发布状态:确定网站是否有尚未发布的更改:
- 比较
lastUpdated与lastPublished时间戳 - 如果
lastPublished为 null,则网站从未发布过 - 如果
lastUpdated>lastPublished,则网站有尚未发布的更改
- 比较
阶段 2:检测并分析更改
- 列出所有页面:使用 Webflow MCP 的
data_pages_tool,并将 action 设为list_pages - 识别已修改的页面:
- 将每个页面的
lastUpdated与网站的lastPublished比较 - 标记上次发布后修改过的页面
- 按类型分类(静态页面、CMS 模板、已归档、草稿)
- 将每个页面的
- 列出所有集合:使用 Webflow MCP 的
data_cms_tool,并将 action 设为get_collection_list - 检查草稿项目:
- 对每个集合,使用 Webflow MCP 的
data_cms_tool,并将 action 设为list_collection_items - 统计
isDraft: true的项目数 - 统计上次发布后修改过的项目数
- 对每个集合,使用 Webflow MCP 的
- 检测问题:
- 未明确纳入发布范围、因而不会发布的草稿项目
- 缺少 SEO 元数据的页面
- 失效的引用(如果可检测)
阶段 3:发布前验证与预览
- 执行发布前检查:
- 确认没有失效的集合引用
- 检查是否有页面缺少必填字段
- 提醒用户仍将保持未发布状态的草稿项目
- 生成详细预览:
- 显示所有将要发布的页面
- 显示所有将要发布的 CMS 项目
- 显示发现的所有问题警告
- 显示将要更新的域名
- 询问发布范围:
- 仅 Webflow 子域名
- 仅自定义域名
- 子域名和自定义域名
阶段 4:确认并发布
- 要求明确确认:
- 用户必须输入 "publish" 才能继续
- "yes" 或 "y" 不应触发发布
- 清楚地警告用户即将上线的内容
- 执行发布:
- 使用 Webflow MCP 的
data_sites_tool,并将 action 设为publish_site,传入正确的参数 - 如果没有自定义域名,则将
customDomains设为空数组 - 根据用户的选择设置
publishToWebflowSubdomain
- 使用 Webflow MCP 的
- 记录发布时间戳:
- 发布后再次获取网站信息
- 从
lastPublished字段记录准确的发布时间
阶段 5:验证与报告
- 验证发布是否成功:
- 检查
lastPublished时间戳是否已更新 - 验证网站能否通过已发布的 URL 访问
- 清楚地报告任何验证失败
- 检查
- 生成成功报告:
- 显示发布时间戳
- 列出已上线的内容(页面、条目)
- 提供已发布的 URL
- 显示验证状态
- 妥善处理失败:
- 如果发布失败,显示清晰的错误消息
- 提出补救步骤
- 不要自动重试
示例
用户提示词:
Publish my site
步骤 1:选择网站
🚀 Safe Publish - Site Selection
Available Sites:
1. **MCP Demo#1**
- Last published: January 9, 2026 at 20:05:38 UTC
- Last updated: January 9, 2026 at 20:49:37 UTC
- ⚠️ **Has unpublished changes** (updated 44 minutes after last publish)
2. **MCP Demo#2**
- Last updated: January 9, 2026 at 19:32:53 UTC
- Status: Not yet published
Which site would you like to publish? (1-2)
步骤 2:检测变更并预览
🚀 Publish Preview: MCP Demo#1
**Last published:** January 9, 2026 at 20:05:38 UTC
**Time since last publish:** ~1 hour 5 minutes
---
## Changes to Publish:
### 📄 Pages Modified: 1
└── **Home** (/)
- SEO title updated to "Home Page"
- Last modified: 21:10:52 UTC
### 📝 CMS Items: 2 draft items to publish
**Blog Posts (2 drafts):**
1. **"Why Webflow MCP Will Transform Your Workflow in 2026!"**
- Status: Draft
- Created: 20:24:44 UTC
- Last modified: 21:11:03 UTC
- Featured: Yes
- Slug: webflow-mcp-transform-workflow-2026
2. **"Webflow E-commerce: The Future of Online Shopping in 2026!"**
- Status: Draft
- Created: 20:05:24 UTC
- Last modified: 21:11:11 UTC
- Featured: Yes
- Slug: webflow-ecommerce-2026
---
**Pre-Publish Checks:**
- ✅ No broken references detected
- ✅ All required fields populated
- ⚠️ 2 draft items will become published
**Publish Targets:**
- Webflow subdomain: mcp-demo-1-e88499.webflow.io
- Custom domains: None configured
**⚠️ Type "publish" to make these changes live.**
步骤 3:用户输入“publish”后
🔄 Publishing MCP Demo#1...
Progress: ████████████████████ 100%
✅ Published Successfully!
**Site:** MCP Demo#1
**Published at:** 2026-01-09 21:12:52 UTC (January 9, 2026 at 21:12:52)
---
## What Went Live:
### 📄 Pages (1)
- ✅ Home (/) - SEO title updated
### 📝 Blog Posts (2)
- ✅ "Why Webflow MCP Will Transform Your Workflow in 2026!"
- ✅ "Webflow E-commerce: The Future of Online Shopping in 2026!"
---
## Verification:
- ✅ **Site accessible:** Yes
- ✅ **URL:** https://mcp-demo-1-e88499.webflow.io
- ✅ **Status:** Page loading successfully
- ✅ **Content delivery:** Webflow CDN responding
---
**🎉 Your site is now live with all changes published!**
All unpublished changes have been successfully published to the Webflow subdomain. The 2 draft blog posts are now visible on your site.
另一种情况:包含警告
🚀 Publish Preview: Company Site
**Last published:** January 8, 2026 at 14:30:00 UTC
---
## Changes to Publish:
### 📄 Pages Modified: 3
├── **About** (/about)
│ └── Content updated
├── **Contact** (/contact)
│ └── Form fields changed
└── **Home** (/)
└── Hero section updated
### 📝 CMS Items
**Blog Posts:**
- 5 published items modified
- 2 draft items (will NOT be published automatically)
**Products:**
- 3 new items created
- 1 item updated
---
**Pre-Publish Checks:**
⚠️ **Warnings Found:**
1. **Missing SEO Metadata (2 pages):**
- /about - No meta description
- /contact - No meta title or description
- 💡 Recommendation: Add SEO metadata before publishing
2. **Draft Items (2):**
- "Upcoming Product Launch" (Blog Post)
- "Holiday Sale Announcement" (Blog Post)
- ⚠️ These will remain unpublished
3. **Large Change Set:**
- 3 pages + 9 CMS items will be updated
- Consider reviewing changes carefully
**Publish Targets:**
- Webflow subdomain: company-site.webflow.io
- Custom domains: example.com, www.example.com
---
**Would you like to:**
1. Proceed with publish (type "publish")
2. Cancel and review (type "cancel")
指南
阶段 1:关键要求
网站状态检查:
- 始终使用操作
get_site调用data_sites_tool,获取完整的网站详情 - 比较
lastUpdated与lastPublished,以检测尚未发布的变更 - 如果时间戳相同,告知用户“没有变更需要发布”
- 如果
lastPublished为 null,警告“首次发布——整个网站都将上线”
时间戳处理:
- 同时存储 ISO 格式和易读格式
- 计算距离上次发布经过的时间
- 显示时区(为清晰起见,优先使用 UTC)
阶段 2:变更检测规则
页面变更检测:
- 将页面的
lastUpdated与网站的lastPublished进行比较 - 仅标记
lastUpdated > lastPublished的页面 - 对变更分类:
- 内容变更(通过 API 难以检测)
- SEO 元数据变更(如有,进行比较)
- 结构变更(页面已创建/删除)
CMS 条目检测:
- 检查所有条目的
isDraft字段 - 将
lastUpdated与网站的lastPublished进行比较 - 统计各状态的条目数量:
- 已发布且未修改
- 已发布且已修改
- 草稿(不会发布)
- 已归档(不会显示在网站上)
要检查的集合:
- 使用操作
get_collection_list调用data_cms_tool,查询所有集合 - 对每个集合,使用操作
list_collection_items调用data_cms_tool,列出条目 - 如果网站有很多集合(10 个以上),请分批查询
阶段 3:发布前验证
必需检查:
-
无效引用:
- 检查被引用的条目是否存在
- 如果引用字段指向已删除或已归档的条目,则发出警告
- 注意:API 可能无法轻易提供此信息——尽力检查
-
缺少必填字段:
- 验证所有必填 CMS 字段均已填写
- 如果必填字段为空,则发出警告(理论上不应出现,但仍需检查)
-
SEO 完整性:
- 检查页面是否缺少
seo.title或seo.description - 发出警告,但不要阻止发布
- 提供改进建议
- 检查页面是否缺少
-
草稿条目警告:
- 清楚列出所有草稿条目
- 说明这些条目仍将保持未发布状态
- 如果用户想先发布草稿,提供取消选项
警告级别:
- 🔴 严重:会导致网站故障(无效引用、缺少必填字段)
- ⚠️ 警告:不理想但仍可发布(缺少 SEO 信息、存在草稿)
- 💡 建议:最佳实践(添加元描述、优化图像)
何时阻止发布:
- 仅在发现严重错误时阻止
- 对于警告和建议,允许用户继续
- 始终醒目地显示警告
阶段 4:确认与发布
确认要求:
- 用户必须输入“publish”(不区分大小写)
- 不接受:“yes”、“y”、“ok”、“go”、“confirm”
- 原因:防止因通用确认而意外发布
- 如果用户输入其他内容,请再次询问或视为取消
发布 API 用法:
// Correct format for data_sites_tool with action publish_site
{
"site_id": "site-id-here",
"publishToWebflowSubdomain": true, // or false
"customDomains": [] // MUST be array, even if empty
}
// If custom domains exist:
{
"site_id": "site-id-here",
"publishToWebflowSubdomain": false,
"customDomains": ["example.com", "www.example.com"]
}
域名选择:
- 如果没有自定义域名:仅发布到子域名
- 如果存在自定义域名:询问用户要发布到哪里
- 仅子域名
- 仅自定义域名
- 两者都发布
- 如果用户未指定,默认发布到子域名
错误处理:
- 如果
customDomains验证错误:确保它是一个数组 - 如果出现
400 Bad Request:检查请求格式 - 如果出现
403 Forbidden:检查站点发布权限 - 如果出现
500 Server Error:5 秒后重试一次,然后报告失败
阶段 5:验证与报告
发布后验证:
-
获取更新后的站点信息:
- 再次调用
data_sites_tool,使用操作get_site - 验证
lastPublished时间戳已更新 - 如果时间戳未更新,发布可能失败
- 再次调用
-
检查站点可访问性:
- 使用 WebFetch 检查已发布的网址
- 验证站点返回 200 OK
- 检查是否提供了内容(而不是错误页面)
- 测量响应时间
-
自定义域名检查:
- 如果发布到了自定义域名,请验证每个域名
- 部分域名可能需要时间才能完成传播(DNS)
- 如果较慢,请注明:“域名可能需要几分钟才能更新”
验证失败处理:
- 如果站点无法访问:明确报告
- 注意:即使验证失败,变更也已发布
- 可能的原因:
- DNS 传播延迟
- CDN 缓存尚未清除
- Webflow 基础设施临时出现问题
- 建议:“请在 2-3 分钟后尝试访问站点”
成功报告格式:
✅ Published Successfully!
Site: [Site Name]
Published at: [ISO Timestamp] ([Human Readable])
What Went Live:
- X pages modified
- Y CMS items published
- Z draft items promoted to published
Verification:
✅ Site accessible
✅ URL: [primary URL]
✅ Response time: [Xms]
[If custom domains]
Custom Domains:
✅ example.com - accessible
⚠️ www.example.com - propagating (may take 2-3 minutes)
最佳实践
始终:
- ✅ 发布前展示全面的预览
- ✅ 要求用户明确输入“publish”进行确认
- ✅ 发布后验证站点
- ✅ 报告准确的发布时间戳
- ✅ 列出所有即将上线的变更
- ✅ 警告用户存在草稿内容
绝不:
- ❌ 未经用户明确确认就发布
- ❌ 接受“yes”等通用确认
- ❌ 向用户隐瞒警告
- ❌ 自动重试失败的发布
- ❌ 检测到关键错误时仍继续
边缘情况:
没有要发布的变更:
ℹ️ No Changes to Publish
Last published: January 9, 2026 at 20:05:38 UTC
Last updated: January 9, 2026 at 20:05:38 UTC
All changes are already published. Your site is up to date!
首次发布(之前从未发布过):
⚠️ First Publish Warning
This site has NEVER been published before.
This will make the ENTIRE site publicly accessible:
- All pages (2 pages)
- All CMS items (47 items across 3 collections)
- All assets
Are you ready to make this site live?
Type "publish" to proceed, or "cancel" to abort.
发布到暂存子域名:
- 如果站点有自定义域名,但用户选择仅发布到子域名
- 适用于发布到生产域名之前进行测试
- 说明:“仅发布到子域名。自定义域名仍会显示旧版本。”
不支持部分发布:
- Webflow 会发布整个站点,而不是单个页面
- 无法发布特定页面或集合
- 如果用户要求“只发布首页”,请说明此限制
- 替代方案:使用暂存子域名进行测试
性能优化
对于大型站点:
- 包含 100+ 个页面或 1000+ 个项目的站点可能需要时间分析
- 显示进度:“正在分析 150 个页面……”
- 尽可能批量调用 API
- 对于非常大的变更集,可考虑跳过详细差异比较
缓存:
- 在工作流期间缓存站点信息(不要不必要地重新获取)
- 仅在发布后重新获取信息以进行验证
超时:
- 大型站点的发布 API 调用可能需要 10-30 秒
- 不要过早超时
- 显示:“正在发布……大型站点可能需要最多 30 秒”
错误消息
清晰且可执行:
❌ 不佳:
"Publish failed"
✅ 良好:
"Publish Failed: Validation Error
The Webflow API returned an error:
- customDomains parameter must be an array
This is likely a configuration issue. Retrying...
常见错误:
-
验证错误(customDomains):
- 修复方法:确保
customDomains: []是一个数组 - 不要传入 null,也不要省略此字段
- 修复方法:确保
-
未找到站点:
- 用户可能提供了错误的站点 ID
- 列出可用站点并让用户选择
-
权限不足:
- 站点可能需要特定的发布权限
- 检查工作区访问设置
-
发布已在进行中:
- 可能有另一个发布正在运行
- 等待 30 秒后重试
评论
支持 Markdown