cms-best-practices by webflow/webflow-skills
npx skills add https://github.com/webflow/webflow-skills --skill cms-best-practices提供关于 Webflow CMS 架构、关系、优化和故障排除的专家指导。
始终对所有操作使用 Webflow MCP 工具:
webflow_guide_tool 获取最佳实践data_sites_tool 并执行 list_sites 操作来识别可用站点data_sites_tool 并执行 get_site 操作来检索站点详情和计划限制data_cms_tool 并执行 get_collection_list 操作来分析现有集合data_cms_tool 并执行 操作来检查集合模式广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
get_collection_detailsdata_cms_tool 并执行 list_collection_items 操作来评估内容量data_pages_tool 并执行 list_pages 操作来理解页面结构ask_webflow_ai 处理特定的 API 问题context 参数(15-25 个单词,第三人称视角)data_sites_tool 并执行 list_sites 和 get_site 操作来了解计划限制data_cms_tool 并执行 get_collection_list 和 get_collection_details 操作来检查当前设置data_cms_tool 并执行 list_collection_items 操作来了解规模data_pages_tool 并执行 list_pages 操作来查看内容如何显示在以下情况使用 CMS:
在以下情况使用静态:
混合方法:
| 内容类型 | 推荐字段 | 备注 | 字符限制 |
|---|---|---|---|
| 短文本 | 纯文本 | 标题、名称、别名 | 最多 256 个字符 |
| 长文本(无格式) | 纯文本(长) | 描述、摘要 | 无限制 |
| 格式化内容 | 富文本 | 博客内容、简介、文章 | 无限制 |
| 单张图片 | 图片 | 照片、缩略图、页眉 | 每张图片最大 4MB |
| 多张图片 | 多图片 | 画廊、产品照片 | 最多 25 张图片 |
| 文件下载 | 文件 | PDF、文档、下载 | 每个文件最大 4MB |
| 是/否值 | 开关 | 特色标志、可见性切换 | 布尔值 |
| 单选 | 选项 | 状态、类型、类别 | 无限选项 |
| 日期/时间 | 日期/时间 | 发布日期、事件、截止日期 | ISO 8601 格式 |
| 链接到单个项目 | 引用 | 作者 → 文章、类别 → 文章 | 一个项目 |
| 链接到多个项目 | 多引用 | 文章 → 标签、文章 → 相关文章 | 多个项目 |
| 外部 URL | 链接 | 社交链接、外部资源 | 最多 2048 个字符 |
| 数值 | 数字 | 价格、评分、顺序、计数 | 整数或小数 |
| 电话号码 | 电话 | 联系电话 | E.164 格式 |
| 电子邮件地址 | 电子邮件 | 联系邮箱 | 有效的电子邮件格式 |
| 颜色值 | 颜色 | 主题颜色、强调色、品牌色 | 十六进制格式 |
| 视频嵌入 | 视频 | YouTube、Vimeo 嵌入 | 嵌入 URL |
Need to store:
├── Text?
│ ├── Short (≤256 chars)? → Plain Text
│ ├── Long + Formatting? → Rich Text
│ └── Long + No Formatting? → Plain Text (long)
├── Media?
│ ├── Single image? → Image
│ ├── Multiple images? → Multi-image
│ ├── Video? → Video
│ └── File download? → File
├── Choice/Selection?
│ ├── Yes/No? → Switch
│ ├── One option? → Option
│ └── Link to item? → Reference/Multi-reference
├── Structured data?
│ ├── Number? → Number
│ ├── Date/Time? → Date/Time
│ ├── Phone? → Phone
│ ├── Email? → Email
│ └── URL? → Link
└── Visual?
└── Color? → Color
示例: 文章 → 作者
Authors Collection:
├── name (Text, required)
├── slug (Text, required)
├── bio (Rich Text)
├── photo (Image)
├── title (Text) - job title
├── email (Email)
└── social-links (Link)
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── author (Reference → Authors) ← Each post has ONE author
显示: 在文章页面上,访问 author.name、author.photo、author.bio
过滤: 可以按特定作者过滤文章
优势:
用例:
示例: 文章 ↔ 标签
Tags Collection:
├── name (Text, required)
├── slug (Text, required)
├── description (Plain Text)
└── color (Color) - optional visual grouping
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── tags (Multi-Reference → Tags) ← Each post has MANY tags
显示: 在文章页面上,循环遍历 tags 以显示所有标签
过滤: 可以按特定标签过滤文章
优势:
限制:
多标签过滤的变通方法:
用例:
示例: 带子类别的类别
Categories Collection:
├── name (Text, required)
├── slug (Text, required)
├── description (Plain Text)
├── parent (Reference → Categories) ← Self-reference for hierarchy
└── level (Number) - 1, 2, 3 for display logic
用例:
优势:
限制:
替代方案: 对于简单的 1-2 级分类,使用选项字段
示例: 相关文章
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── related-posts (Multi-Reference → Posts) ← Self-reference to other posts
显示: 在文章页面底部显示相关文章
优势:
挑战:
解决方案:
用户提示:
I'm building a recipe site. How should I structure the CMS?
步骤 1:需求收集
📐 CMS 规划:食谱网站
让我问几个问题来设计最佳结构:
1. **内容量**:您计划有多少个食谱?
- 少量(≤50):简单结构
- 中等(50-200):适度的组织
- 大量(200+):需要高级分类法
2. **食谱属性**:每个食谱将有哪些信息?
- 基本:名称、成分、说明、图片
- 高级:准备时间、烹饪时间、难度、营养、饮食标签
3. **组织需求**:用户将如何找到食谱?
- 按餐点类型(早餐、午餐、晚餐)
- 按菜系(意大利菜、墨西哥菜、亚洲菜)
- 按饮食限制(素食、无麸质、生酮)
- 按烹饪方法(烘焙、烧烤、慢炖锅)
- 按成分(鸡肉、意大利面、蔬菜)
4. **作者设置**:单个还是多个作者?
- 单个:您管理所有内容
- 多个:食谱创作者团队
5. **用户参与度**:有哪些交互功能?
- 评论/评价
- 评分
- 保存收藏夹
- 打印食谱卡
根据您的回答,我将设计最佳的 CMS 架构。
步骤 2:用户响应后
📐 推荐的 CMS 架构:食谱网站
根据您的需求(中等量、多个作者、高级过滤):
---
## 所需集合:4
### 1. 食谱(主要内容)
├── name (Text, required) - "自制意大利面卡邦尼"
├── slug (Text, required) - "homemade-pasta-carbonara"
├── description (Plain Text, 160 chars) - 用于 SEO 的简要摘要
├── featured-image (Image) - 详情页面的英雄图片
├── thumbnail-image (Image) - 网格卡片用的小图片
├── prep-time (Number, required) - 准备分钟数
├── cook-time (Number, required) - 烹饪分钟数
├── total-time (Number) - 自动计算或手动
├── servings (Number, required) - 份数
├── difficulty (Option: Easy, Medium, Hard)
├── ingredients (Rich Text, required) - 带数量的成分列表
├── instructions (Rich Text, required) - 分步说明
├── notes (Rich Text) - 厨师笔记、技巧、替代品
├── nutrition-info (Plain Text) - 卡路里、蛋白质等
├── author (Reference → Authors, required)
├── category (Reference → Categories, required) - 主要餐点类型
├── cuisine (Reference → Cuisines) - 意大利菜、墨西哥菜等
├── dietary-tags (Multi-Reference → Dietary Tags) - 素食、无麸质等
├── cooking-methods (Multi-Reference → Methods) - 烘焙、烧烤等
├── featured (Switch) - 在首页突出显示
├── published-date (Date, required)
└── view-count (Number) - 跟踪受欢迎程度
**总字段数:** 22 个字段
**所需计划:** CMS 计划最低要求(20 个集合,2000 个项目)
### 2. 作者
├── name (Text, required)
├── slug (Text, required)
├── title (Text) - "主厨"、"食谱开发者"
├── bio (Rich Text)
├── photo (Image)
├── specialty (Plain Text) - "意大利菜"、"烘焙"
├── social-instagram (Link)
├── social-website (Link)
└── email (Email)
**目的:** 在所有食谱中可重复使用的作者信息
### 3. 类别
├── name (Text, required) - "早餐"、"午餐"、"晚餐"、"甜点"
├── slug (Text, required)
├── description (Plain Text)
├── image (Image) - 类别英雄图片
├── color (Color) - UI 的品牌颜色
└── sort-order (Number) - 控制显示顺序
**目的:** 主要餐点类型分类
**建议类别(8):**
- 早餐与早午餐
- 开胃菜与小吃
- 午餐
- 晚餐与主菜
- 配菜
- 沙拉
- 甜点与糖果
- 饮品
### 4. 菜系
├── name (Text, required) - "意大利菜"、"墨西哥菜"、"亚洲菜"
├── slug (Text, required)
├── description (Plain Text)
└── flag-icon (Image) - 可选视觉元素
**目的:** 按菜系类型过滤
**建议菜系(12):**
- 美式、意大利菜、墨西哥菜、亚洲菜、地中海菜、法式、印度菜、泰国菜、
中式、日式、希腊菜、中东菜
### 5. 饮食标签
├── name (Text, required) - "素食"、"无麸质"、"生酮"
├── slug (Text, required)
├── description (Plain Text)
├── icon (Image) - 徽章图标
└── color (Color) - 徽章颜色
**目的:** 多选饮食过滤器
**建议标签(10):**
- 素食、纯素食、无麸质、无乳制品、生酮、原始饮食、低碳水化合物、
高蛋白、无坚果、鱼素
### 6. 烹饪方法
├── name (Text, required) - "烘焙"、"烧烤"、"慢炖锅"
├── slug (Text, required)
└── description (Plain Text)
**目的:** 按烹饪技术过滤
**建议方法(8):**
- 烘焙、烧烤、慢炖锅、快煲锅、炉灶、免烹饪、
空气炸锅、真空低温烹饪
---
## 关系图
Recipe → Author (one-to-many) ↓ Recipe → Category (one-to-many) ↓ Recipe → Cuisine (one-to-many) ↓ Recipe → Dietary Tags (many-to-many) ↓ Recipe → Cooking Methods (many-to-many)
**多引用计数:** 2 个字段(在 5 字段限制内 ✅)
---
## 推荐的页面结构
### 1. 首页 (/)
- 带有特色食谱的英雄部分
- 类别卡片(8 个类别)
- 最新食谱(集合列表,6 个项目)
- 热门食谱(按 view-count 排序)
- 行动号召
### 2. 食谱索引 (/recipes)
- 显示所有食谱的集合列表
- 过滤侧边栏:
- 类别(标签页或下拉菜单)
- 菜系(多选)
- 饮食标签(复选框)
- 烹饪时间(< 30 分钟、30-60 分钟、60+ 分钟)
- 难度(简单、中等、困难)
- 分页(每页 12 个食谱)
- 搜索栏(Finsweet CMS Filter)
### 3. 食谱详情 (/recipes/[slug])
- 英雄图片 + 标题
- 准备/烹饪/总时间 + 份数
- 难度徽章 + 饮食徽章
- 成分列表
- 分步说明
- 带简介的作者卡片
- 相关食谱(相同类别或标签)
- 打印按钮
### 4. 类别页面 (/category/[slug])
- 类别英雄图片 + 描述
- 按类别过滤的食谱
- 面包屑:首页 > 食谱 > [类别]
- 相关类别
### 5. 菜系页面 (/cuisine/[slug])
- 菜系描述 + 旗帜
- 按菜系过滤的食谱
- 热门菜系侧边栏
### 6. 作者个人资料 (/authors/[slug])
- 作者照片 + 简介
- 作者的食谱(集合列表)
- 社交链接
- 作者统计(总食谱数、加入日期)
### 7. 饮食过滤页面 (/diet/[slug])
- 饮食标签描述
- 按标签过滤的食谱
- 相关饮食标签
---
## SEO 优化
### 集合模板 SEO
Recipe Detail Page (/recipes/[slug]):
SEO 标题:{{recipe.name}} | 您的网站名称
元描述:{{recipe.description}}
OG 图片:{{recipe.featured-image}}
模式:食谱结构化数据(JSON-LD)
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "{{recipe.name}}",
"image": "{{recipe.featured-image}}",
"author": {
"@type": "Person",
"name": "{{recipe.author.name}}"
},
"datePublished": "{{recipe.published-date}}",
"description": "{{recipe.description}}",
"prepTime": "PT{{recipe.prep-time}}M",
"cookTime": "PT{{recipe.cook-time}}M",
"totalTime": "PT{{recipe.total-time}}M",
"recipeYield": "{{recipe.servings}} servings",
"recipeIngredient": [...],
"recipeInstructions": [...]
}
好处:
1. 分页策略
Recipes Index page:
- Limit: 12 recipes per page
- Enable Webflow pagination
- "Load More" button for smoother UX
2. 图片优化
Thumbnail: 400x300px (grid cards)
Featured: 1200x800px (detail pages)
Format: WebP when possible
Loading: lazy for below-fold images
3. 引用字段策略
Display only needed fields:
- Author name + photo (don't bind entire author object)
- Category name + color (skip unused fields)
- Each reference = query, so minimize bindings
4. 集合列表限制
Homepage: 6 featured recipes
Category pages: 12 recipes per page
Author pages: 12 recipes per page
Related recipes: 3-4 max
自动(无需手动策划):
准备好实施了吗?我可以帮助您:
您想从哪个开始?
### 示例 2:优化现有 CMS
**用户提示:**
My collection list is slow with 500+ items. How do I optimize?
**响应:**
⚡ CMS 性能优化
分析您有 500+ 个项目时的性能问题...
问题: 在单个页面上加载 500+ 个项目 影响:
根本原因:
当前: 加载所有 500+ 个项目 修复: 限制为每页 12-20 个项目
在 Webflow Designer 中:
影响: 页面加载速度提高 95% ✅ 实施时间: 5 分钟 工作量: 低
当前: 立即加载全分辨率图片 修复: 使用适当的图片大小 + 懒加载
实施:
Thumbnail images in grid:
- Size: 400x300px (not full resolution)
- Format: WebP (smaller file size)
- Loading: lazy (below fold images)
In Collection List Image settings:
- Set custom size: 400x300
- Enable lazy loading
- Use srcset for responsive images
影响: 加载速度提高 60-70% ✅ 实施时间: 15 分钟 工作量: 低
当前: 绑定所有引用字段 修复: 仅显示实际需要的内容
检查您的集合列表:
❌ Bad: Binding entire author object
{
author.name,
author.bio,
author.photo,
author.email,
author.social-links
}
✅ Good: Bind only displayed fields
{
author.name,
author.photo
}
原因: 每个引用字段 = 单独的数据库查询 影响: 速度提高 30-40% ✅ 实施时间: 10 分钟 工作量: 低
当前: 加载所有项目,然后使用条件可见性隐藏 修复: 使用集合列表过滤器
示例:
Instead of:
- Load all 500 posts
- Hide if published-date > today (conditional)
Do this:
- Collection List Filter: published-date ≤ today
- Only loads matching items
实施:
影响: 速度提高 50% + 更简洁 ✅ 实施时间: 30 分钟 工作量: 中等
分页的替代方案: 更流畅的用户体验
选项: a) Webflow 原生: 带有"加载更多"样式的分页 b) Finsweet: CMS Load 插件(免费) c) 自定义代码: AJAX 加载更多
好处:
影响: 更好的用户体验,与分页相同的性能 ✅ 实施时间: 1-2 小时 工作量: 中等
替代: 一个巨大的"所有文章"页面 创建: 多个过滤页面
示例:
/blog → 最近的文章(20 个项目)
/blog/featured → 仅特色文章(10 个项目)
/blog/category/tech → 技术类别(已过滤)
/blog/archive → 带有分页的旧文章
好处:
影响: 显著改善用户体验 ✅ 实施时间: 2-3 小时 工作量: 中等
策略: 动态最近内容 + 静态存档
实施:
Recent Content (Dynamic CMS):
- Last 50-100 posts
- Full dynamic filtering
- Fast performance
Older Content (Static):
- Archive pages for older posts
- Yearly/quarterly archives
- Still accessible but static HTML
- Rarely updated
何时使用:
影响: 在规模上保持快速性能 ✅ 实施时间: 1-2 周 工作量: 高
问题: 引用查找过多 解决方案: 复制频繁访问的数据
示例:
Current (Normalized):
Post → Author (reference)
Display: {{post.author.name}}
= 2 queries (post + author)
Denormalized:
Post has author-name field (text)
Display: {{post.author-name}}
= 1 query (just post)
何时使用:
权衡: ⚠️ 如果数据更改,必须在多个地方更新
影响: 对于引用密集的页面,速度提高 40-50% ✅ 实施时间: 不定(需要数据迁移) 工作量: 高
使用: Finsweet CMS Filter(免费)
好处:
最适合:
限制: 所有项目最初都已加载(与分页一起使用)
影响: 即时过滤 ✅ 实施时间: 2-4 小时 工作量: 中高
部署前:
在暂存环境测试:
性能测试:
用户测试:
Provide expert guidance on Webflow CMS architecture, relationships, optimization, and troubleshooting.
ALWAYS use Webflow MCP tools for all operations:
webflow_guide_tool to get best practices before startingdata_sites_tool with action list_sites to identify available sitesdata_sites_tool with action get_site to retrieve site details and plan limitsdata_cms_tool with action get_collection_list to analyze existing collectionsdata_cms_tool with action get_collection_details to examine collection schemasdata_cms_tool with action list_collection_items to assess content volumedata_pages_tool with action list_pages to understand page structureask_webflow_ai for specific API questionscontext parameter (15-25 words, third-person perspective)data_sites_tool with actions list_sites and get_site to understand plan limitsdata_cms_tool with actions get_collection_list and get_collection_details to examine current setupdata_cms_tool with action list_collection_items to understand scaleUse CMS when:
Use Static when:
Hybrid Approach:
| Content Type | Recommended Field | Notes | Character Limits |
|---|---|---|---|
| Short text | Plain Text | Titles, names, slugs | Max 256 chars |
| Long text (no formatting) | Plain Text (long) | Descriptions, excerpts | Unlimited |
| Formatted content | Rich Text | Blog content, bios, articles | Unlimited |
| Single image | Image | Photos, thumbnails, headers | 4MB max per image |
| Multiple images | Multi-image | Galleries, product photos | Up to 25 images |
| File downloads | File | PDFs, documents, downloads | 4MB max per file |
| Yes/No values | Switch | Featured flags, visibility toggles |
Need to store:
├── Text?
│ ├── Short (≤256 chars)? → Plain Text
│ ├── Long + Formatting? → Rich Text
│ └── Long + No Formatting? → Plain Text (long)
├── Media?
│ ├── Single image? → Image
│ ├── Multiple images? → Multi-image
│ ├── Video? → Video
│ └── File download? → File
├── Choice/Selection?
│ ├── Yes/No? → Switch
│ ├── One option? → Option
│ └── Link to item? → Reference/Multi-reference
├── Structured data?
│ ├── Number? → Number
│ ├── Date/Time? → Date/Time
│ ├── Phone? → Phone
│ ├── Email? → Email
│ └── URL? → Link
└── Visual?
└── Color? → Color
Example: Posts → Author
Authors Collection:
├── name (Text, required)
├── slug (Text, required)
├── bio (Rich Text)
├── photo (Image)
├── title (Text) - job title
├── email (Email)
└── social-links (Link)
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── author (Reference → Authors) ← Each post has ONE author
Display: On post page, access author.name, author.photo, author.bio
Filtering: Can filter posts by specific author
Advantages:
Use cases:
Example: Posts ↔ Tags
Tags Collection:
├── name (Text, required)
├── slug (Text, required)
├── description (Plain Text)
└── color (Color) - optional visual grouping
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── tags (Multi-Reference → Tags) ← Each post has MANY tags
Display: On post page, loop through tags to show all tags
Filtering: Can filter posts by specific tag
Advantages:
Limitations:
Workarounds for multiple tag filtering:
Use cases:
Example: Categories with subcategories
Categories Collection:
├── name (Text, required)
├── slug (Text, required)
├── description (Plain Text)
├── parent (Reference → Categories) ← Self-reference for hierarchy
└── level (Number) - 1, 2, 3 for display logic
Use cases:
Advantages:
Limitations:
Alternative: Use Option field for simple 1-2 level categorization
Example: Related Posts
Posts Collection:
├── title (Text, required)
├── slug (Text, required)
├── content (Rich Text)
└── related-posts (Multi-Reference → Posts) ← Self-reference to other posts
Display: Show related posts at bottom of post page
Advantages:
Challenges:
Solutions:
User prompt:
I'm building a recipe site. How should I structure the CMS?
Step 1: Requirements Gathering
📐 CMS Planning: Recipe Site
Let me ask a few questions to design the best structure:
1. **Content Volume**: How many recipes do you plan to have?
- Small (≤50): Simple structure
- Medium (50-200): Moderate organization
- Large (200+): Advanced taxonomy needed
2. **Recipe Attributes**: What information will each recipe have?
- Basic: Name, ingredients, instructions, image
- Advanced: Prep time, cook time, difficulty, nutrition, dietary tags
3. **Organization Needs**: How will users find recipes?
- By meal type (breakfast, lunch, dinner)
- By cuisine (Italian, Mexican, Asian)
- By dietary restrictions (vegan, gluten-free, keto)
- By cooking method (baking, grilling, slow cooker)
- By ingredients (chicken, pasta, vegetables)
4. **Author Setup**: Single or multiple authors?
- Single: You manage all content
- Multiple: Team of recipe creators
5. **User Engagement**: What interactive features?
- Comments/reviews
- Ratings
- Save favorites
- Print recipe cards
Based on your answers, I'll design the optimal CMS architecture.
Step 2: After User Responds
📐 Recommended CMS Architecture: Recipe Site
Based on your requirements (Medium volume, Multiple authors, Advanced filtering):
---
## Collections Needed: 4
### 1. Recipes (Main Content)
├── name (Text, required) - "Homemade Pasta Carbonara"
├── slug (Text, required) - "homemade-pasta-carbonara"
├── description (Plain Text, 160 chars) - Brief summary for SEO
├── featured-image (Image) - Hero image for detail page
├── thumbnail-image (Image) - Smaller image for grid cards
├── prep-time (Number, required) - Minutes of prep
├── cook-time (Number, required) - Minutes of cooking
├── total-time (Number) - Auto-calculated or manual
├── servings (Number, required) - Number of servings
├── difficulty (Option: Easy, Medium, Hard)
├── ingredients (Rich Text, required) - Ingredient list with quantities
├── instructions (Rich Text, required) - Step-by-step directions
├── notes (Rich Text) - Cook's notes, tips, substitutions
├── nutrition-info (Plain Text) - Calories, protein, etc.
├── author (Reference → Authors, required)
├── category (Reference → Categories, required) - Primary meal type
├── cuisine (Reference → Cuisines) - Italian, Mexican, etc.
├── dietary-tags (Multi-Reference → Dietary Tags) - Vegan, GF, etc.
├── cooking-methods (Multi-Reference → Methods) - Baking, Grilling, etc.
├── featured (Switch) - Highlight on homepage
├── published-date (Date, required)
└── view-count (Number) - Track popularity
**Total fields:** 22 fields
**Plan required:** CMS plan minimum (20 collections, 2000 items)
### 2. Authors
├── name (Text, required)
├── slug (Text, required)
├── title (Text) - "Head Chef", "Recipe Developer"
├── bio (Rich Text)
├── photo (Image)
├── specialty (Plain Text) - "Italian Cuisine", "Baking"
├── social-instagram (Link)
├── social-website (Link)
└── email (Email)
**Purpose:** Reusable author information across all recipes
### 3. Categories
├── name (Text, required) - "Breakfast", "Lunch", "Dinner", "Desserts"
├── slug (Text, required)
├── description (Plain Text)
├── image (Image) - Category hero image
├── color (Color) - Brand color for UI
└── sort-order (Number) - Control display order
**Purpose:** Primary meal type classification
**Suggested Categories (8):**
- Breakfast & Brunch
- Appetizers & Snacks
- Lunch
- Dinner & Main Courses
- Side Dishes
- Salads
- Desserts & Sweets
- Drinks & Beverages
### 4. Cuisines
├── name (Text, required) - "Italian", "Mexican", "Asian"
├── slug (Text, required)
├── description (Plain Text)
└── flag-icon (Image) - Optional visual
**Purpose:** Filter by cuisine type
**Suggested Cuisines (12):**
- American, Italian, Mexican, Asian, Mediterranean, French, Indian, Thai,
Chinese, Japanese, Greek, Middle Eastern
### 5. Dietary Tags
├── name (Text, required) - "Vegan", "Gluten-Free", "Keto"
├── slug (Text, required)
├── description (Plain Text)
├── icon (Image) - Badge icon
└── color (Color) - Badge color
**Purpose:** Multi-select dietary filters
**Suggested Tags (10):**
- Vegetarian, Vegan, Gluten-Free, Dairy-Free, Keto, Paleo, Low-Carb,
High-Protein, Nut-Free, Pescatarian
### 6. Cooking Methods
├── name (Text, required) - "Baking", "Grilling", "Slow Cooker"
├── slug (Text, required)
└── description (Plain Text)
**Purpose:** Filter by cooking technique
**Suggested Methods (8):**
- Baking, Grilling, Slow Cooker, Instant Pot, Stovetop, No-Cook,
Air Fryer, Sous Vide
---
## Relationship Map
Recipe → Author (one-to-many) ↓ Recipe → Category (one-to-many) ↓ Recipe → Cuisine (one-to-many) ↓ Recipe → Dietary Tags (many-to-many) ↓ Recipe → Cooking Methods (many-to-many)
**Multi-reference count:** 2 fields (within 5-field limit ✅)
---
## Recommended Page Structure
### 1. Homepage (/)
- Hero section with featured recipe
- Category cards (8 categories)
- Latest recipes (collection list, 6 items)
- Popular recipes (sorted by view-count)
- Call-to-action
### 2. Recipes Index (/recipes)
- Collection list showing all recipes
- Filter sidebar:
- Category (tabs or dropdown)
- Cuisine (multi-select)
- Dietary tags (checkboxes)
- Cooking time (< 30 min, 30-60 min, 60+ min)
- Difficulty (easy, medium, hard)
- Pagination (12 recipes per page)
- Search bar (Finsweet CMS Filter)
### 3. Recipe Detail (/recipes/[slug])
- Hero image + title
- Prep/cook/total time + servings
- Difficulty badge + dietary badges
- Ingredients list
- Step-by-step instructions
- Author card with bio
- Related recipes (same category or tags)
- Print button
### 4. Category Pages (/category/[slug])
- Category hero image + description
- Filtered recipes by category
- Breadcrumbs: Home > Recipes > [Category]
- Related categories
### 5. Cuisine Pages (/cuisine/[slug])
- Cuisine description + flag
- Filtered recipes by cuisine
- Popular cuisines sidebar
### 6. Author Profiles (/authors/[slug])
- Author photo + bio
- Author's recipes (collection list)
- Social links
- Author stats (total recipes, join date)
### 7. Dietary Filter Pages (/diet/[slug])
- Dietary tag description
- Filtered recipes by tag
- Related dietary tags
---
## SEO Optimization
### Collection Template SEO
Recipe Detail Page (/recipes/[slug]):
SEO Title: {{recipe.name}} | Your Site Name
Meta Description: {{recipe.description}}
OG Image: {{recipe.featured-image}}
Schema: Recipe structured data (JSON-LD)
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "{{recipe.name}}",
"image": "{{recipe.featured-image}}",
"author": {
"@type": "Person",
"name": "{{recipe.author.name}}"
},
"datePublished": "{{recipe.published-date}}",
"description": "{{recipe.description}}",
"prepTime": "PT{{recipe.prep-time}}M",
"cookTime": "PT{{recipe.cook-time}}M",
"totalTime": "PT{{recipe.total-time}}M",
"recipeYield": "{{recipe.servings}} servings",
"recipeIngredient": [...],
"recipeInstructions": [...]
}
Benefits:
1. Pagination Strategy
Recipes Index page:
- Limit: 12 recipes per page
- Enable Webflow pagination
- "Load More" button for smoother UX
2. Image Optimization
Thumbnail: 400x300px (grid cards)
Featured: 1200x800px (detail pages)
Format: WebP when possible
Loading: lazy for below-fold images
3. Reference Field Strategy
Display only needed fields:
- Author name + photo (don't bind entire author object)
- Category name + color (skip unused fields)
- Each reference = query, so minimize bindings
4. Collection List Limits
Homepage: 6 featured recipes
Category pages: 12 recipes per page
Author pages: 12 recipes per page
Related recipes: 3-4 max
Automatic (no manual curation):
Ready to implement? I can help you:
Which would you like to start with?
### Example 2: Optimizing Existing CMS
**User prompt:**
My collection list is slow with 500+ items. How do I optimize?
**Response:**
⚡ CMS Performance Optimization
Analyzing your performance issue with 500+ items...
Problem: Loading 500+ items on a single page Impact:
Root Causes:
Current: Loading all 500+ items Fix: Limit to 12-20 items per page
In Webflow Designer:
Impact: 95% faster page load ✅ Time to implement: 5 minutes Effort: Low
Current: Full-resolution images loading immediately Fix: Use proper image sizes + lazy loading
Implementation:
Thumbnail images in grid:
- Size: 400x300px (not full resolution)
- Format: WebP (smaller file size)
- Loading: lazy (below fold images)
In Collection List Image settings:
- Set custom size: 400x300
- Enable lazy loading
- Use srcset for responsive images
Impact: 60-70% faster load ✅ Time to implement: 15 minutes Effort: Low
Current: Binding all reference fields Fix: Only display what you actually need
Check your Collection List:
❌ Bad: Binding entire author object
{
author.name,
author.bio,
author.photo,
author.email,
author.social-links
}
✅ Good: Bind only displayed fields
{
author.name,
author.photo
}
Why: Each reference field = separate database query Impact: 30-40% faster ✅ Time to implement: 10 minutes Effort: Low
Current: Loading all items, then hiding with conditional visibility Fix: Use collection list filters
Example:
Instead of:
- Load all 500 posts
- Hide if published-date > today (conditional)
Do this:
- Collection List Filter: published-date ≤ today
- Only loads matching items
Implementation:
Impact: 50% faster + cleaner ✅ Time to implement: 30 minutes Effort: Medium
Alternative to pagination: Smoother UX
Options: a) Webflow native: Pagination with "Load More" styling b) Finsweet: CMS Load plugin (free) c) Custom code: AJAX load more
Benefits:
Impact: Better UX, same performance as pagination ✅ Time to implement: 1-2 hours Effort: Medium
Instead of: One giant "All Posts" page Create: Multiple filtered pages
Example:
/blog → Recent posts (20 items)
/blog/featured → Featured posts only (10 items)
/blog/category/tech → Tech category (filtered)
/blog/archive → Older posts with pagination
Benefits:
Impact: Significant UX improvement ✅ Time to implement: 2-3 hours Effort: Medium
Strategy: Dynamic recent + static archives
Implementation:
Recent Content (Dynamic CMS):
- Last 50-100 posts
- Full dynamic filtering
- Fast performance
Older Content (Static):
- Archive pages for older posts
- Yearly/quarterly archives
- Still accessible but static HTML
- Rarely updated
When to use:
Impact: Maintains fast performance at scale ✅ Time to implement: 1-2 weeks Effort: High
Problem: Too many reference lookups Solution: Copy frequently-accessed data
Example:
Current (Normalized):
Post → Author (reference)
Display: {{post.author.name}}
= 2 queries (post + author)
Denormalized:
Post has author-name field (text)
Display: {{post.author-name}}
= 1 query (just post)
When to use:
Tradeoff: ⚠️ Must update in multiple places if data changes
Impact: 40-50% faster for reference-heavy pages ✅ Time to implement: Varies (requires data migration) Effort: High
Use: Finsweet CMS Filter (free)
Benefits:
Best for:
Limitation: All items loaded initially (use with pagination)
Impact: Instant filtering ✅ Time to implement: 2-4 hours Effort: Medium-High
Before deploying:
Test on staging:
Performance testing:
User testing:
Monitor after launch:
Priority 1 (Do First):
Priority 2 (This Week): 4. Add lazy loading 5. Create filtered views 6. Implement "Load More" option
Priority 3 (If Needed): 7. Finsweet CMS Filter 8. Archive old content 9. Denormalize critical data
Would you like me to walk you through implementing any of these optimizations? I can provide:
Let me know which optimization you'd like to tackle first!
### Example 3: Troubleshooting Relationships
**User prompt:**
My reference fields aren't showing up on the page. What's wrong?
**Response:**
🔍 Troubleshooting: Reference Fields Not Displaying
Let me help you diagnose and fix this issue.
Symptom: Empty space where data should be Diagnosis: Element exists but has no data binding
Fix:
Example:
Element: Text Block
Binding: Blog Post > Author (reference) > Name
Correct path:
Collection Item > author > name
Symptom: Some items show data, others don't Diagnosis: Not all collection items have the reference assigned
Fix:
Prevention:
Symptom: Reference field not appearing in dropdown Diagnosis: Element is outside collection list context
Fix:
❌ Wrong:
<div>
<text>Author: {{author.name}}</text> ← No collection context
</div>
✅ Correct:
<Collection List - Posts>
<Collection Item>
<text>Author: {{author.name}}</text> ← Inside collection context
</Collection Item>
</Collection List>
Symptom: Only showing first item or nothing Diagnosis: Multi-reference needs nested collection list
Fix:
For Multi-Reference field (Post → Tags):
❌ Wrong: Direct binding
<text>Tags: {{post.tags}}</text>
✅ Correct: Nested collection list
<Collection List - Posts>
<Collection Item - Post>
<Collection List - Get Items from Post > Tags>
<Collection Item - Tag>
<text>{{tag.name}}</text>
</Collection Item>
</Collection List>
</Collection Item>
</Collection List>
Symptom: Reference field shows nothing despite being assigned Diagnosis: Referenced item was deleted from other collection
Fix:
Prevention:
Symptom: Works in designer, not on live site Diagnosis: Referenced collection items are drafts
Fix:
Check:
CMS Collections > Authors
- Look for "Draft" badge
- Publish all needed items
- Items must be published to display via reference
Check in CMS:
1. Does the reference field exist?
2. Is it configured correctly (Reference or Multi-Reference)?
3. Is it pointing to the right collection?
Check collection items:
1. Open an item that should display
2. Check if reference field is populated
3. Verify referenced item exists and is published
Check in Designer:
1. Is element inside Collection List?
2. Is Collection List connected to correct collection?
3. Is element binding correct path?
In Designer:
1. Click Collection List
2. Set preview mode: "Item 1"
3. Cycle through items
4. Check if data appears
If it works in Designer but not live:
→ Publish issue (republish site)
Single Reference (Author):
Collection List: Posts
Collection Item: Post
Element: Text Block
Binding: Get text from Post > author > name
Multi-Reference (Tags):
Collection List: Posts
Collection Item: Post
Nested Collection List: Get items from Post > tags
Collection Item: Tag
Element: Text Block
Binding: Get text from Tag > name
Self-Reference (Related Posts):
Collection List: Posts
Collection Item: Post (current)
Nested Collection List: Get items from Post > related-posts
Collection Item: Post (related)
Element: Text Block
Binding: Get text from Post > title
Make critical references required
Provide default content
Test with incomplete data
Document reference structure
Use descriptive field names
| Symptom | Most Likely Cause | Quick Fix |
|---|---|---|
| Nothing shows | Not bound | Bind element to reference field |
| Some items empty | Reference not assigned | Assign reference in CMS |
| Works in designer, not live | Items not published | Publish referenced collection items |
| Only first tag shows | Using text binding on multi-ref | Use nested collection list |
| Shows random data | Wrong collection context | Check collection list nesting |
| Broken after deletion | Referenced item deleted | Re-assign or recreate item |
Would you like me to walk through your specific setup to diagnose the exact issue? I can:
Let me know what you'd like me to check!
## Guidelines
### Phase 1: Discovery Best Practices
**Always Start With:**
1. **Identify plan limits** - Use `sites_get` to check collection/item limits
2. **Analyze existing structure** - List collections before recommending changes
3. **Understand content volume** - Check item counts to assess scale
4. **Review current pages** - See how content is currently displayed
5. **Ask clarifying questions** - Don't assume requirements
**Plan Limits Reference:**
Starter Plan:
Basic Plan:
CMS Plan:
Business Plan:
Enterprise Plan:
Custom limits
Key Questions to Ask:
Field Type Selection Matrix:
For Text Content:
For Relationships:
For Media:
✅ Good Names:
❌ Bad Names:
date1 (unclear which date)
img (which image?)
text (what kind of text?)
field1 (no meaning)
Required vs Optional:
Make REQUIRED:
Make OPTIONAL:
tags (not always applicable)
secondary images
advanced metadata
related items
One-to-Many Guidelines:
Use when:
Examples: ✅ Post → Author (each post has one author) ✅ Product → Brand (each product has one brand) ✅ Event → Venue (each event has one venue)
Don't use when: ❌ Item can have multiple parents (use multi-reference) ❌ Relationship is temporary (consider option field) ❌ Data is simple and rarely changes (use option field instead)
**Many-to-Many Guidelines:**
Use when:
Examples: ✅ Post ↔ Tags (posts have many tags, tags apply to many posts) ✅ Product ↔ Features (products have many features, features apply to many products) ✅ Course ↔ Topics (courses cover many topics, topics span many courses)
Remember: ⚠️ Max 5 multi-reference fields per collection ⚠️ Can only filter by ONE multi-reference at a time ⚠️ Cannot sort by referenced field values ⚠️ Performance impact (more queries)
**Self-Reference Guidelines:**
Use when:
Implementation:
Example Structure: Categories: ├── Web Development (level 1, parent: null) │ ├── Frontend (level 2, parent: Web Development) │ └── Backend (level 2, parent: Web Development) └── Design (level 1, parent: null)
### Phase 4: Architecture Patterns
**Common Collection Patterns:**
**1. Blog Architecture:**
Minimal (1 collection):
Standard (3 collections):
Advanced (5+ collections):
Blog Posts
Authors
Categories
Tags
Topics/Series
2. E-commerce Architecture:
Minimal (1 collection):
Standard (4 collections):
Advanced (7+ collections):
Products
Categories
Brands
Features
Reviews
Collections (curated product groups)
Related Products
3. Portfolio Architecture:
Minimal (1 collection):
Standard (3 collections):
Advanced (5+ collections):
Projects
Clients
Services
Team Members
Technologies Used
4. Directory Architecture:
Minimal (1 collection):
Standard (4 collections):
Advanced (6+ collections):
Listings
Categories
Subcategories
Locations (hierarchical)
Amenities/Features
Reviews/Ratings
Pagination Strategy:
Content Volume → Items Per Page:
0-50 items: No pagination needed
50-100 items: 20 items per page
100-500 items: 15-20 items per page
500-1000 items: 12-15 items per page
1000+ items: 10-12 items per page + advanced filtering
Image Optimization:
Usage → Recommended Size:
Format Priority:
**Reference Field Strategy:**
Optimization Levels:
Level 1 - Display Only What's Needed: ❌ Binding entire author object: {{author}} ✅ Binding specific fields: {{author.name}}, {{author.photo}}
Level 2 - Denormalize Critical Data: Instead of: Post → Author.name (2 queries) Store: Post.author-name (1 query) When: Performance critical + data rarely changes
Level 3 - Lazy Load Related Content: Show main content immediately Load related items on interaction (click, scroll) Reduces initial page load
**Collection List Optimization:**
Best Practices:
Filter at Collection Level: ✅ Use native collection list filters ❌ Load all items then hide with conditionals
Limit Items: ✅ Set reasonable limit (12-20 items) ❌ Load unlimited items
Optimize Nested Lists: ✅ Limit nested collection lists to 3-5 items ❌ Nest multiple unlimited lists
Use Conditional Loading: ✅ Load content based on viewport ❌ Load everything upfront
Implement Pagination: ✅ Enable Webflow pagination or "Load More" ❌ Infinite scroll with all items
### Phase 6: SEO Best Practices
**Collection Template SEO:**
Required Fields:
Recommended: 5. Schema.org structured data (JSON-LD) 6. Open Graph tags (Facebook/LinkedIn) 7. Twitter Card tags 8. Alt text for all images
**Slug Best Practices:**
✅ Good Slugs:
❌ Bad Slugs:
Rules:
Lowercase only
Hyphens (not underscores)
No special characters
Descriptive (include keywords)
Max 50-60 characters
Structured Data Implementation:
Common Types:
Blog Post (Article schema):
Product (Product schema):
Event (Event schema):
Recipe (Recipe schema):
Local Business (LocalBusiness schema):
name, address, phone, openingHours
Use for: Directories, business listings
Content Editor Guidelines:
Field Usage Documentation:
Create guide for each collection:
Example - Blog Posts Collection:
Name* (required)
Slug* (required)
Post Summary
Featured Image*
Author*
... (document all fields)
**Required Field Checklist:**
Before Publishing: □ Name filled □ Slug set (no generic slugs like "untitled") □ Summary written (compelling, 160 chars) □ Featured image uploaded with alt text □ Author assigned □ Category selected □ Published date set □ Content proofread □ Links tested □ Images optimized □ SEO reviewed
**Draft → Published Workflow:**
Create as Draft:
Complete Content:
Internal Review:
Publish:
Ongoing:
### Phase 8: Migration Strategy
**When Refactoring Existing CMS:**
**Assessment Phase:**
Audit Current Structure:
Design New Structure:
Validate Approach:
**Migration Approaches:**
**Approach 1: Parallel Build (Safest)**
Pros: ✅ No downtime ✅ Easy rollback ✅ Test before fully committing
Cons: ❌ Temporarily doubled content ❌ Longer timeline ❌ Must manage both systems temporarily
**Approach 2: Direct Migration (Faster)**
Pros: ✅ Faster completion ✅ Clean cutover ✅ No duplicate content
Cons: ❌ Higher risk ❌ Potential downtime ❌ Harder to rollback
**Approach 3: Hybrid (Recommended)**
Pros: ✅ Balanced risk/speed ✅ Can catch issues early ✅ Incremental testing
Cons: ❌ Requires careful planning ❌ More complex execution
### Phase 9: Troubleshooting Common Issues
**Issue: "Collection won't save"**
Possible causes:
Diagnosis:
Fix:
Fill all required fields
Change slug to be unique
Remove special characters
Re-assign references
Contact Webflow support if persists
Issue: "Reference field not showing options"
Possible causes:
Fix:
**Issue: "Collection list showing wrong items"**
Possible causes:
Diagnosis:
Fix:
Select correct collection
Adjust or remove filters
Increase limit
Publish items
Switch to correct locale
Issue: "Pagination not working"
Possible causes:
Fix:
**Issue: "Multi-reference only showing first item"**
Cause: Wrong display method
Fix: Must use nested collection list: ❌ Direct text binding ✅ Collection List > Get items from [field] > Collection Item > Display
Example: <Collection List - Posts> <Collection Item - Post> Tags: <Collection List - Get items from Post > tags> <Collection Item - Tag> {{tag.name}} </Collection Item> </Collection List> </Collection Item> </Collection List>
### Phase 10: Advanced Techniques
**Conditional Display Based on References:**
Use Case: Show different layouts based on category
Implementation:
Limitation: Can only check one value at a time Alternative: Use option field with class name, apply class dynamically
**Scheduled Publishing:**
Implementation:
Benefits:
Limitation: Items exist but filtered, not truly unpublished
**Dynamic Sorting:**
Option 1: Manual Sort Order
Option 2: Auto Sort by Engagement
Option 3: Date-Based Sorting
Sort by Published Date (descending) for "Recent"
Sort by Created Date for "Chronological"
Combine with filters for "This Month's Top Posts"
Multi-Lingual Content:
Approach 1: Separate Collections per Language
Pros: Simple, native Webflow Cons: Must duplicate structure, harder to maintain
Approach 2: Language Field + Filter
Pros: Single structure, easier to maintain Cons: All content in one collection
Approach 3: Webflow Localization (CMS Plan+)
Pros: Official solution, best SEO Cons: Requires CMS plan+, setup complexity
**Search Functionality:**
Option 1: Native (Limited)
Option 2: Finsweet CMS Filter (Free)
Option 3: Algolia/Custom (Advanced)
Recommendation:
<100 items: Native or Finsweet
100-1000 items: Finsweet
1000+ items: Consider Algolia
Before launching CMS-driven site:
Structure:
Content:
Pages:
Weekly Installs
156
Repository
GitHub Stars
35
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
cursor139
opencode139
codex135
gemini-cli135
github-copilot127
claude-code118
NotebookLM Python库:自动化访问Google NotebookLM,实现AI内容创作与文档处理
1,500 周安装
data_pages_tool with action list_pages to see how content is displayed| Boolean |
| Single choice | Option | Status, type, category | Unlimited options |
| Date/time | Date/Time | Publish dates, events, deadlines | ISO 8601 format |
| Link to one item | Reference | Author → Post, Category → Post | One item |
| Link to multiple items | Multi-reference | Post → Tags, Post → Related Posts | Multiple items |
| External URL | Link | Social links, external resources | Max 2048 chars |
| Numeric values | Number | Prices, ratings, order, counts | Integer or decimal |
| Phone numbers | Phone | Contact numbers | E.164 format |
| Email addresses | Contact emails | Valid email format |
| Color values | Color | Theme colors, accents, brand colors | Hex format |
| Video embeds | Video | YouTube, Vimeo embeds | Embed URL |
For Metadata:
Field Naming Conventions:
SEO:
Performance:
Documentation:
Testing:
Launch: