webflow/webflow-mcp:cms-best-practices
Expert guidance on Webflow CMS architecture and best practices. Use when planning collections, setting up relationships, optimizing content structure, or troubleshooting CMS issues.
npx skills add https://github.com/webflow/webflow-skills --skill webflow-mcp:cms-best-practices
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 scaledata_pages_tool with action list_pages to see how content is displayed10. Select field types: Choose appropriate field types for each content element
11. Plan relationships: Design one-to-many and many-to-many connections
12. Consider taxonomy: Determine categories, tags, and organizational structure
13. Plan for scale: Design for growth (pagination, performance, limits)
14. Document decisions: Explain tradeoffs and reasoning
15. Generate recommendations: Provide specific, actionable guidance
16. Prioritize changes: Organize by impact (quick wins vs. long-term)
17. Explain tradeoffs: Help users understand limitations and workarounds
18. Validate against best practices: Check against Webflow limitations and patterns
19. Provide alternatives: Offer multiple approaches when applicable
20. Create implementation roadmap: Break down into phases
21. Provide step-by-step instructions: Clear guidance for implementation
22. Offer to assist: Suggest using other skills (cms-collection-setup, bulk-cms-update)
23. Document structure: Recommend documentation for team reference
24. Suggest testing approach: Guide on how to validate changes
25. Plan for migration: If refactoring, provide migration strategy
Use 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 | 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 | Email | Contact emails | Valid email format |
| Color values | Color | Theme colors, accents, brand colors | Hex format |
| Video embeds | Video | YouTube, Vimeo embeds | Embed 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
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]):
### Structured Data (Recipe Schema)
{
"@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:**
- Rich snippets in Google search
- Better CTR (images, ratings, cook time in results)
- Voice search optimization
- Better recipe discovery
---
## Performance Optimization
### For 50-200 Recipes:
**1. Pagination Strategy**
Recipes Index page:
**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:
**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
---
## Content Strategy
### Phase 1: Foundation (Weeks 1-2)
- [ ] Create Authors (3-5 authors)
- [ ] Create Categories (8 categories)
- [ ] Create Cuisines (10-12 cuisines)
- [ ] Create Dietary Tags (8-10 tags)
- [ ] Create Cooking Methods (6-8 methods)
### Phase 2: Initial Content (Weeks 3-4)
- [ ] Add 20-30 flagship recipes
- [ ] Ensure even distribution across categories
- [ ] High-quality photos for all
- [ ] Complete metadata (all fields filled)
### Phase 3: Growth (Ongoing)
- [ ] Add 5-10 recipes per week
- [ ] Monitor popular recipes (view-count)
- [ ] Update seasonal recipes
- [ ] Maintain content quality
---
## Implementation Roadmap
### Week 1: Setup
- [ ] Create all 6 collections with fields
- [ ] Define relationships (references)
- [ ] Set required fields
- [ ] Add help text for editors
### Week 2: Content Structure
- [ ] Populate support collections (Authors, Categories, etc.)
- [ ] Create test recipes (3-5) with all fields
- [ ] Validate data structure
### Week 3: Pages
- [ ] Build homepage layout
- [ ] Create recipe index page with filters
- [ ] Design recipe detail template
- [ ] Build category/cuisine/author pages
### Week 4: Polish
- [ ] Implement SEO (titles, descriptions, schema)
- [ ] Add breadcrumbs and navigation
- [ ] Optimize images
- [ ] Test pagination and filters
### Week 5: Launch
- [ ] Add 20-30 initial recipes
- [ ] Final QA testing
- [ ] Publish site
- [ ] Monitor performance
---
## Quick Wins
### 1. Use View Count for "Popular Recipes"
- Add Number field: view-count
- Sort collection list by view-count (descending)
- Show "Most Popular" section on homepage
### 2. Auto-Calculate Total Time
- Option 1: Manual (editors enter prep + cook)
- Option 2: Display logic (show prep + cook sum in UI)
- Best for: Performance (no extra calculation)
### 3. Print-Friendly Recipe Cards
- Add "Print Recipe" button
- Use custom code to format for printing
- Include: Ingredients, Instructions, Image
- Exclude: Navigation, Ads, Comments
### 4. Related Recipes Logic
**Automatic (no manual curation):**
- Filter by same category
- Filter by shared dietary tags
- Sort by published-date (recent first)
- Limit to 3-4 recipes
---
Ready to implement? I can help you:
1. Create these collections using cms-collection-setup skill
2. Add initial content using bulk-cms-update skill
3. Build the page structure
4. Optimize for SEO and performance
Which would you like to start with?
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...
---
## Current Issue Diagnosis
**Problem:** Loading 500+ items on a single page
**Impact:**
- Slow page load (5-10 seconds or more)
- High bounce rate
- Poor SEO rankings
- Bad user experience
- Server stress
**Root Causes:**
1. Too many items loaded at once
2. Possibly too many reference field lookups
3. Large unoptimized images
4. No pagination or lazy loading
5. Complex nested collection lists
---
## Immediate Fixes (High Impact, Low Effort)
### 1. Implement Pagination ⚡ CRITICAL
**Current:** Loading all 500+ items
**Fix:** Limit to 12-20 items per page
**In Webflow Designer:**
1. Select your Collection List
2. Settings > Limit items: 20
3. Enable "Paginate items"
4. Style pagination controls
**Impact:** 95% faster page load ✅
**Time to implement:** 5 minutes
**Effort:** Low
### 2. Optimize Image Loading 🖼️
**Current:** Full-resolution images loading immediately
**Fix:** Use proper image sizes + lazy loading
**Implementation:**
Thumbnail images in grid:
In Collection List Image settings:
**Impact:** 60-70% faster load ✅
**Time to implement:** 15 minutes
**Effort:** Low
### 3. Reduce Visible Reference Fields 🔗
**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
---
## Medium-Term Solutions (Moderate Impact, Moderate Effort)
### 4. Filter at Collection Level
**Current:** Loading all items, then hiding with conditional visibility
**Fix:** Use collection list filters
**Example:**
Instead of:
Do this:
**Implementation:**
1. Collection List Settings
2. Add Filter: [field] [condition] [value]
3. Combine multiple filters with AND/OR
**Impact:** 50% faster + cleaner ✅
**Time to implement:** 30 minutes
**Effort:** Medium
### 5. Implement "Load More" Button
**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:**
- Users stay on same page (no page refresh)
- Better for mobile UX
- Smooth scrolling experience
**Impact:** Better UX, same performance as pagination ✅
**Time to implement:** 1-2 hours
**Effort:** Medium
### 6. Create Filtered Views
**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:**
- Faster individual pages
- Better SEO (targeted pages)
- Easier navigation
- Reduced cognitive load
**Impact:** Significant UX improvement ✅
**Time to implement:** 2-3 hours
**Effort:** Medium
---
## Long-Term Solutions (High Impact, High Effort)
### 7. Archive Old Content
**Strategy:** Dynamic recent + static archives
**Implementation:**
Recent Content (Dynamic CMS):
Older Content (Static):
**When to use:**
- 1000+ items
- Clear separation between recent/old content
- Archive content rarely accessed
**Impact:** Maintains fast performance at scale ✅
**Time to implement:** 1-2 weeks
**Effort:** High
### 8. Denormalize Data
**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:**
- Reference data rarely changes (author names)
- Performance is critical
- You can maintain consistency
**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
### 9. Implement Client-Side Filtering
**Use:** Finsweet CMS Filter (free)
**Benefits:**
- Load once, filter instantly
- No page refreshes
- Multiple simultaneous filters
- Search functionality
- Better UX
**Best for:**
- 100-500 items
- Users need advanced filtering
- Desktop-first audience
**Limitation:** All items loaded initially (use with pagination)
**Impact:** Instant filtering ✅
**Time to implement:** 2-4 hours
**Effort:** Medium-High
---
## Comprehensive Optimization Checklist
### Immediate Actions (Today):
- [ ] Limit collection list to 20 items
- [ ] Enable pagination
- [ ] Optimize image sizes (400x300 for thumbnails)
- [ ] Enable lazy loading on images
- [ ] Remove unused reference field bindings
### This Week:
- [ ] Add collection list filters (date, category)
- [ ] Create filtered category pages
- [ ] Test performance on mobile
- [ ] Implement "Load More" if desired
- [ ] Audit all collection lists on site
### This Month:
- [ ] Consider Finsweet CMS Filter for advanced filtering
- [ ] Create archive structure if >1000 items
- [ ] Optimize all images (WebP format)
- [ ] Review and optimize reference relationships
- [ ] Set up performance monitoring
---
## Performance Benchmarks
### Before Optimization:
- Load time: 8-12 seconds
- Items loaded: 500+
- Images: Full resolution
- References: All fields
### After Quick Fixes (Pagination + Images):
- Load time: 1-2 seconds ✅
- Items loaded: 20
- Images: Optimized thumbnails
- References: Only displayed fields
### After Full Optimization:
- Load time: <1 second ✅
- Lighthouse score: 90+ ✅
- Smooth pagination
- Instant client-side filtering
---
## Testing Your Changes
**Before deploying:**
1. **Test on staging:**
- Publish to staging domain first
- Verify pagination works
- Check image quality
- Test all filters
2. **Performance testing:**
- Use Google PageSpeed Insights
- Test on mobile (3G/4G)
- Check Lighthouse scores
- Verify Core Web Vitals
3. **User testing:**
- Navigate through pages
- Test search/filter
- Check mobile experience
- Verify no broken links
4. **Monitor after launch:**
- Watch analytics (bounce rate, time on page)
- Check error logs
- Monitor load times
- Gather user feedback
---
## Quick Implementation Priority
**Priority 1 (Do First):**
1. Pagination (20 items per page)
2. Optimize images (thumbnails)
3. Remove unused reference bindings
**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:
- Step-by-step Webflow Designer instructions
- Custom code snippets
- Testing checklist
- Performance monitoring setup
Let me know which optimization you'd like to tackle first!
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.
---
## Common Causes & Solutions
### Issue 1: Reference Field Not Bound to Element
**Symptom:** Empty space where data should be
**Diagnosis:** Element exists but has no data binding
**Fix:**
1. Select the element (text, image, etc.)
2. Settings panel > Get text/image from [Collection Item]
3. Select your reference field
4. Choose the specific field to display
**Example:**
Element: Text Block
Binding: Blog Post > Author (reference) > Name
Correct path:
Collection Item > author > name
### Issue 2: Reference Field Has No Value
**Symptom:** Some items show data, others don't
**Diagnosis:** Not all collection items have the reference assigned
**Fix:**
1. Go to CMS Collections
2. Open your collection
3. Check items that aren't displaying
4. Ensure reference field is populated
**Prevention:**
- Make reference fields "Required" if critical
- Provide default/fallback content
### Issue 3: Wrong Collection Context
**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>
### Issue 4: Multi-Reference Display Error
**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>
### Issue 5: Deleted Referenced Item
**Symptom:** Reference field shows nothing despite being assigned
**Diagnosis:** Referenced item was deleted from other collection
**Fix:**
1. Go to referring collection
2. Check reference field assignments
3. Re-assign to existing items
4. Or recreate deleted item
**Prevention:**
- Be careful when deleting referenced items
- Check "Used in X items" before deleting
- Archive instead of delete if possible
### Issue 6: Collection Not Published
**Symptom:** Works in designer, not on live site
**Diagnosis:** Referenced collection items are drafts
**Fix:**
1. Go to referenced collection (e.g., Authors)
2. Find draft items
3. Publish them
4. Republish main site
**Check:**
CMS Collections > Authors
---
## Step-by-Step Diagnostic
### Step 1: Verify Collection Structure
Check in CMS:
### Step 2: Verify Data Exists
Check collection items:
### Step 3: Verify Page Structure
Check in Designer:
### Step 4: Test in Designer
In Designer:
If it works in Designer but not live:
→ Publish issue (republish site)
---
## Testing Reference Fields
### Manual Test Checklist
- [ ] Create test item with reference populated
- [ ] Preview in Designer
- [ ] Check element binding path
- [ ] Publish and view live
- [ ] Verify all items display correctly
- [ ] Check items without references (should fail gracefully)
### Common Binding Patterns
**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
---
## Prevention Tips
### Best Practices:
1. **Make critical references required**
- Required: Yes for author, category
- Optional: Yes for tags, related items
2. **Provide default content**
- If reference is empty, show "Uncategorized"
- Use conditional visibility for optional references
3. **Test with incomplete data**
- Create test items with missing references
- Ensure graceful fallback
4. **Document reference structure**
- Create guide for content editors
- Explain which fields are required
- Show how to assign references
5. **Use descriptive field names**
- ❌ "ref-1", "link"
- ✅ "author", "primary-category", "related-posts"
---
## Quick Fixes by Symptom
| 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:
- Review your collection structure
- Check your reference field configuration
- Analyze your page layout
- Test your data bindings
- Provide custom troubleshooting
Let me know what you'd like me to check!
Always Start With:
data_sites_tool with action get_site to check collection/item limitsPlan Limits Reference:
Starter Plan:
- Collections: 1
- Items per collection: 50
- CMS pages: 50
Basic Plan:
- Collections: 2
- Items total: 200
- CMS pages: 150
CMS Plan:
- Collections: 20
- Items total: 2,000
- CMS pages: 2,000
Business Plan:
- Collections: 40
- Items total: 10,000
- CMS pages: 10,000
Enterprise Plan:
- Custom limits
Key Questions to Ask:
Field Type Selection Matrix:
For Text Content:
For Relationships:
For Media:
For Metadata:
Field Naming Conventions:
✅ Good Names:
- published-date (descriptive, hyphenated)
- author (clear purpose)
- main-image (specifies which image)
- post-summary (explains use case)
❌ Bad Names:
- date1 (unclear which date)
- img (which image?)
- text (what kind of text?)
- field1 (no meaning)
Required vs Optional:
Make REQUIRED:
- name (unique identifier)
- slug (URL generation)
- primary relationships (author, category)
- publish date (for sorting)
Make OPTIONAL:
- tags (not always applicable)
- secondary images
- advanced metadata
- related items
One-to-Many Guidelines:
Use when:
- Each item has exactly ONE parent
- Parent data is reused across many items
- You want centralized data management
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:
- Items can have multiple relationships
- Relationships need to be managed separately
- You want flexible cross-linking
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:
- Building hierarchies (categories, menu structure)
- Related items from same collection
- Organizational trees
Implementation:
- Add Reference field pointing to same collection
- Name it clearly: parent-category, related-posts
- Limit depth to 2-3 levels for practical display
- Consider adding "level" number field for easier filtering
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)
Common Collection Patterns:
1. Blog Architecture:
Minimal (1 collection):
- Blog Posts
Standard (3 collections):
- Blog Posts
- Authors
- Categories
Advanced (5+ collections):
- Blog Posts
- Authors
- Categories
- Tags
- Topics/Series
2. E-commerce Architecture:
Minimal (1 collection):
- Products
Standard (4 collections):
- Products
- Categories
- Brands
- Features/Specifications
Advanced (7+ collections):
- Products
- Categories
- Brands
- Features
- Reviews
- Collections (curated product groups)
- Related Products
3. Portfolio Architecture:
Minimal (1 collection):
- Projects
Standard (3 collections):
- Projects
- Clients
- Services/Categories
Advanced (5+ collections):
- Projects
- Clients
- Services
- Team Members
- Technologies Used
4. Directory Architecture:
Minimal (1 collection):
- Listings
Standard (4 collections):
- Listings
- Categories
- Locations
- Owners/Managers
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:
- Thumbnail (grid cards): 400x300px
- Featured image (hero): 1200x800px
- Gallery images: 800x600px
- Background images: 1920x1080px
Format Priority:
1. WebP (best compression, modern browsers)
2. JPEG (photos, complex images)
3. PNG (transparency needed, simple graphics)
4. SVG (logos, icons, simple graphics)
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:
1. Filter at Collection Level:
✅ Use native collection list filters
❌ Load all items then hide with conditionals
2. Limit Items:
✅ Set reasonable limit (12-20 items)
❌ Load unlimited items
3. Optimize Nested Lists:
✅ Limit nested collection lists to 3-5 items
❌ Nest multiple unlimited lists
4. Use Conditional Loading:
✅ Load content based on viewport
❌ Load everything upfront
5. Implement Pagination:
✅ Enable Webflow pagination or "Load More"
❌ Infinite scroll with all items
Collection Template SEO:
Required Fields:
1. SEO Title (dynamic from item name)
2. Meta Description (dynamic from summary/description)
3. OG Image (dynamic from featured image)
4. Canonical URL (automatic)
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:
- webflow-cms-best-practices
- ultimate-guide-to-seo
- 2026-web-design-trends
❌ Bad Slugs:
- Post1
- new-post-copy-3
- untitled-entry
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):
- headline, author, datePublished, image
- Use for: Blog posts, news articles
Product (Product schema):
- name, description, price, availability, image
- Use for: E-commerce products
Event (Event schema):
- name, startDate, location, organizer
- Use for: Events, webinars, conferences
Recipe (Recipe schema):
- name, ingredients, instructions, cookTime
- Use for: Recipe sites, food blogs
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:
1. Name* (required)
- Post title
- Keep under 60 characters for SEO
- Make it catchy and descriptive
2. Slug* (required)
- Auto-generated from name
- Can be edited for SEO optimization
- Use hyphens, lowercase only
3. Post Summary
- Brief description (160 characters max)
- Used for: Grid cards, meta description, social sharing
- Make it compelling - this is what users see first
4. Featured Image*
- Hero image for post
- Minimum size: 1200x800px
- Always add alt text for accessibility
5. Author*
- Select from Authors list
- Can't find author? Ask admin to create in Authors collection
... (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:
1. Create as Draft:
- Fill required fields minimum
- Save to preserve work
2. Complete Content:
- Write/upload all content
- Add images with alt text
- Set metadata
3. Internal Review:
- Proofread
- Check formatting
- Test links
- Verify references
4. Publish:
- Set published date
- Change from draft to published
- Verify on live site
- Share/promote
5. Ongoing:
- Update as needed
- Monitor performance
- Refresh outdated content
- Archive if no longer relevant
When Refactoring Existing CMS:
Assessment Phase:
1. Audit Current Structure:
- List all collections
- Count items per collection
- Map relationships
- Identify problems
2. Design New Structure:
- Plan improvements
- Design new collections
- Define new relationships
- Create migration plan
3. Validate Approach:
- Test with sample data
- Verify relationships work
- Check performance
- Get stakeholder approval
Migration Approaches:
Approach 1: Parallel Build (Safest)
1. Build new collections alongside old
2. Migrate content gradually
3. Test thoroughly
4. Switch pages to new collections
5. Archive old collections
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)
1. Create new collections
2. Export data from old collections
3. Transform data format
4. Import to new collections
5. Update pages to use new collections
6. Delete old collections
Pros:
✅ Faster completion
✅ Clean cutover
✅ No duplicate content
Cons:
❌ Higher risk
❌ Potential downtime
❌ Harder to rollback
Approach 3: Hybrid (Recommended)
1. Create new structure
2. Migrate in batches (50-100 items)
3. Test each batch
4. Update pages incrementally
5. Monitor for issues
6. Complete full migration
Pros:
✅ Balanced risk/speed
✅ Can catch issues early
✅ Incremental testing
Cons:
❌ Requires careful planning
❌ More complex execution
Issue: "Collection won't save"
Possible causes:
1. Required field empty
2. Slug conflict (duplicate)
3. Invalid characters in slug
4. Reference pointing to deleted item
5. Field validation failing
Diagnosis:
- Check for red highlighted fields
- Verify slug is unique
- Test without optional fields
- Check browser console for errors
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:
1. Referenced collection has no items
2. Referenced collection items not published
3. Wrong collection selected in reference settings
4. Browser cache issue
Fix:
1. Create items in referenced collection first
2. Publish all items in referenced collection
3. Double-check reference field configuration
4. Clear cache and refresh
Issue: "Collection list showing wrong items"
Possible causes:
1. Wrong collection selected
2. Filters configured incorrectly
3. Limit set too low
4. Items not published
5. Wrong CMS locale selected
Diagnosis:
- Check collection list settings
- Review filter conditions
- Check item publish status
- Verify correct locale
Fix:
- Select correct collection
- Adjust or remove filters
- Increase limit
- Publish items
- Switch to correct locale
Issue: "Pagination not working"
Possible causes:
1. Pagination not enabled
2. Limit set equal to or greater than total items
3. JavaScript conflict
4. Custom code interfering
Fix:
1. Enable pagination in collection list settings
2. Set limit lower than total items (e.g., 20)
3. Test with all custom code disabled
4. Check for JavaScript errors in console
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>
<Inline> {{tag.name}} </Inline>
</Collection Item>
</Collection List>
</Collection Item>
</Collection List>
Conditional Display Based on References:
Use Case: Show different layouts based on category
Implementation:
1. Add conditional visibility to elements
2. Condition: Category = "Video Posts"
3. Show video player layout
4. Condition: Category = "Image Posts"
5. Show image gallery layout
Limitation: Can only check one value at a time
Alternative: Use option field with class name, apply class dynamically
Scheduled Publishing:
Implementation:
1. Add "Published Date" field (Date/Time)
2. In collection list settings:
- Add filter: Published Date ≤ Current Date
3. Set future dates on items to schedule
Benefits:
- No plugins needed
- Native Webflow functionality
- Items auto-appear on set date
Limitation: Items exist but filtered, not truly unpublished
Dynamic Sorting:
Option 1: Manual Sort Order
- Add "Sort Order" number field
- Manually assign: 1, 2, 3, 4...
- Sort collection list by Sort Order (ascending)
Option 2: Auto Sort by Engagement
- Add "View Count" number field
- Increment on page view (requires custom code)
- Sort by View Count (descending) for "Popular" lists
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
- Blog Posts EN
- Blog Posts ES
- Blog Posts FR
Pros: Simple, native Webflow
Cons: Must duplicate structure, harder to maintain
Approach 2: Language Field + Filter
- Add "Language" option field (EN, ES, FR)
- Filter collection lists by language
- Use URL parameter or cookie for language switch
Pros: Single structure, easier to maintain
Cons: All content in one collection
Approach 3: Webflow Localization (CMS Plan+)
- Use Webflow's native localization
- Create secondary locales
- Translate CMS content per locale
Pros: Official solution, best SEO
Cons: Requires CMS plan+, setup complexity
Search Functionality:
Option 1: Native (Limited)
- Use filter inputs on collection lists
- Basic keyword matching only
- No fuzzy search or relevance ranking
Option 2: Finsweet CMS Filter (Free)
- Client-side search and filtering
- Works with existing collection lists
- Multiple simultaneous filters
- Requires JavaScript
Option 3: Algolia/Custom (Advanced)
- Server-side search with AI
- Typo-tolerance, synonyms
- Fast and scalable
- Requires integration, costs money
Recommendation:
- <100 items: Native or Finsweet
- 100-1000 items: Finsweet
- 1000+ items: Consider Algolia
Before launching CMS-driven site:
Structure:
Content:
Pages:
SEO:
Performance:
Documentation:
Testing:
Launch:
Take webflow/webflow-mcp:cms-best-practices from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.