{% sw_extends '@Storefront/storefront/layout/meta.html.twig' %} {# # Canonical für alle Seiten, die keinen mitbringen. # # Shopware setzt page.metaInformation.canonical nur dort, wo es die Adresse # sicher kennt: Startseite, Kategorien, Artikel. Alle Inhaltsseiten und alle # Seiten aus eigenen Plugins (Filialen, Magazin, Liquidrechner, Anleitungen, # Berater, Deals, Kundenkarte, Starterset, Über uns, Hilfe, Impressum) # standen damit ganz ohne Canonical da – 15 von 20 geprüften Seiten. # Ohne Canonical entscheidet Google selbst, welche Schreibweise einer Adresse # die maßgebliche ist; bei /liquidrechner, /Liquidrechner und /liquidrechner/ # antwortet der Shop dreimal mit 200. # # Absichtlich zentral statt in zehn Plugin-Vorlagen: so bekommt auch die # nächste Seite automatisch einen, ohne dass jemand daran denken muss. # # Auf Seiten mit noindex wird keiner gesetzt – ein Canonical auf einer Seite, # die gar nicht in den Index soll, ist ein widersprüchliches Signal. #} {% block layout_head_canonical %} {% if page.metaInformation.canonical is defined and page.metaInformation.canonical %} {{ parent() }} {% elseif 'noindex' not in (page.metaInformation.robots|default('')) %} {# pathInfo ist hier die INTERNE Adresse: /ueber-uns kommt als /landingPage/ an. Ein Canonical darauf wäre schlimmer als keiner. Shopware legt die sprechende Adresse in zwei Attributen ab: sw-canonical-link, sobald die SEO-Auflösung eine kanonische Form kennt, sonst die ursprünglich angefragte Adresse. #} {% set rzCanonical = app.request.attributes.get('sw-canonical-link') %} {% if not rzCanonical %} {% set rzPfad = (app.request.attributes.get('sw-original-request-uri')|default(app.request.pathInfo))|split('?')|first %} {# Ohne diese Zeile erklären sich /liquidrechner und /liquidrechner/ gegenseitig für maßgeblich – beide antworten mit 200. Der Schrägstrich am Ende fällt weg, die Startseite ausgenommen. #} {% if rzPfad|length > 1 and rzPfad[-1:] == '/' %} {% set rzPfad = rzPfad[:-1] %} {% endif %} {# Geblätterte Seiten zeigen auf sich selbst, nicht auf Seite 1. Magazin und Anleitungen blättern mit ?p= wie die Trefferliste; ohne diese Zeile wäre Seite 2 aus dem Index gefallen, weil sie Seite 1 als maßgeblich benannt hätte. Alle anderen Parameter (Filter, Kampagnenkennungen) bleiben bewusst draußen. #} {% set rzSeite = app.request.query.get('p')|default(0) %} {% if rzSeite > 1 %} {% set rzPfad = rzPfad ~ '?p=' ~ rzSeite %} {% endif %} {% set rzCanonical = app.request.attributes.get('sw-storefront-url')|default(app.request.schemeAndHttpHost) ~ rzPfad %} {% endif %} {% endif %} {% endblock %} {# Gewählte Ansicht (hell/dunkel) setzen, bevor die Seite gezeichnet wird – sonst blitzt sie kurz hell auf #} {% block layout_head_favicon %} {{ parent() }} {% endblock %}