Skip to main content

Google Shopping Feed in Shopware einrichten

  • Geschrieben von Michael am 13.10.2020

PDF herunterladen

Schritt für Schritt: Wie man den Google Shopping Feed in Shopware Systemen einbaut

Für Betreiber von Online Shops ist Google Shopping ein hervorragend geeigneter Kanal, um vergleichsweise kostengünstig an Conversion-starken Traffic zu gelangen. Damit die angebotenen Produkte ins Google Merchant Center geladen werden, muss ein Produktexport („Google Shopping Feed“) eingerichtet werden, über den zwingend notwendige und optionale Produktdatenspezifikationen an Google übergeben werden. In diesem Beitrag zeige ich Ihnen, wie dieser im Online-Shop-System Shopware umgesetzt werden kann.

Vorbetrachtungen

Es gibt verschiedene Möglichkeiten, Produktdaten ins Google Merchant Center zu übergeben. Die einfachste aber gleichzeitig unflexibelste ist der manuelle Upload einer Tabelle, die die Produktdatenspezifikationen für jedes Produkt enthält.

Für größere Online-Shops, bei denen sich Angebot, Lagerbestand und Preise regelmäßig ändern, ist ein solcher manueller Upload nach jeder Änderung viel zu aufwändig. Vielmehr bietet es sich an, einen regelmäßigen Export (z. B. täglich) der Produktdaten durchzuführen und diesen automatisch dem Google Merchant Center zur Verfügung zu stellen.

Konfiguration des Produktexports im Shopware-Backend

google shopping shopware backend prodkutexport
Ein solcher automatischer Export wird im Shopware-Backend unter „Marketing > Produktexporte“ konfiguriert.

Hier sollte sich bereits eine Liste mit Templates für verschiedene Produktexporte finden. Der automatische Export für Google Shopping kann u. a. als XML-Datei oder als TXT-Datei erfolgen. Im Beispiel zeige ich Ihnen die Konfiguration für den Export als TXT-Datei. Das vorbereitete Shopware-Template trägt den Titel „Google Produktsuche“. Über einen Klick auf den Stift in der rechten Spalte kann dies bearbeitet werden.

googl shopping shopware feed produktfeed

Im oberen Bereich des sich öffnenden Fensters erfolgt die grundlegende Konfiguration des Produkt-Feeds. Hier können u. a. aussagekräftige Feed- und Dateinamen vergeben, die zu exportierenden Shops und Kategorien ausgewählt sowie der Feed-Export aktiv gestellt werden. Sollen die Produktvarianten exportiert werden, muss im entsprechenden Dropdown-Auswahlfeld „Ja“ ausgewählt werden.

screenshot formatierung google shopping feed shopware
In der unteren Fensterhälfte finden sich verschiedene Tabs, in denen der Produkt-Feed selbst angepasst werden kann.

Im ersten Tab „Formatierung“ sollte als Zeichenkodierung „UTF-8“ sowie als Dateiformat „TXT mit Tab als Trennzeichen“ gesetzt werden. Damit ist sichergestellt, dass im Google Merchant Center Sonderzeichen wie Umlaute o. ä. korrekt interpretiert und in den Shopping-Anzeigen fehlerfrei dargestellt werden.

screenshop kopfzeile google shopping feed shopware
In den folgenden Tabs werden Struktur und Inhalt der Export-Tabelle bestimmt.

In den folgenden Tabs werden Struktur und Inhalt der Export-Tabelle bestimmt. Im Tab „Kopfzeile“ müssen die Attribute der Produktdatenspezifikation festgelegt werden, die an das Google Merchant Center übergeben werden sollen. Sie stellen die Spaltenbeschriftungen der Export-Tabelle dar. Einige Attribute sind verpflichtend (z. B. „id“, „title“), andere optional (z. B. google_product_category). Eine vollständige Auflistung findet sich direkt bei Google.

Für eine grundlegende Konfiguration sollten die folgenden Attribute exportiert werden:

