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


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

abmahnung online handel studie 2020

Mehrfach-Abmahnungen für Online-Händler häufiger: Die Abmahnstudie 2020

  • von Haendlerbund
  • 21.04.2021

Wer im Online-Handel aktiv ist, sollte darauf achten, rechtssicher zu handeln, denn sonst droht schnell eine Abmahnung.

google commerce camp titelbild

Die SEO-Küche beim Google Commerce Camp 2021

  • christoph pawletko
  • von Christoph
  • 15.04.2021

Zwei virtuelle Bühnen, zwei volle Tage zum Thema Google Nach dem großen Erfolg des ersten Google Commerce Camps letztes Jahr haben wir uns den 21.04. und den 22.04.21 natürlich ganz dick Kalender angestrichen. Auch dieses Jahr veranstaltet der Händlerbund eine Online-Konferenz ganz im Zeichen von Google und E-Commerce. Das Programm […]

social media recap januar 2021 titel

Social Media Rückblick März 2021

  • julia bartulovic
  • von Julia
  • 13.04.2021

Der März ist vorbei, und mit ihm auch schon das erste Drittel des Jahres! Auch im März hat sich viel in der Social-Media-Landschaft getan.

keyword-optionen google ads stagebild

Änderungen der Keyword-Optionen bei Google Ads

  • ulrike schmalfuss
  • von Ulrike
  • 09.04.2021

Welche Änderungen im Punkt “Modifizierer für weitgehend passende Keywords” gemacht wurden, erfahrt Ihr bei uns im Blog.

facebook shops titelbild

Facebook Shops erklärt

  • Leonard
  • von Leonard Reska
  • 06.04.2021

“Meine Zielgruppe ist auf Facebook und Instagram, mein Verkauf läuft über meine Website.” Dieser Satz ist zurzeit wohl gang und gäbe. Mit der Einführung von Facebook Shops könnte diese Art des Online-Shoppings demnächst Geschichte sein. Mittlerweile ist Werbung auf Social Media, neben den Google Ads, die am meisten etablierte Marketing-Lösung, […]

bilder optimieren vergleich

Website Bilder optimieren und komprimieren

  • katja pohlers
  • von Katja Pohlers
  • 25.03.2021

Bilder optimieren und komprimieren: Darauf solltet Ihr achten Bilder spielen bei der Erstellung von Websites eine besonders wichtige Rolle. Oft sagt ein Bild mehr als viele Worte, daher sollten visuelle Inhalte nie vernachlässigt werden. Zu viele Bilder, falsche Dateiformate oder zu große Bilder können sich jedoch auch negativ auf die […]