Markus Michalski FAQ

Sylius SEO Suite Pro: Configuration

Configuring Sylius SEO Suite Pro: channel settings, robots.txt, facets, global YAML configuration, admin grids, per-product and per-category fields and what the storefront head contains.

Deutsche Version

Back to overview

Sylius SEO Suite Pro: Configuration

The plugin's settings live in two places: per channel in the admin area (in the database) and globally in a YAML file. This page covers both, as far as they do not belong to a feature page of their own.

Admin area

The plugin adds exactly one entry to the sidebar: MMKreativ Plugins > SEO Suite Pro. It leads to the list of channel settings. You reach all other screens through buttons in the action bar at the top of the respective pages:

The installed plugin version is shown below the page title of the plugin's lists.

If the admin routes are not imported, the menu entry is silently missing. In that case check the routes file from the Installation page.

Everything is configured per channel. Channel settings, SEO templates, schema, hreflang and OG image settings as well as redirects each belong to one channel (templates and redirects can also apply to all channels). A channel without a row uses the defaults.

Channel settings

There is at most one row per channel. You pick the channel when creating the row, afterwards it cannot be changed.

Setting Default Description
robots.txt content empty Served at the channel's /robots.txt. Empty means User-agent: * and Allow: /.
Facet/filter pages are indexable off Whether filtered and sorted listings get index instead of noindex.
Facet/filter pages may be followed on Whether crawlers may follow the links on filtered and sorted listings (follow instead of nofollow).
Output Open Graph and Twitter Card tags on Switches the social tags on or off for the channel. Also applies when the channel has no row.
Site name empty Output as og:site_name. Empty uses the channel name.
Default image empty Absolute URL (at most 255 characters) used as og:image for pages without an image of their own. Recommended: 1200 x 630 pixels.
X/Twitter account of the shop empty Handle with a leading @, for example @sofashop (at most 15 characters after the @). Empty outputs nothing.
X/Twitter account of the author empty As above, output as twitter:creator.

robots.txt

The /robots.txt route resolves the channel from the host and returns the content from the channel settings as text/plain.

The plugin never guesses what should be blocked. Before going live, make sure the field holds the real content, because empty means everything may be crawled.

Facets

A listing counts as a facet when its URL contains one of the configured query parameters (facet_parameters) with a non-empty value, by default criteria, sorting and limit. The page number (?page=2) is deliberately not a facet: page 2 is real content and stays index, follow.

A facet page gets the channel's default instead of the normal robots value, noindex, follow out of the box: search engines skip the variant but still follow its links. If the category itself is set to noindex or nofollow, that stays so, the stricter value wins. The canonical stays the URL without filter, sort and tracking parameters (only the page number is kept). For category listings the plugin recognizes facets solely by the query string. It does not detect filter navigation that lives on its own URL path.

Global configuration

All keys are optional and live under the root mmd_sylius_seo_suite_pro in config/packages/mmd_sylius_seo_suite_pro.yaml. The following three do not belong to a feature page of their own:

Key Default Description
facet_parameters [criteria, sorting, limit] Query parameters that turn a listing into a facet variant. page is deliberately not one of them.
image_base_path /media/image/ Path under which local product images are served. Used for og:image and the image in the JSON-LD.
brand_attribute_code brand Code of the product attribute holding the brand name (for the brand in the JSON-LD). If a product has no such attribute, no brand is output. A channel's schema settings can override the code, see Structured Data.

The remaining areas are described on their feature pages. Here is the overview of all keys:

Key Default Described on
schema.max_additional_properties 25 Structured Data
seo_templates.title_max_length 60 SEO Templates
seo_templates.description_max_length 155 SEO Templates
hreflang.format language-region hreflang
hreflang.min_alternates 2 hreflang
redirects.auto_on_slug_change true Redirects
redirects.log_not_found true Redirects
redirects.not_found_log_limit 5000 Redirects
og_image.format auto OG Images
og_image.quality 85 OG Images
og_image.cache_dir %kernel.project_dir%/var/mmd_seo_og OG Images
og_image.images_path %kernel.project_dir%/public/media/image OG Images
og_image.public_dir %kernel.project_dir%/public OG Images
og_image.font_regular bundled DejaVu Sans OG Images
og_image.font_bold bundled DejaVu Sans Bold OG Images
og_image.remote_hosts [] OG Images
og_image.fetch_timeout 5 OG Images
og_image.render_budget 15 OG Images
og_image.max_source_bytes 8388608 OG Images
og_image.max_source_pixels 25000000 OG Images
audit.keep_runs 3 SEO Audit
audit.max_subjects 20000 SEO Audit
audit.stale_after_minutes 10 SEO Audit
audit.page_size 200 SEO Audit