{strip}

id{#S#}

title{#S#}

descripton{#S#}

link{#S#}

image_url{#S#}

brand{#S#}

identifier_exists{#S#}

gtin{#S#}

mpn{#S#}

price{#S#}

currency{#S#}

availability

{/strip}{#L#}

google shopping feed shopware template screenshot

Im Tab „Template“ wird festgelegt, aus welchen Quellen und in welchem Format die zu exportierenden Werte für die Export-Tabelle stammen. Für eine grundlegende Konfiguration sollte dort der folgende Code eingefügt werden:

{assign var=”string” value=$sArticle.articleID|articleImages:$sArticle.ordernumber:2:”##”|escape}

{assign var=”productVariantImage” value=”##”|explode:$string}

{strip}

{$sArticle.ordernumber|escape}{#S#}

{$sArticle.name|strip_tags|strip|truncate:80:”…”:true|htmlentities|escape}{#S#}

{$sArticle.description_long|strip_tags|html_entity_decode|trim|regex_replace:”#[^w.%&-+ ]#iu”:””|strip|truncate:500:”…”:true|htmlentities|escape}{#S#}

{$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}{/if}{#S#}

{$productVariantImage[0]}{#S#}

{$sArticle.supplier|escape}{#S#}

{if $sArticle.ean}yes{else}no{/if}{#S#}

{$sArticle.ean|escape}{#S#}

{$sArticle.suppliernumber|escape}{#S#}

{$sArticle.price|replace:”,”:”.”}{” EUR”}{#S#}

{if $sArticle.esd}Auf Lager

{elseif $sArticle.instock>0}Auf Lager

{elseif $sArticle.releasedate && $sArticle.releasedate|strtotime > $smarty.now}Vorbestellt

{elseif $sArticle.shippingtime}Auf Lager

{else}Nicht auf Lager{/if}

{/strip}{#L#}

produktexport google shopping shopware backend
Ein solcher automatischer Export wird im Shopware-Backend unter „Marketing > Produktexporte“ konfiguriert.

{assign var=”string” value=$sArticle.articleID|articleImages:$sArticle.ordernumber:2:”##”|escape}

{assign var=”productVariantImage” value=”##”|explode:$string}

Dieser dem eigentlichen Code für den Google Shopping Feed Produktexport vorangestellte Abschnitt fragt die Artikelbilder pro Artikel-ID ab und speichert diese in einem String, der später ausgelesen werden kann.

{strip}

{$sArticle.ordernumber|escape}{#S#}

Als Produkt-ID („id“) wird die Artikelnummer gesetzt.

{$sArticle.name|strip_tags|strip|truncate:80:”…”:true|htmlentities|escape}{#S#}

Das Attribut „title“ enthält die hinterlegte Artikel-Bezeichnung, verkürzt auf 80 Zeichen und bereinigt von möglicherweise in diesem Feld genutzten HTML-Code.

{$sArticle.description_long|strip_tags|html_entity_decode|trim|regex_replace:”#[^w.%&-+ ]#iu”:””|strip|truncate:500:”…”:true|htmlentities|escape}{#S#}

Die Artikel-Beschreibung („description“) speist sich aus der auf 500 Zeichen verkürzten Beschreibung, die um HTML-Code und andere Sonderzeichen bereinigt wird.

{$sArticle.articleID|link:$sArticle.name}{if $sArticle.additionaltext}?number={$sArticle.ordernumber}{/if}{#S#}

Der Link zur Artikeldetailseite. Handelt es sich um Produktvarianten, so wird der Parameter „?number=“ an die URL des Stamm-Artikels zugefügt und um die Artikelnummer der Produktvariante ergänzt.

Bsp.:

Artikel ohne Variante: https://www.shop-domain.tld/artikel-ohne-variante

Variante: https://www.shop-domain.tld/variantenartikel?number=AN0001

{$productVariantImage[0]}{#S#}

Der Link zum Artikelbild („image_url“) führt immer zum ersten dem Artikel zugewiesenen Bild (Index 0). Das Auslesen erfolgt aus dem in den ersten beiden Code-Zeilen definierten String.

{if $sArticle.ean}yes{else}no{/if}{#S#}

Wenn für einen Artikel keine GTIN existiert, gibt es im Google Shopping Feed die Möglichkeit, über das Attribut „identifier_exists“ ein „no“ zu übergeben. Über diese Code-Zeile wird abgefragt, ob ein Wert für die als GTIN zu verwendende EAN dem Artikel zugeordnet ist. Wenn dem nicht so ist, wird die Ausprägung auf „no“ gesetzt, andernfalls auf „yes“.

{$sArticle.ean|escape}{#S#}

Als „gtin“ wird die am Artikel hinterlegte EAN genutzt.

{$sArticle.supplier|escape}{#S#}

Als Attribut „brand“ wird der Inhalt des Artikel-Feldes „Hersteller“ gesetzt.

{$sArticle.suppliernumber|escape}{#S#}

Die „mpn“ wird mit dem Inhalt des Artikel-Feldes „Herstellernummer“ gefüllt.

{$sArticle.price|replace:”,”:”.”}{” EUR”}{#S#}

Der Preis des Artikels. Das Komma als Trennzeichen wird im Feed durch einen Punkt ersetzt. Zudem wird an den Preis gefolgt von einem Leerzeichen die Währungsbezeichnung „EUR“ angehängt.

{if $sArticle.esd}Auf Lager

{elseif $sArticle.instock>0}Auf Lager

{elseif $sArticle.releasedate && $sArticle.releasedate|strtotime > $smarty.now}Vorbestellt

{elseif $sArticle.shippingtime}Auf Lager

{else}Nicht auf Lager{/if}

Die Artikelverfügbarkeit wird anhand verschiedener Konditionen an den Google Shopping Feed übergeben. Falls es sich um einen Download-Artikel handelt ($sArticle.esd), der Bestand ($sArticle.instock) größer als 0 ist oder eine Lieferzeit ($sArticle.shippingtime) hinterlegt ist, wird für das Attribut „availability“ der Wert „Auf Lager“ übergeben. Wenn das Veröffentlichungsdatum in der Zukunft liegt, dann wird das Attribut auf „Vorbestellt“ gesetzt. In allen anderen Fällen wird „Nicht auf Lager“ übergeben.

{/strip}{#L#}

Ist alles eingerichtet, können die Änderungen über den Button „Speichern und schließen“ gespeichert werden. Zurück auf der Übersichtsseite „Produktexporte“ kann über das Blitzsymbol neben dem Eintrag der Export zum ersten Mal gestartet werden. Die TXT-Datei öffnet sich in einem neuen Tab, kann von dort heruntergeladen und per Import in einem Tabellenkalkulationsprogramm wie Excel überprüft werden. Die URL der TXT-Datei im Browser ist gleichzeitig die Feed-URL, welche für den regelmäßigen automatischen Abruf im Google Merchant Center hinterlegt werden sollte.

Titelbild © MclittleStock / stock.adobe.com

Kommentare

Hallo Michael,
danke für die Beschreibung.
Inzwischen gibt es auch die Auswertung des merchant centers in der SearchConsole.
Da ist mir jetzt unter „Produkte“ aufgefallen:
Warnung
Feld „priceValidUntil“ fehlt
Und das bei allen meinen Produktseiten.

Wie kann ich das erweitern? Bin ich hier auf der richtigen Spur?
Freue mich schon über Hilfe.

besten Dank, Tom

michael magura

Michael Magura

Hallo Tom,

dein Problem ist in den auf den Produktdetailseiten implementierten strukturierten Daten begründet, nicht im Produkt-Feed, der die Produktdatenspezifikationen an das Google Merchant Center übergibt.

"priceValidUntil" ist dabei eine empfohlene Property der strukturierten Daten vom Typ "Offer": https://developers.google.com/search/docs/data-types/product?hl=de#pricevaliduntil

Hallo Michael,
vielen Dank für diesen hilfreichen Post.
Leider klappt der Export nicht, vielleicht hast du eine Idee, woran das liegen könnte.
Ich habe alles so wie beschrieben eingerichtet und erhalte folgende Fehlermeldung:

<h2><span class="frontend_error_exception">Ups! Ein Fehler ist aufgetreten!</span></h2>

<p>
<span class="frontend_error_exception">Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.</span>
</p>

<h3> in engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 657</h3>

<h3>Stack trace:</h3>
<div style="overflow:auto;">
<pre>#0 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3144): Smarty_Internal_TemplateCompilerBase->trigger_template_error() #1 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3209): Smarty_Internal_Templateparser->yy_syntax_error(10, ‘xE2’) #2 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse(10, ‘xE2’) #3 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile(‘{foreach $sArti…’) #4 engine/Library/Smarty/sysplugins/smarty_internal_template.php(187): Smarty_Internal_TemplateCompilerBase->compileTemplate(Object(Enlight_Template_Default)) #5 engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(155): Smarty_Internal_Template->compileTemplateSource() #6 engine/Shopware/Plugins/Community/Frontend/PremsDiscountCategory/Subscriber/Export.php(290): Smarty_Internal_TemplateBase->fetch(‘string:{foreach…’, 1) #7 engine/Shopware/Plugins/Community/Frontend/PremsDiscountCategory/Subscriber/Export.php(79): ShopwarePremsDiscountCategorySubscriberExport->replaceExecuteExportShopware530(Object(Enlight_Hook_HookArgs)) #8 engine/Library/Enlight/Event/Handler/Default.php(91): ShopwarePremsDiscountCategorySubscriberExport->replaceExecuteExport(Object(Enlight_Hook_HookArgs)) #9 engine/Library/Enlight/Hook/HookExecutionContext.php(152): Enlight_Event_Handler_Default->execute(Object(Enlight_Hook_HookArgs)) #10 engine/Library/Enlight/Hook/HookExecutionContext.php(107): Enlight_Hook_HookExecutionContext->executeReplaceChain(Array) #11 engine/Library/Enlight/Hook/HookManager.php(185): Enlight_Hook_HookExecutionContext->execute() #12 var/cache/production_201906060858/proxies/sExportProxy.php(114): Enlight_Hook_HookManager->executeHooks(Object(Shopware_Proxies_sExportProxy), ‘executeExport’, Array) #13 engine/Shopware/Controllers/Backend/Export.php(133): Shopware_Proxies_sExportProxy->executeExport(Resource id #1137) #14 engine/Shopware/Controllers/Backend/Export.php(90): Shopware_Controllers_Backend_Export->generateExport(‘/usr/local/www/…’) #15 engine/Library/Enlight/Controller/Action.php(192): Shopware_Controllers_Backend_Export->indexAction() #16 engine/Library/Enlight/Controller/Dispatcher/Default.php(563): Enlight_Controller_Action->dispatch(‘indexAction’) #17 engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) #18 engine/Shopware/Kernel.php(202): Enlight_Controller_Front->dispatch() #19 vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(102): ShopwareKernel->handle(Object(SymfonyComponentHttpFoundationRequest), 1, true) #20 vendor/symfony/http-kernel/HttpCache/HttpCache.php(448): SymfonyComponentHttpKernelHttpCacheSubRequestHandler::handle(Object(ShopwareKernel), Object(SymfonyComponentHttpFoundationRequest), 1, true) #21 engine/Shopware/Components/HttpCache/AppCache.php(260): SymfonyComponentHttpKernelHttpCacheHttpCache->forward(Object(SymfonyComponentHttpFoundationRequest), true, NULL) #22 vendor/symfony/http-kernel/HttpCache/HttpCache.php(238): ShopwareComponentsHttpCacheAppCache->forward(Object(SymfonyComponentHttpFoundationRequest), true) #23 engine/Shopware/Components/HttpCache/AppCache.php(105): SymfonyComponentHttpKernelHttpCacheHttpCache->pass(Object(SymfonyComponentHttpFoundationRequest), true) #24 shopware.php(122): ShopwareComponentsHttpCacheAppCache->handle(Object(SymfonyComponentHttpFoundationRequest)) #25 {main}</pre>
</div>
<div class="doublespace">&nbsp;</div>

michael magura

Michael Magura

Hallo DFranz,

ohne Blick in das Backend ist eine Fehleranalyse schwierig. Meine Vermutung ist, dass es an einer fehlerhaften Übernahme der im Artikel beschriebenen Code-Ausschnitte liegt. Versuche mal, alle Hochkommata durch " zu ersetzen.

Viele Grüße
Michael

Hallo Michael,
das war die Lösung! Vielen Dank für diesen Post und die Antwort zeigt auch die fundierten Kenntnisse.
Eine sehr gut ausgearbeitete Lösung für die Shopware Produktexporte!
Viele Grüße

Hallo Michael,

vielen Dank für den tollen Artikel.
Ich habe genau die Schritte befolgt, wie du es beschrieben hast und erhalte im Mechant Center eine Fehlermeldung
"Zu wenige Spaltentrennzeichen
Ihre Artikel enthalten weniger Attribute als in der Kopfzeile angegeben.
Weitere Informationen
Im Folgenden finden Sie einige Beispiele für Artikel, die von diesem Problem betroffen sind."

Hättest du einen Tipp für mich?

Vg
Maik

Michael Magura

Hallo Maik,
die Fehlermeldung sagt grundsätzlich, dass im Produktexport nicht für alle in der Kopfzeile definierten Attribute Inhalte aus den Artikeleigenschaften übergeben werden: https://support.google.com/merchants/answer/160033?hl=de

Ich sehe hier zwei Problemansätze:
– Entweder ist es ein Copy-and-Paste Problem, wodurch nicht alle Anweisungen in den Tab "Template" im Shopware-Backend eingefügt wurden.
– Oder die in den Produktexport übernommenen Inhalte aus den Artikel-Attributen führen zu Fehlern (aufgrund von enthaltenen Sonderzeichen, Formatierungen o. ä.).

Ein erster Ansatzpunkt wäre, die Exportdatei in Excel zu importieren und die Verteilung der Inhalte auf die Spalten zu überprüfen.

Viele Grüße
Michael

Hallo Michael
toller Artikel, vielen Dank dafür
Hast du eine Idee wie man "availability date" einfügen kann. Bisher bin ich noch nicht dahinter gestiegen.

VG
Zeljko

Michael Magura

Hallo Zeljko,
dazu musst du zum einen im Tab "Kopfzeile" ein zusätzliches Attribut "availability_date" einfügen. Im Tab "Template" gibst du dann an der entsprechenden Stelle an, woher der Wert für dieses Attribut geholt wird. Wenn du für "availability_date" bspw. via Freitext-Verwaltung ein neues Freitextfeld "attr4" angelegst, dann kann die Code-Zeile so aussehen:
{if $sArticle.attr4}{$sArticle.attr4}{#S#}

Bitte beachte auch die Hinweise von Google: https://support.google.com/merchants/answer/6324470?hl=de

Viele Grüße
Michael

Hallo Michael,

ich möchte auf diesem Weg einfach mal Danke sagen, also… vielen Dank für diesen wunderbaren Beitrag !

Ich habe Dein Beitrag auf der Suche nach einer Lösung verschiedenster Warnung im Google Merchant Center gefunden und die Anleitung, für mich und meinen Shop umgesetzt. Besonders hilfreich ist für mich der Punkt mit den Produktvarianten und dem entsprechenden Export der Bilder.

Auch ich hatte anfänglich dass Problem mit der oben beschriebenen Fehlermeldung, konnte diese aber schnell anhand der Kommentare lösen.

An dieser Stelle nochmal mein herzlichen Dank,
viele Grüße,
Stefan


Hast du eine Frage oder Meinung zum Artikel? Schreib uns gerne etwas in die Kommentare.

Ihre E-Mail Adresse wird nicht veröffentlicht

Jetzt den SEO-Küche-Newsletter abonnieren

Ähnliche Beiträge

black friday abmahnung

Schwarzer Tag für Markeninhaber: Black Friday wird für Werbedienstleistungen gelöscht

  • von Haendlerbund
  • 27.07.2021

Der „Black Friday“ gehört im Online-Handel längst zu den etablierten Begriffen und zu jenen Festivitäten, die Händlern steigende Umsätze versprechen. Nachdem der Schnäppchen-Tag vor einigen Jahren aus den USA auch auf den deutschen Markt geschwappt kam, nahmen in der Vergangenheit immer mehr große und kleine Händler teil und stellten eigene […]

website traffic verluste titelbild

Website Traffic Verluste: So reagiert Ihr laut Google

  • christoph pawletko
  • von Christoph
  • 23.07.2021

Bricht auf einmal der Traffic auf Eurer Website ein, kann dies schnell zu Umsatzeinbußen führen. Manchmal sind die Ursachen schnell gefunden, doch oft kommt der Trafficeinbruch überraschend und selbst erfahrene SEOs fragen sich nach den Gründen. Statt jetzt panisch zu werden, sollten Webmaster jetzt zunächst genau die Ursachen untersuchen, rät […]

Die wichtigsten SEO-Tools für Profis

Die wichtigsten SEO-Tools

  • oliver lindner
  • von Oliver Lindner
  • 23.07.2021

Als Spezialisten für Online-Marketing wissen wir genau, wie wichtige eine professionelle Suchmaschinenoptimierung (SEO) tatsächlich ist: Nur die Webseiten, die bei den relevanten Suchmaschinen optimal gerankt werden, sind auch für Ihre potenziellen Kunden sichtbar und werden aufgerufen. Doch SEO ist eine komplexe Angelegenheit, denn sie umfasst nicht nur die Erstellung der […]

online handel e commerce innenstädte

Online-Handel versus Innenstädte?

  • von Haendlerbund
  • 20.07.2021

Soll der Online-Handel für die Innenstädte zahlen? Im September ist Bundestagswahl und ein Thema mit dem sich die neue Bundesregierung danach auseinandersetzen muss, ist die Krise der Innenstädte. Vielerorts wird über Verödung geklagt und das nicht erst seit Beginn der Coronakrise. Daran, dass diese Herausforderung angegangen werden muss, bestehen wenig […]

gendern seo stager tastatur

Gendern und SEO: Unsere Tipps

  • Alexandra
  • von Alexandra
  • 16.07.2021

Gendern und SEO – das solltet Ihr für ein erfolgreiches gendergerechtes SEO beachten Das Thema der genderneutralen Sprache pulsiert und gewinnt zunehmend an Bedeutung. So sind mittlerweile unterschiedlichste Branchen dazu übergegangen, die Inhalte ihres Internetauftritts gendersensibel zu formulieren. Gendern und SEO wird also ein Thema werden. Von dieser Entwicklung scheint […]

EU-Umsatzsteuerreform tipps

EU-Umsatzsteuerreform: Darauf müssen Online-Händler achten

  • von Haendlerbund
  • 12.07.2021

Seit dem 1. Juli wird der Online-Handel in Europa ordentlich aufgemischt. Jetzt nämlich gelten die Regelungen, die durch die EU-Umsatzsteuerreform eingeführt werden. Was den E-Commerce im europäischen Binnenmarkt eigentlich stärken und vor allem eine Erleichterung für Händler sein sollte, wird jetzt aber zu einer echten Herausforderung. Online-Händler müssen zuerst einmal […]