Skip to main content

Open Graph + Twitter Cards

og:* and twitter:* tags injected into <head>, with image fallback to product/category image and a configurable global default.

Tags emitted

TagSource
og:typeproduct on product pages, website everywhere else
og:titleThe current pageConfig.getTitle() (after meta-template observer)
og:descriptionThe current pageConfig.getDescription()
og:urlurlBuilder.getCurrentUrl()
og:site_nameConfig byte8_seosuite/open_graph/site_name, falls back to store name
og:imageProduct → product_base_image cache URL. Category → getImageUrl(). Else → configured default image
twitter:cardConfigurable: summary, summary_large_image (default), app, player
twitter:titleSame as og:title
twitter:descriptionSame as og:description
twitter:imageSame as og:image
twitter:siteConfigurable @handle (skipped if not set)

Configuration

Stores → Configuration → SEO Suite → Open Graph & Twitter Cards

FieldDefault
Enable social meta tagsNo
og:site_name(store name)
Default share image URLEmpty — set this; product/category images are not always present
Twitter card typesummary_large_image
Twitter @handleEmpty

Per-store overrides supported. The default share image accepts either an absolute URL or a path relative to the store base URL.

How og:title and og:description are sourced

The OG ViewModel reads the rendered values from pageConfig — so:

  1. The meta-template observer fires first (writes templated values into pageConfig if natives are empty)
  2. The OG ViewModel renders, picking up whatever pageConfig ended up with

This composition means OG tags automatically get the same templated meta as the <title> tag, with no duplication.

GraphQL

Same logic, exposed as seo.open_graph on ProductInterface, CategoryInterface, CmsPage, CmsPageItem:

{
products(filter: { sku: { eq: "AWP-001" } }) {
items {
seo {
open_graph { name content }
}
}
}
}

Returns a flat list of {name, content} pairs — exactly the shape Next.js Metadata.openGraph wants. See VelaFront for a worked example.

Validation

LinkedIn caches aggressively — re-scrape via Post Inspector when you change OG tags or it'll keep showing the old preview for ~7 days.

Notes

  • The OG <meta property="..."> rendering and Twitter <meta name="..."> rendering are both handled in one phtml — the template detects the twitter: prefix and uses the right HTML attribute
  • No JS — pure server-rendered tags. Works identically on Luma, Hyvä, and headless storefronts