SEO & Social Sharing
β οΈ PRELIMINARY FEATURE - BETA
This feature is currently in beta testing. The functionality and best practices may evolve based on user feedback. We encourage you to test thoroughly and share your experience with us.
Overview
This guide shows you how to optimize your BetterForms pages for search engines and social media sharing using the new seoMeta field type. When configured correctly, your pages will:
β Appear in Google search results with rich titles and descriptions
β Display beautiful previews when shared on Slack, Teams, Discord
β Show engaging cards on Facebook, LinkedIn, Twitter
β Improve click-through rates from search and social
β Provide better user experience for link sharing
Why This Matters
Without SEO Meta Tags
When you share a link, you get a plain URL with no context:
https://yourdomain.com/products/widget-pro
(no preview, no image, no description)With SEO Meta Tags
Your links become rich, engaging previews:
Quick Start
Step 1: Add the Field to Your Form
In your form schema, add a seoMeta field:
Step 2: Enable SSR for the Layout
In your site settings, ensure SSR is enabled for this page:
Step 3: Test Your Page
Visit your page as a bot to see the meta tags:
Look for your meta tags in the <head> section!
Common Scenarios
Static Page
For pages with fixed content (About Us, Contact, Pricing):
Dynamic Page (using _calc)
_calc)For database-driven pages, add a _calc suffix to any key. The value is evaluated as a JavaScript expression with access to model (populated via onFormRequest hook).
_calc expressions support standard JavaScript β optional chaining, ternaries, string concatenation, array methods, fallbacks with ||, etc.
Supported Meta Tags
All standard Open Graph (og:) and Twitter Card (twitter:) tags are supported. The most commonly used:
title, description
Google, Bing
og:title, og:description, og:image, og:type
Facebook, LinkedIn, Slack, Discord, WhatsApp
twitter:card, twitter:title, twitter:image
Twitter/X
Use "twitter:card": "summary_large_image" for large image previews. A 1200x630px image works across all platforms.
Testing
Test your page as a bot using curl:
Use platform debuggers to preview and refresh cached social cards:
Facebook: https://developers.facebook.com/tools/debug/
LinkedIn: https://www.linkedin.com/post-inspector/
Slack: paste link in channel, use
/unfurl clear <url>to refresh
Best Practices
Titles: under 60 characters; descriptions: 150-160 characters
Images: use absolute URLs, 1200x630px, under 1MB, publicly accessible
Use fallback values in
_calcexpressions (e.g.model.title || 'Default')Enable
onFormRequesthook for dynamic_calccontentEach page should have unique meta tags
Page Language
Control the <html lang="..."> attribute for international SEO using the language key in metaTags:
Defaults to
"en"(English) if not specifiedUse any ISO 639-1 code (
en,fr,es,de,ja, etc.)For dynamic language:
"language_calc": "model.userLanguage || 'en'"
Client-Side Meta Tags
The seoMeta field also works for regular (non-bot) users in the browser. When the Vue app loads:
document.titleis updated (browser tab shows the correct title)<html lang="...">is setAll meta tags are injected into
<head>(useful for single-page app navigation)Tags are cleaned up when navigating away from the page
This means social sharing tools that read the live DOM (not just the initial HTML) will see the correct meta tags.
Feedback
This is a preliminary feature. Please share feedback or suggestions in the Slack channel #suggestions.
Last Updated: February 2026
Last updated
Was this helpful?