Luma
Zero configuration needed. The module ships a view/frontend/layout/default.xml that injects four blocks into the standard head.additional container:
| Block | Template | Purpose |
|---|---|---|
byte8.seosuite.canonical | html/head/canonical.phtml | <link rel="canonical"> for CMS pages (extends Magento's product/category canonical) |
byte8.seosuite.hreflang | html/head/hreflang.phtml | <link rel="alternate" hreflang> per active store |
byte8.seosuite.open_graph | html/head/open-graph.phtml | og:* and twitter:* meta tags |
byte8.seosuite.structured_data | html/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 bybyte8_seosuite/canonical/is_active); products/categories use Magento core's canonical<link rel="alternate" hreflang=— one tag per active store (controlled bybyte8_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.