An example with realistic values for a shop with its own CDN and facet parameters:

# config/packages/mmd_sylius_seo_suite_pro.yaml
mmd_sylius_seo_suite_pro:
    facet_parameters: [criteria, sorting, limit, color, size]
    image_base_path: /media/image/
    brand_attribute_code: manufacturer
    seo_templates:
        title_max_length: 60
        description_max_length: 155
    hreflang:
        format: language-region
        min_alternates: 2
    redirects:
        auto_on_slug_change: true
        log_not_found: true
        not_found_log_limit: 10000
    audit:
        keep_runs: 3
        max_subjects: 20000
    og_image:
        format: auto
        quality: 85
        remote_hosts: ['cdn.example.com']

The values in the example are freely chosen. Only copy the keys you actually want to change, because the defaults suit most shops.

Fields per product and category

If you opted in the fields on the Installation page, they appear in the admin area when you edit a product or category, in the translations tab, per language:

Field Default Effect
Meta title empty Output as <title>. Empty uses the name (or an SEO template). Manual titles are never cut.
Canonical path empty A path on your shop that replaces the automatic canonical, for example /furniture/blue-sofa. At most 255 characters, one leading slash, no full URL.
Search engines may index this page on Controls index or noindex for this page.
Search engines may follow links on this page on Controls follow or nofollow for this page.
Meta description (categories only) empty Only visible if you added the extra trait. At most 512 characters. Empty means no meta description. Nothing is derived from the category description.

For products you use Sylius' own meta description.

Admin grids

The plugin ships eight lists (grids). They are all connected by buttons, only the first has a sidebar entry.

Grid Purpose Reached via CRUD or read-only
Channel settings robots.txt, facets, social tags per channel Sidebar: MMKreativ Plugins > SEO Suite Pro CRUD (create, edit, delete)
SEO templates Title and description rules Button SEO templates on the channel settings CRUD
hreflang settings Groups and x-default per channel Button hreflang on the channel settings CRUD
Schema settings Attribute mapping for the JSON-LD Button Structured data on the channel settings CRUD
OG image settings Colors, logo and options of the social cards Button OG images on the channel settings CRUD, plus a preview button when editing
Redirects Manage redirects Button Redirects on the channel settings CRUD plus bulk delete, with CSV import and export
404 log Requested paths without a redirect Button 404 log on the redirect grid Read, delete and bulk delete; the action Create redirect opens the form with the path prefilled; no create or edit
Audit findings Results of the last completed audit run Audit dashboard (button SEO audit on the channel settings) Read-only, no actions

The redirect grid filters by search term, channel (including "all channels"), origin and enabled state. The 404 log filters by search term and channel, the audit findings by subject code, channel, check, severity and subject type.

What the head contains

The plugin hooks into the storefront head through Twig Hooks, without overriding a template. It acts on product pages, category listings and the home page. Cart, checkout and customer account stay untouched.

The home page gets the same set of tags, built from the channel, but keeps Sylius' own <title> (the channel name). The Twitter card is summary_large_image as soon as an image exists. If the channel's social tags switch is off, the Open Graph and Twitter tags are omitted and everything else stays.

Practical examples

robots.txt for a shop

Enter the rules you want in the channel's robots.txt content field. Since Sylius shop URLs carry a language prefix, you block cart, checkout and account with wildcards:

User-agent: *
Disallow: /*/cart/
Disallow: /*/checkout/
Disallow: /*/account/
Sitemap: https://www.example.com/sitemap-index.xml

The paths are an example. Check them against your shop's real routes, because the plugin does not know your URL structure.

Block a staging channel completely

If your staging has a channel of its own, block it for all crawlers with this content:

User-agent: *
Disallow: /

The robots.txt is a request to crawlers, not access protection. Secure staging with password protection as well. Also, this rule sets no noindex tags, it only forbids crawling.

Adjusting the facet policy

A shop with color and size filters wants these variants recognized as facets too and given noindex, follow. For that, add the parameters in the global configuration:

mmd_sylius_seo_suite_pro:
    facet_parameters: [criteria, sorting, limit, color, size]

Leave the channel setting Facet/filter pages are indexable off. If you deliberately want to index a filter combination (for example a landing page for "blue sofas"), build a category of its own for it instead of releasing facets: a category has its own URL, its own title and its own canonical.

The facet setting applies to all filtered listings of a channel together. There is no exception per filter combination.