Skip to main content

Luma

Zero configuration needed. The module ships a view/frontend/layout/default.xml that injects four blocks into the standard head.additional container:

BlockTemplatePurpose
byte8.seosuite.canonicalhtml/head/canonical.phtml<link rel="canonical"> for CMS pages (extends Magento's product/category canonical)
byte8.seosuite.hreflanghtml/head/hreflang.phtml<link rel="alternate" hreflang> per active store
byte8.seosuite.open_graphhtml/head/open-graph.phtmlog:* and twitter:* meta tags
byte8.seosuite.structured_datahtml/head/structured-data.phtml<script type="application/ld+json"> blocks

All four templates are pure server-rendered HTML — no Knockout, no RequireJS, no jQuery dependencies in the output.

Verifying

Visit any product, category, or CMS page → View source → search for:

  • <link rel="canonical" — present on CMS pages (controlled by byte8_seosuite/canonical/is_active); products/categories use Magento core's canonical
  • <link rel="alternate" hreflang= — one tag per active store (controlled by byte8_seosuite/hreflang/is_active)
  • <meta property="og: — Open Graph tags
  • <script type="application/ld+json"> — JSON-LD blocks

Layered-nav behaviour

When the Layered Navigation SEO controls feature is enabled and the current request carries filter params, an observer (Byte8\SeoSuite\Observer\ApplyLayeredNavRobotsObserver) calls pageConfig->setRobots('NOINDEX,FOLLOW') before the page renders. The result lands in the standard Magento <meta name="robots"> tag.

Meta-template observer

When the Meta Templates feature is enabled, Byte8\SeoSuite\Observer\ApplyMetaTemplatesObserver listens on layout_generate_blocks_after and overwrites the page title / description with the rendered template — but only when the entity's native meta_title / meta_description field is empty.

This means:

  • Products that have a hand-written meta_title → unchanged
  • Products with no meta_title → templated title (e.g. Acme Widget Pro | Sample Store)

Customising templates

Override any of the four phtml files by copying into your theme:

app/design/frontend/<Vendor>/<theme>/Byte8_SeoSuite/templates/html/head/<file>.phtml

The view models stay the same; only the markup changes. Because the templates are pure HTML output, there's no JS layer to keep in sync.

Next

  • Hyvä — what's different (spoiler: nothing meaningful)
  • VelaFront — the headless GraphQL surface