Skip to main content
Web Stories for WordPress includes comprehensive SEO features to help your stories rank in search engines and appear correctly when shared on social media.

Automatic SEO Features

The plugin automatically adds essential SEO elements to all published stories without any configuration required.

Document Metadata

Every story includes automatically generated metadata (from includes/Discovery.php:78-158):
  • Title Tag: Generated from story title using wp_get_document_title()
  • Meta Description: Extracted from story excerpt or content
  • Canonical URL: Points to the story’s permalink
  • Robots Meta: Respects WordPress robots settings
  • Generator Tag: Identifies content as Web Stories
<title>Your Story Title - Site Name</title>
<meta name="description" content="Story excerpt or description" />
<link rel="canonical" href="https://example.com/story-url/" />

Schema.org Structured Data

The plugin automatically generates rich schema.org metadata for better search engine understanding.

Article Schema

Each story includes Article schema markup (from includes/Discovery.php:288-372):
{
  "@context": "http://schema.org",
  "@type": "Article",
  "mainEntityOfPage": "https://example.com/story/",
  "headline": "Story Title",
  "datePublished": "2024-01-15T10:00:00+00:00",
  "dateModified": "2024-01-16T15:30:00+00:00",
  "author": {
    "@type": "Person",
    "name": "Author Name"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Your Site Name",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png",
      "width": 600,
      "height": 60
    }
  },
  "image": {
    "@type": "ImageObject",
    "url": "https://example.com/story-poster.jpg",
    "width": 640,
    "height": 853
  }
}

Product Schema

Stories with shopping integrations automatically include product schema (from includes/Discovery.php:385-429):
{
  "mainEntity": {
    "@type": "ItemList",
    "numberOfItems": "2",
    "itemListElement": [
      {
        "@type": "Product",
        "productID": "12345",
        "name": "Product Name",
        "brand": "Brand Name",
        "description": "Product description",
        "url": "https://example.com/product",
        "image": "https://example.com/product-image.jpg",
        "offers": {
          "@type": "Offer",
          "price": "99.99",
          "priceCurrency": "USD"
        },
        "aggregateRating": {
          "@type": "AggregateRating",
          "ratingValue": 4.5,
          "reviewCount": 123
        }
      }
    ]
  }
}

Open Graph Metadata

Stories include comprehensive Open Graph tags for optimal appearance on Facebook, LinkedIn, and other social platforms (from includes/Discovery.php:438-479).
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="article" />
<meta property="og:title" content="Story Title" />
<meta property="og:description" content="Story description" />
<meta property="og:url" content="https://example.com/story/" />
<meta property="og:site_name" content="Your Site Name" />
<meta property="og:image" content="https://example.com/story-poster.jpg" />
<meta property="og:image:width" content="640" />
<meta property="og:image:height" content="853" />
<meta property="article:published_time" content="2024-01-15T10:00:00+00:00" />
<meta property="article:modified_time" content="2024-01-16T15:30:00+00:00" />

Twitter Card Metadata

Stories include Twitter Card tags for optimal appearance when shared on Twitter/X (from includes/Discovery.php:489-519).
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://example.com/story-poster.jpg" />
<meta name="twitter:image:alt" content="Story Title" />
The plugin uses summary_large_image card type to showcase your story’s poster image prominently in Twitter feeds.

RSS Feed Support

Web Stories automatically integrate with your WordPress RSS feed:
  • Stories appear in your main RSS feed (if not disabled)
  • Dedicated story RSS feed available at /feed/web-story/
  • Feed links automatically added to story pages
  • Compatible with feed readers and aggregators
See includes/Discovery.php:238-277 for feed implementation details.

Customizing SEO Metadata

You can customize or extend the default SEO metadata using WordPress filters:

Customize Schema.org Metadata

add_filter('web_stories_story_schema_metadata', function($metadata, $post) {
    // Add custom properties
    $metadata['keywords'] = get_the_tags($post->ID);
    
    // Add breadcrumb schema
    $metadata['breadcrumb'] = [
        '@type' => 'BreadcrumbList',
        'itemListElement' => [
            [
                '@type' => 'ListItem',
                'position' => 1,
                'name' => 'Home',
                'item' => home_url()
            ],
            [
                '@type' => 'ListItem',
                'position' => 2,
                'name' => 'Stories',
                'item' => get_post_type_archive_link('web-story')
            ]
        ]
    ];
    
    return $metadata;
}, 10, 2);

