Sylius SEO Suite Pro: Konfiguration
Konfiguration der Sylius SEO Suite Pro: Channel-Einstellungen, robots.txt, Facets, globale YAML-Konfiguration, Admin-Grids, Felder pro Produkt und Kategorie sowie die Head-Ausgabe der Storefront.
Sylius SEO Suite Pro: Konfiguration
Die Einstellungen des Plugins liegen an zwei Stellen: pro Channel im Admin-Bereich (in der Datenbank) und global in einer YAML-Datei. Auf dieser Seite findest Du beides, soweit es keiner eigenen Funktionsseite gehört.
Admin-Bereich
Das Plugin legt genau einen Eintrag in der Seitenleiste an: MMKreativ Plugins > SEO Suite Pro. Er führt zur Liste der Channel-Einstellungen. Alle anderen Bildschirme erreichst Du über Buttons in der Aktionsleiste oben auf den jeweiligen Seiten:
- Auf der Liste der Channel-Einstellungen führen die Buttons SEO-Templates, Weiterleitungen, hreflang, Strukturierte Daten, SEO-Audit und OG-Bilder zu den jeweiligen Bildschirmen.
- Auf der Redirect-Liste führen die Buttons 404-Log, Import und Export weiter. Das 404-Log führt über Weiterleitungen zurück.
- Die übrigen Bildschirme haben einen Button zurück zu den Channel-Einstellungen beziehungsweise (beim Audit) zum SEO-Audit.
Unter dem Seitentitel der Plugin-Listen steht die installierte Plugin-Version.
Sind die Admin-Routen nicht importiert, fehlt der Menüeintrag stillschweigend. Prüfe dann die Routen-Datei aus der Installation.
Alles wird pro Channel konfiguriert. Channel-Einstellungen, SEO-Templates, Schema-, hreflang- und OG-Bild-Einstellungen sowie Redirects gehören jeweils zu einem Channel (bei Templates und Redirects ist auch "alle Channels" möglich). Hat ein Channel keine Zeile, gelten die Standardwerte.
Channel-Einstellungen
Pro Channel gibt es höchstens eine Zeile. Beim Anlegen wählst Du den Channel aus, danach lässt er sich nicht mehr ändern.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Inhalt der robots.txt | leer | Wird unter /robots.txt des Channels ausgeliefert. Leer bedeutet User-agent: * und Allow: /. |
| Facetten-/Filterseiten sind indexierbar | aus | Ob gefilterte und sortierte Listings index statt noindex bekommen. |
| Facetten-/Filterseiten dürfen gecrawlt werden | an | Ob Crawler den Links auf gefilterten und sortierten Listings folgen dürfen (follow statt nofollow). |
| Open-Graph- und Twitter-Card-Tags ausgeben | an | Schaltet die Social-Tags für den Channel ein oder aus. Gilt auch, wenn der Channel keine Zeile hat. |
| Seitenname | leer | Wird als og:site_name ausgegeben. Leer verwendet den Channel-Namen. |
| Standardbild | leer | Absolute URL (maximal 255 Zeichen), die für Seiten ohne eigenes Bild als og:image dient. Empfohlen: 1200 x 630 Pixel. |
| X/Twitter-Konto des Shops | leer | Handle mit führendem @, zum Beispiel @sofashop (maximal 15 Zeichen nach dem @). Leer gibt nichts aus. |
| X/Twitter-Konto des Autors | leer | Wie oben, wird als twitter:creator ausgegeben. |
robots.txt
Die Route /robots.txt löst den Channel über den Host auf und liefert den Inhalt aus den Channel-Einstellungen als text/plain.
- Ist das Feld leer, hat der Channel keine Zeile oder lässt sich der Host keinem Channel zuordnen, antwortet das Plugin mit
User-agent: *undAllow: /. Es gibt also nie ein 404 und nie eine leere Antwort. Der sichere Standard ist "alles erlauben", nicht "alles sperren". - Ohne gestartete Session ist die Antwort öffentlich cachebar (eine Stunde). Eine Änderung kann dadurch bei einem vorgeschalteten Cache bis zu einer Stunde dauern.
- Das Plugin ergänzt nichts automatisch, auch keine
Sitemap:-Zeile. Die produktiverobots.txtschreibst Du selbst.
Das Plugin rät nie, was gesperrt werden soll. Prüfe vor dem Go-Live, dass im Feld der echte Inhalt steht, denn leer heißt: alles darf gecrawlt werden.
Facets
Ein Listing zählt als Facet, wenn die URL einen der konfigurierten Query-Parameter (facet_parameters) mit nicht-leerem Wert enthält, standardmäßig criteria, sorting und limit. Die Seitennummer (?page=2) ist bewusst kein Facet: Seite 2 ist echter Inhalt und bleibt index, follow.
Eine Facet-Seite bekommt statt der normalen Robots-Angabe die Channel-Vorgabe, ab Werk noindex, follow: Suchmaschinen überspringen die Variante, folgen aber ihren Links. Ist die Kategorie selbst auf noindex oder nofollow gestellt, bleibt das so, die strengere Angabe gewinnt. Der Canonical bleibt die URL ohne Filter, Sortierung und Tracking-Parameter (nur die Seitennummer bleibt erhalten). Das Plugin erkennt Facets bei Kategorie-Listings allein am Query-String. Eine Filternavigation, die auf einem eigenen URL-Pfad liegt, erkennt es nicht.
Globale Konfiguration
Alle Schlüssel sind optional und liegen unter dem Root mmd_sylius_seo_suite_pro in config/packages/mmd_sylius_seo_suite_pro.yaml. Die folgenden drei gehören keiner eigenen Funktionsseite:
| Schlüssel | Standard | Beschreibung |
|---|---|---|
facet_parameters |
[criteria, sorting, limit] |
Query-Parameter, die ein Listing zur Facet-Variante machen. page gehört bewusst nicht dazu. |
image_base_path |
/media/image/ |
Pfad, unter dem lokale Produktbilder ausgeliefert werden. Er dient für og:image und das Bild im JSON-LD. |
brand_attribute_code |
brand |
Code des Produktattributs mit dem Markennamen (für die Marke im JSON-LD). Hat ein Produkt kein solches Attribut, wird keine Marke ausgegeben. Die Schema-Einstellungen eines Channels können den Code überschreiben, siehe Strukturierte Daten. |
Die übrigen Bereiche sind auf ihren Funktionsseiten beschrieben. Hier die Übersicht aller Schlüssel:
| Schlüssel | Standard | Beschreibung auf |
|---|---|---|
schema.max_additional_properties |
25 |
Strukturierte Daten |
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-Bilder |
og_image.quality |
85 |
OG-Bilder |
og_image.cache_dir |
%kernel.project_dir%/var/mmd_seo_og |
OG-Bilder |
og_image.images_path |
%kernel.project_dir%/public/media/image |
OG-Bilder |
og_image.public_dir |
%kernel.project_dir%/public |
OG-Bilder |
og_image.font_regular |
mitgelieferte DejaVu Sans | OG-Bilder |
og_image.font_bold |
mitgelieferte DejaVu Sans Bold | OG-Bilder |
og_image.remote_hosts |
[] |
OG-Bilder |
og_image.fetch_timeout |
5 |
OG-Bilder |
og_image.render_budget |
15 |
OG-Bilder |
og_image.max_source_bytes |
8388608 |
OG-Bilder |
og_image.max_source_pixels |
25000000 |
OG-Bilder |
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 |
Ein Beispiel mit realistischen Werten für einen Shop mit eigenem CDN und Facet-Parametern:
# 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']
Die Werte des Beispiels sind frei gewählt. Übernimm nur die Schlüssel, die Du wirklich ändern willst, denn die Standardwerte passen für die meisten Shops.
Felder pro Produkt und Kategorie
Hast Du die Felder in der Installation freigeschaltet, erscheinen sie im Admin-Bereich beim Bearbeiten eines Produkts oder einer Kategorie im Tab für die Übersetzungen, je Sprache:
| Feld | Standard | Wirkung |
|---|---|---|
| Meta-Titel | leer | Wird als <title> ausgegeben. Leer verwendet den Namen (oder ein SEO-Template). Manuelle Titel werden nie gekürzt. |
| Canonical-Pfad | leer | Pfad auf Deinem Shop, der den automatischen Canonical ersetzt, zum Beispiel /moebel/blaues-sofa. Maximal 255 Zeichen, ein führender Slash, keine volle URL. |
| Suchmaschinen dürfen diese Seite indexieren | an | Steuert index oder noindex für diese Seite. |
| Suchmaschinen dürfen Links auf dieser Seite folgen | an | Steuert follow oder nofollow für diese Seite. |
| Meta-Beschreibung (nur Kategorien) | leer | Nur sichtbar, wenn Du das Zusatz-Trait eingebunden hast. Maximal 512 Zeichen. Leer bedeutet: keine Meta-Description. Aus der Kategoriebeschreibung wird nichts abgeleitet. |
Bei Produkten verwendest Du die Meta-Description von Sylius selbst.
Admin-Grids
Das Plugin bringt acht Listen (Grids) mit. Alle sind per Buttons verbunden, nur die erste hat einen Seitenleisten-Eintrag.
| Grid | Zweck | Erreichbar über | CRUD oder nur Lesen |
|---|---|---|---|
| Channel-Einstellungen | robots.txt, Facets, Social-Tags pro Channel | Seitenleiste: MMKreativ Plugins > SEO Suite Pro | CRUD (anlegen, bearbeiten, löschen) |
| SEO-Templates | Titel- und Description-Regeln | Button SEO-Templates bei den Channel-Einstellungen | CRUD |
| hreflang-Einstellungen | Gruppen und x-default pro Channel | Button hreflang bei den Channel-Einstellungen | CRUD |
| Schema-Einstellungen | Attribut-Zuordnung für das JSON-LD | Button Strukturierte Daten bei den Channel-Einstellungen | CRUD |
| OG-Bild-Einstellungen | Farben, Logo und Optionen der Social-Cards | Button OG-Bilder bei den Channel-Einstellungen | CRUD, plus Vorschau-Button beim Bearbeiten |
| Redirects | Redirects verwalten | Button Weiterleitungen bei den Channel-Einstellungen | CRUD plus Massenlöschung, dazu CSV-Import und Export |
| 404-Log | Aufgerufene Pfade ohne Redirect | Button 404-Log beim Redirect-Grid | Lesen, Löschen und Massenlöschen; die Aktion Weiterleitung anlegen öffnet das Formular mit vorausgefülltem Pfad; kein Anlegen oder Bearbeiten |
| Audit-Befunde | Ergebnisse des letzten abgeschlossenen Audit-Laufs | Audit-Dashboard (Button SEO-Audit bei den Channel-Einstellungen) | Nur Lesen, ohne Aktionen |
Das Redirect-Grid filtert nach Suchbegriff, Channel (auch "alle Channels"), Herkunft und Aktiv-Status. Das 404-Log filtert nach Suchbegriff und Channel, die Audit-Befunde nach Subjekt-Code, Channel, Check, Schweregrad und Subjekt-Typ.
Was im Head ausgegeben wird
Das Plugin hängt sich über Twig Hooks in den Head der Storefront ein, ohne ein Template zu überschreiben. Es greift auf Produktseiten, Kategorie-Listings und der Startseite. Warenkorb, Checkout und Kundenkonto bleiben unberührt.
<meta name="description">,<link rel="canonical">und<meta name="robots"><link rel="alternate" hreflang>für die hreflang-Alternates, siehe hreflang- Open-Graph-Tags (
og:type,og:title,og:description,og:url,og:site_name,og:locale,og:imagesamt Typ, Breite, Höhe und Alt-Text, soweit vorhanden) - Twitter-Card-Tags (
twitter:card,twitter:title,twitter:description,twitter:image,twitter:site,twitter:creator) - Pro Schema-Knoten ein
<script type="application/ld+json">, siehe Strukturierte Daten - Der
<title>: Das Basis-Layout von Sylius rendert ihn über einen Twig-Block, den ein Hook nicht ändern kann. Ein Response-Listener ersetzt deshalb das eine<title>-Element im fertigen HTML.
Die Startseite bekommt denselben Satz Tags, aufgebaut aus dem Channel, behält aber den <title> von Sylius (den Channel-Namen). Die Twitter-Card ist summary_large_image, sobald ein Bild vorhanden ist. Ist der Social-Tags-Schalter des Channels aus, entfallen die Open-Graph- und Twitter-Tags, alles andere bleibt.
Praxisbeispiele
robots.txt für einen Shop
Im Feld Inhalt der robots.txt des Channels trägst Du die gewünschten Regeln ein. Da die Shop-URLs von Sylius ein Sprach-Präfix haben, sperrst Du Warenkorb, Checkout und Konto mit Wildcards:
User-agent: *
Disallow: /*/cart/
Disallow: /*/checkout/
Disallow: /*/account/
Sitemap: https://www.example.com/sitemap-index.xml
Die Pfade sind ein Beispiel. Prüfe sie gegen die echten Routen Deines Shops, denn das Plugin kennt Deine URL-Struktur nicht.
Staging-Channel komplett sperren
Hat Dein Staging einen eigenen Channel, sperrst Du ihn mit diesem Inhalt für alle Crawler:
User-agent: *
Disallow: /
Die robots.txt ist eine Bitte an Crawler und kein Zugriffsschutz. Sichere Staging zusätzlich per Passwortschutz ab. Außerdem setzt diese Regel keine
noindex-Tags, sie verbietet nur das Crawlen.
Facet-Richtlinie anpassen
Ein Shop mit den Filtern Farbe und Größe will, dass auch diese Varianten als Facet erkannt werden und noindex, follow bekommen. Dafür ergänzt Du in der globalen Konfiguration die Parameter:
mmd_sylius_seo_suite_pro:
facet_parameters: [criteria, sorting, limit, color, size]
Die Channel-Einstellung Facetten-/Filterseiten sind indexierbar lässt Du aus. Wenn Du bewusst eine Filterkombination indexieren willst (zum Beispiel eine Landingpage für "blaue Sofas"), baust Du dafür besser eine eigene Kategorie, statt Facets freizugeben: Eine Kategorie hat eine eigene URL, einen eigenen Titel und einen eigenen Canonical.
Die Einstellung für Facets gilt für alle gefilterten Listings eines Channels gemeinsam. Es gibt keine Ausnahme pro Filterkombination.