safe-publish について
safe-publishは、確認と検証を含む手順でWebflowサイトを公開するスキルです。公開前にサイトの変更、ページ、CMSアイテム、警告を確認し、公開後に結果を検証します。
主な機能
- 01サイトの公開状況と変更の確認
- 02ページとCMSアイテムの確認
- 03下書きと不足しているSEOメタデータの検出
- 04公開範囲とドメインのプレビュー
- 05明示的な確認要求と公開後の検証
活用シーン
- 01Webflowサイト公開前の変更確認
- 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をアクションlist_sitesとともに使用します - 詳細なサイト情報を取得するには、Webflow MCP の
data_sites_toolをアクションget_siteとともに使用します - すべてのページを取得するには、Webflow MCP の
data_pages_toolをアクションlist_pagesとともに使用します - CMS コレクションを一覧表示するには、Webflow MCP の
data_cms_toolをアクションget_collection_listとともに使用します - 下書きアイテムを確認するには、Webflow MCP の
data_cms_toolをアクションlist_collection_itemsとともに使用します - サイトを公開するには、Webflow MCP の
data_sites_toolをアクションpublish_siteとともに使用します - 開始前にベストプラクティスを確認するには、Webflow MCP の
webflow_guide_toolを使用します - Webflow の操作に、その他のツールや方法は使用しないでください
- すべてのツール呼び出しには、必須の
contextパラメーターを含めてください(第三者の視点で、15~25 語)
手順
フェーズ 1:サイトの選択とステータスの確認
- サイトを取得する:対象のサイトを特定します。ユーザーがサイト ID を指定していない場合は、確認してください。
- サイトの詳細を取得する:Webflow MCP の
data_sites_toolをアクションget_siteとともに使用して、以下を取得します。- 最終公開日
- 最終更新日
- 設定済みのカスタムドメイン
- ロケール設定
- 公開ステータスを確認する:サイトに未公開の変更があるかを判断します。
lastUpdatedとlastPublishedのタイムスタンプを比較しますlastPublishedが null の場合、サイトは一度も公開されていませんlastUpdated>lastPublishedの場合、サイトには未公開の変更があります
フェーズ 2:変更の検出と分析
- すべてのページを一覧表示する:Webflow MCP の
data_pages_toolをアクションlist_pagesとともに使用します - 変更されたページを特定する:
- 各ページの
lastUpdatedとサイトのlastPublishedを比較します - 最終公開後に変更されたページにフラグを付けます
- 種類別(静的、CMS テンプレート、アーカイブ、下書き)に分類します
- 各ページの
- すべてのコレクションを一覧表示する:Webflow MCP の
data_cms_toolをアクションget_collection_listとともに使用します - 下書きアイテムを確認する:
- 各コレクションについて、Webflow MCP の
data_cms_toolをアクションlist_collection_itemsとともに使用します isDraft: trueのアイテム数を数えます- 最終公開以降に変更されたアイテム数を数えます
- 各コレクションについて、Webflow MCP の
- 問題を検出する:
- 明示的に含めない限り公開されない下書きアイテム
- SEO メタデータが不足しているページ
- 参照切れ(検出可能な場合)
フェーズ 3:公開前の検証とプレビュー
- 公開前のチェックを実行する:
- コレクションの参照切れがないことを確認します
- 必須フィールドが不足しているページがないか確認します
- 未公開のままになる下書きアイテムについて警告します
- 詳細なプレビューを生成する:
- 公開されるすべてのページを表示します
- 公開されるすべての CMS アイテムを表示します
- 見つかった問題について警告を表示します
- 更新されるドメインを表示します
- 公開範囲を確認する:
- Webflow サブドメインのみ
- カスタムドメインのみ
- サブドメインとカスタムドメインの両方
フェーズ 4:確認と公開
- 明示的な確認を必須にする:
- 続行するには、ユーザーが「publish」と入力する必要があります
- 「yes」または「y」では公開を実行しないでください
- 公開される内容について明確に警告します
- 公開を実行する:
- Webflow MCP の
data_sites_toolをアクション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:重要な要件
サイトのステータス確認:
- 常に
data_sites_toolのアクションget_siteを使用して、サイトの詳細をすべて取得します lastUpdatedとlastPublishedを比較し、未公開の変更を検出します- タイムスタンプが同一の場合は、「公開する変更はありません」とユーザーに伝えます
lastPublishedが null の場合は、「初回公開のため、サイト全体が公開されます」と警告します
タイムスタンプの処理:
- ISO 形式と人間が読みやすい形式の両方を保存します
- 前回の公開からの経過時間を計算します
- タイムゾーンを表示します(明確さを優先して UTC を推奨します)
フェーズ 2:変更検出のルール
ページの変更検出:
- ページの
lastUpdatedとサイトのlastPublishedを比較します lastUpdated > lastPublishedのページのみを対象にします- 変更を分類します:
- コンテンツの変更(API での検出が困難)
- SEO メタデータの変更(利用可能な場合に比較)
- 構造上の変更(ページの作成/削除)
CMS アイテムの検出:
- すべてのアイテムの
isDraftフィールドを確認します lastUpdatedとサイトのlastPublishedを比較します- 各状態のアイテム数を数えます:
- 公開済み+変更なし
- 公開済み+変更あり
- 下書き(公開されません)
- アーカイブ済み(サイトに表示されません)
確認するコレクション:
data_cms_toolのアクションget_collection_listを使用して、すべてのコレクションを取得します- 各コレクションについて、
data_cms_toolのアクションlist_collection_itemsを使用してアイテムを一覧表示します - サイトにコレクションが多数(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 を使って公開 URL を確認します
- サイトが 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 秒待ってから再試行します