[Hilfe gesucht] og:image zeigt immer nur Shoplogo, obwohl Kategoriebild gesetzt

Hallo zusammen,

ich bin aktuell dabei, die strukturierten Metadaten auf Kategorieseiten zu optimieren – konkret die Open Graph und Twitter Card Bilder (og:image, twitter:image). Die Idee ist ganz einfach:

Zeige das Kategoriebild – und wenn keines vorhanden ist, das Shoplogo als Fallback.

Doch egal was ich versuche: es wird immer nur das Shoplogo ausgegeben, auch wenn die Kategorie korrekt ein Bild hat.

Mein Setup:

  • Shopware 6.6.10.3
  • ThemeWare Electric (Pro)** aktiv
  • Eigene Twig-Extension über Plugin SeoCategoryStructuredData
  • Ziel: layout_head_meta_og_image sauber überschreiben
  • Kategorie hat definitiv ein Bild (category.media) – mehrfach geprüft

Mein Template-Override:

{# Pfad: custom/plugins/SeoCategoryStructuredData/src/Resources/views/storefront/themeware/twt-base-meta-tags.html.twig #}
{% sw_extends '@TcinnThemeWareElectric/storefront/themeware/twt-base-meta-tags.html.twig' %}

{% block twt_layout_head_meta_tags %}
    {% block layout_head_meta_og_image %}
        {% set imageUrl = null %}

        {% if category is defined %}
            {% if category.media is defined and category.media is not null %}
                {% set imageUrl = category.media.url %}
            {% else %}
                {% set imageUrl = asset('media/9f/6d/de/1696285257/Logo_254x174.jpg') %}
            {% endif %}
        {% elseif page.product is defined %}
            {% set imageUrl = page.product.cover.media.url %}
        {% endif %}

        {% if imageUrl is not null %}
            <meta property="og:image" content="{{ imageUrl|e('html_attr') }}">
            <meta name="twitter:image" content="{{ imageUrl|e('html_attr') }}">
        {% endif %}
    {% endblock %}
{% endblock %}

Bereits geprüft / versucht:

  • Kategorie-Bild ist gesetzt, korrekt im Backend sichtbar
  • Twig Template wird geladen (Vererbung funktioniert)
  • Symfony Profiler zeigt korrekten Blockbaum (bis runter zu layout_head_meta_og_image)
  • Cache mehrfach geleert, Theme kompiliert, Plugin neu gebaut
  • Es greifen keine parent()-Aufrufe, wenn der Block nicht existiert
  • Keine Fehlermeldung im Frontend – Ausgabe ist nur falsch
  • Auch beim SEO-Check (z. B. https://validator.schema.org) wird nur das Shoplogo gefunden
  • Weitere Plugins aktiv: GTM (DtgsGoogleTagManagerSw6), Sendinblue, Endereco, Doofinder – alle bereits auf Twig-Ebene verfolgt

Frage:

Was könnte der Grund sein, dass category.media an dieser Stelle immer null ist – obwohl ein Kategoriebild gepflegt ist?

Muss category.media evtl. aktiv in den Storefront-Context geladen werden?

Oder überschreibt ThemeWare Electric hier etwas so, dass die Daten aus dem Scope verschwinden?

Bin echt ratlos – für jeden konkreten Hinweis dankbar :folded_hands:

@Mercator wir hatten das gleiche Problem für LinkedIn und haben dafür ein Plugin entwickelt, schreib mir mal (ggf. klappt das auch direkt für Twitter, war bislang kein UseCase)

Hi und besten Dank für deine Antwort. :slight_smile:

Dann ist es in der Tat ein allgemeines Problem und keines welches ein Plugin von mir verursacht. :thinking: Was mich doch sehr verwundert, dass dies bislang niemand wirklich bemängelt hat (oder ich habe es nicht gesehen). Meine Produktekategorien werden z.B. alle ohne Kategoriebild bei Google indexiert - selbst das Shop-Logo wird wahrscheinlich aufgrund von double content ignoriert. Das hatte ich zuvor noch bei keinem anderen Shop so erlebt. Und das sich dieses Problem derart hartnäckig beheben lässt, hat mich ehrlichgesagt sehr überrascht.

Es wäre natürlich flott, wenn du mir Euer Plugin zukommen lassen könntest. Wenn ich damit diese Probleme in den Griff bekommen könnte, wäre es schon toll. :slight_smile:

LG

Also ich hab das eben mal kurz in einem 6.6.10.3 probiert, das category-Object gibt es bei mir gar nicht, somit natürlich auch nicht die media.url. Ich schau grad, ob man da mit einem Event reinkommt.

Und konntest du etwas herausfinden?

Das finde ich so schräg, dass bis jetzt NIEMAND bemängelt hat, dass Kategoriebilder in Shopware 6 von Google nicht indexiert werden. Das ist ja SEO-Technisch nicht unrelevant.

Ich hab grad keine Zeit, es auszuprobieren, müsste aber über das NavigationPageLoadedEvent gehen. Da gibt es getPage und dann

$page->getCategory()->getMedia()->getUrl();