seofields
docs

Configuration

Customize every aspect of the plugin — from field labels to preview behavior.

Basic Configuration

The plugin works with zero configuration:

sanity.config.ts
import seofields from 'sanity-plugin-seofields'

export default defineConfig({
  plugins: [
    seofields(),  // All defaults — preview, dashboard, all fields
  ],
})

Configuration Options

OptionTypeDefaultDescription
seoPreviewboolean | objecttrueEnable/disable live SEO preview
baseUrlstringBase URL for SEO preview generation
fieldOverridesobject{}Customize field titles and descriptions
fieldVisibilityobject{}Hide fields on specific document types
defaultHiddenFieldsstring[][]Hide fields globally across all types
enableDashboardbooleantrueEnable/disable the SEO Health Dashboard

Advanced Configuration

sanity.config.ts
import seofields, { SeoFieldsPluginConfig } from 'sanity-plugin-seofields'

export default defineConfig({
  plugins: [
    seofields({
      // Live SERP preview with custom URL prefix
      seoPreview: {
        prefix: (doc) => `/${doc.slug?.current || 'page'}`
      },

      // Base URL for preview
      baseUrl: 'https://www.example.com',

      // Customize field labels and descriptions
      fieldOverrides: {
        title: {
          title: 'Page Title',
          description: 'The main title that appears in search results',
        },
        description: {
          title: 'Meta Description',
          description: 'A brief summary for search engines',
        },
        canonicalUrl: {
          title: 'Canonical URL',
          description: 'Preferred URL to avoid duplicate content',
        },
        metaImage: {
          title: 'Social Media Image',
          description: 'Image used when sharing on social platforms',
        },
        keywords: {
          title: 'SEO Keywords',
          description: 'Keywords describing the page content',
        },
      },

      // Hide fields on specific document types
      fieldVisibility: {
        page: {
          hiddenFields: ['openGraphSiteName', 'twitterSite'],
        },
        post: {
          hiddenFields: ['openGraphSiteName', 'twitterSite'],
        },
      },

      // Or hide fields globally
      defaultHiddenFields: ['openGraphSiteName', 'twitterSite'],
    } satisfies SeoFieldsPluginConfig),
  ],
})

SEO Preview Options

The seoPreview option controls the live SERP preview shown alongside SEO fields:

Preview options
// Disable preview entirely
seofields({ seoPreview: false })

// Enable with default behavior
seofields({ seoPreview: true })

// Custom URL prefix using document data
seofields({
  seoPreview: {
    prefix: (doc) => `/blog/${doc.slug?.current}`
  }
})

Available Field Keys

These keys can be used in both fieldOverrides and fieldVisibility:

title
description
canonicalUrl
metaImage
keywords
metaAttributes
robots
openGraphUrl
openGraphTitle
openGraphDescription
openGraphSiteName
openGraphType
openGraphImage
twitterCard
twitterSite
twitterCreator
twitterTitle
twitterDescription
twitterImage

Tip: Hiding openGraphImage or twitterImage also hides their URL and type variants to keep the editor experience consistent.