Customize Open Graph Metadata

add_filter('web_stories_story_open_graph_metadata', function($metadata, $post) {
    // Add Facebook App ID
    $metadata['fb:app_id'] = '1234567890';
    
    // Add custom tags
    $metadata['og:section'] = 'Technology';
    
    return $metadata;
}, 10, 2);

Customize Twitter Card Metadata

add_filter('web_stories_story_twitter_metadata', function($metadata, $post) {
    // Add Twitter username
    $metadata['twitter:site'] = '@yourhandle';
    $metadata['twitter:creator'] = '@authorhandle';
    
    return $metadata;
}, 10, 2);

Disabling Default Metadata

If you’re using an SEO plugin (like Yoast SEO or Rank Math), you may want to disable specific metadata:
// Disable document title
add_filter('web_stories_enable_document_title', '__return_false');

// Disable meta description
add_filter('web_stories_enable_metadata', '__return_false');

// Disable schema.org metadata
add_filter('web_stories_enable_schemaorg_metadata', '__return_false');

// Disable Open Graph metadata
add_filter('web_stories_enable_open_graph_metadata', '__return_false');

// Disable Twitter metadata
add_filter('web_stories_enable_twitter_metadata', '__return_false');
Only disable default metadata if your SEO plugin explicitly supports Web Stories. Otherwise, you may lose important SEO benefits.

SEO Best Practices

  • Keep titles under 60 characters for search results
  • Include primary keywords naturally
  • Make titles descriptive and engaging
  • Avoid clickbait or misleading titles
  • Write unique descriptions for each story
  • Include relevant keywords naturally
  • Keep descriptions between 120-160 characters
  • Accurately summarize story content
  • Use high-quality vertical images (9:16 aspect ratio)
  • Recommended size: 640×853 pixels minimum
  • Compress images for fast loading
  • Include descriptive alt text
  • Ensure images are visually appealing in search results
  • Configure publisher logo in Stories > Settings
  • Use a square logo (1:1 aspect ratio)
  • Minimum size: 96×96 pixels
  • Maximum size: 600×600 pixels
  • File formats: PNG, JPG, or WebP
  • Create original, valuable content
  • Follow Google’s Web Stories guidelines
  • Maintain consistent publishing schedule
  • Avoid duplicate content
  • Ensure stories are mobile-friendly

Story Discovery

Google Search Console

  1. Verify your site in Google Search Console
  2. Monitor story performance under Performance reports
  3. Check for AMP validation errors under AMP section
  4. Submit XML sitemap if using an SEO plugin with sitemap support
Google may show your stories in:
  • Google Discover: Featured story carousel
  • Google Search: Story results for relevant queries
  • Google Images: Individual story pages
  • Google App: Featured in browse and search
Story visibility in Google surfaces is not guaranteed and depends on content quality, user engagement, and Google’s algorithmic selection.

XML Sitemap Support

Web Stories work with popular SEO plugins:
  • Yoast SEO: Automatically includes stories in XML sitemap
  • Rank Math: Add stories to sitemap under Settings > Sitemap Settings
  • All in One SEO: Enable Web Stories in Search Appearance settings
  • SEOPress: Stories included in default sitemap configuration

Troubleshooting

  1. Verify stories are published and publicly accessible
  2. Check for AMP validation errors using AMP Validator
  3. Ensure robots.txt isn’t blocking story URLs
  4. Submit sitemap to Google Search Console
  5. Allow 2-4 weeks for Google to index new stories
  1. Check Open Graph metadata using Facebook Debugger
  2. Verify Twitter Card using Twitter Card Validator
  3. Clear social media caches after fixing metadata
  4. Ensure poster images are publicly accessible
  1. Test schema using Google Rich Results Test
  2. Verify publisher logo meets size requirements
  3. Check that all required fields are populated
  4. Ensure dates are in correct ISO 8601 format

Build docs developers (and LLMs) love