Merchant Center / Shopping Feed / Ungültiges oder fehlendes erforderliches Attribut: Verfügbarkeit

Liebe Shopwareianer,

ich bin noch recht unerfahren im Umgang mit Shopware und hoffe, ich bin mit meiner Frage in diesem Forum richtig. Seit gestern versuche ich, im Google Merchant Center einen Shopping Feed anzulegen, der unsere aktiven Artikel ausliest. Dazu habe ich unter „Produktexporte“ die Datei „export.txt“ (Google Produktsuche) kopiert und leicht modifiziert. Dort steht nun in der Kopfzeile folgendes:

{strip}
id{#S#}
titel{#S#}
beschreibung{#S#}
link{#S#}
bild_url{#S#}
ean{#S#}
gewicht{#S#}
marke{#S#}
mpn{#S#}
zustand{#S#}
produktart{#S#}
preis{#S#}
versand{#S#}
standort{#S#}
währung
availability
{/strip}{#L#}

Im Template steht folgender Code:

{strip}
{$sArticle.ordernumber|escape}{#S#}
{$sArticle.name|strip_tags|strip|truncate:80:"...":true|escape|htmlentities}{#S#}
{$sArticle.description_long|strip_tags|html_entity_decode|trim|regex_replace:"#[^\wöäüÖÄÜß\.%&-+]#i":""|strip|truncate:500:"...":true|htmlentities|escape}{#S#}
{$sArticle.articleID|link:$sArticle.name|escape}{#S#}
{$sArticle.image|image:1}{#S#}
{$sArticle.ean|escape}{#S#}
{if $sArticle.weight}{$sArticle.weight|escape:"number"}{" kg"}{/if}{#S#}
{$sArticle.supplier|escape}{#S#}
{$sArticle.suppliernumber|escape}{#S#}
Neu{#S#}
{$sArticle.articleID|category:" > "|escape}{#S#}
{$sArticle.price|escape:"number"}{#S#}
DE::DHL:{$sArticle|@shippingcost:"prepayment":"de"}{#S#}{#S#}
{$sCurrency.currency}
{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#}

Leider ergibt der Versuch, den Feed mit dem Merchant Center zu verknüpfen, folgende Fehlermeldungen:

error Ungültiges oder fehlendes erforderliches Attribut: Verfügbarkeit221 Alle

error Unzureichende Produktkennzeichnungen: Zwei von drei Attributen fehlen (‚GTIN‘ [gtin], ‚Marke‘ [brand], ‚MPN‘ [mpn]).219 Alle

error Ungültiger GTIN-Wert

 

Ich habe bereits in Erfahrung gebracht, dass die in Shopware vorbelegten Spezifikationen nicht mehr den aktuellen Anforderungen von Google entsprechen. Deswegen habe ich oben auch die Zeile zur Verfügbarkeit (availability) ergänzt, da ich dachte, so zumindest diesen Fehler beseitigen zu können. Das hat leider nicht geklappt und ich erhalte nun eben obige Fehlermeldungen.

 

Da ich leider sehr unbedarft bin, würde ich mich sehr freuen, falls mir vielleicht jemand einen Hinweis geben könnte, wo der Fehler liegt. Meine eigene Recherche hat leider nur ergeben, dass die Eigenschaft „Verfügbarkeit“ von Google gefordert wird. Ob die obige Syntax stimmt, weiß ich jedoch nicht. Ich habe verschiedene andere Code-Varianten probiert, jedoch erfolglos.

 

Wir nutzen gegenwärtig noch Shopware 5.4.5.

 

Für jede Hilfe bereits im Voraus vielen Dank!

Du muss Dich schon an den Aufbau halten. Am Ende jeder Zeil (außer der Letzten) steht EIN {#S#}.
Du hast Zeilen mit doppelten {#S#}
In Deiner Kopfzeile folgt nach Versand der Standort.
In Deinem Template folgt nach
DE::DHL:{$sArticle|@shippingcost:„prepayment“:„de“}{#S#}{#S#} die Währung {$sCurrency.currency}.

Am einfachten ist es, Kopfzeile und Template in einem Editor mit Zeilennummerierung zu öffnen.

Vielen Dank für Deine Antwort! Das war tatsächlich die Lösung. (Hätte ich auch selber darauf kommen können). : )

Noch eine weitere Frage: Das Abrufen des Feeds generiert nun die Fehlermeldung „Unzureichende Produktkennzeichnungen: Zwei von drei Attributen fehlen (‚GTIN‘ [gtin], ‚Marke‘ [brand], ‚MPN‘ [mpn])“. Das ist an sich nicht verwunderlich, da bei einigen Artikel tatsächlich EAN und Herstellernummer fehlen, die ich gerade ergänze. Wie sieht es jedoch mit Artikel aus, die weder über EAN noch Herstellernummer verfügen? Lassen sich diese irgendwie aus dem Feed herausfiltern oder gibt es für diese Fälle vielleicht eine andere Lösung?

Sodann ist mir leider noch nicht ganz klar, wo ich bei Shopware eine „Marke“ (brand) hinterlegen kann. Den Hersteller habe ich eigentlich überall angegeben, aber scheinbar fordert Google noch eine weitere Angabe - nur weiß ich eben leider nicht, wo ich diese in der Artikelmaske hinterlegen kann. Kann mir vielleicht jemand helfen?

Bist Du der Hersteller der Artikel? Verkaufen noch andere diese Artikel?
Siehe auch gtin: Definition - Google Merchant Center Help

Die “Hersteller” nutzen wir als Marken.
Da haben wir für einige Artikel einen Hersteller/Marke namens “Noname”, weil die Marke irrelvant war und es keine EANs gab, bzw. dieses interne des Lieferanten waren.
Die haben wir dann in der Feedkonfiguration ausgeschlossen.

 

	{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}
	{$sArticle.supplier|escape}
	{$sArticle.ean|escape}
	{$sArticle.ean|escape}

Für den Google Merchant reicht das. EAN’s sind aber Produkte eindeutig zugewiesen, da solltest du nicht anfangen EAN’s frei zu erfinden… das mögen die garnicht und google ist da nicht gerade zimperlich. Du kannst aber auch im Merchant-Center Regeln zuweisen, wie zu verfahren mit fehlenden Angaben. An

Statt den Produkteexport zu nutzen habe ich mir eine SQL Abfrage gebastelt um den Google Merchant Center Shopping Feed mit meinen Büchern zu füttern:

select  

 ad.ordernumber as id,

 a.name as titel,

 a.description as beschreibung,

 concat('https://www.meinSeite.ch/detail/index/sArticle/’,a.id,’/sCategory/’,c.categoryId) as produktUrl, 

 ‘neu’ as zustand,

 concat(round(ap.price+ap.price*ct.tax/100,2), ’ CHF’) as preis,

 ‘auf Lager’ as Verfuegbarkeit,

 concat(‘https://www.meineSeite.ch/media/image/’,

   replace(substring(md5(m.path),1,2),‘ad’,‘g0’),’/’,

   replace(substring(md5(m.path),3,2),‘ad’,‘g0’),’/’,

   replace(substring(md5(m.path),5,2),‘ad’,‘g0’),’/’,

   replace(m.path,‘media/image/’,’’)) as bildlink,

 replace(replace(replace(ad.suppliernumber,‘ISBN’,’’),’-’,’’),’ ‘,’’) as gtin,

 null as mpn,

 null as marke,

 null as googleProduktkategorie,

 case when ad.shippingfree=0 then ‘CH:::7.00 CHF’ else ‘CH:::0.00 CHF’ end as versand

from s_articles a

inner join s_articles_details ad

 on ad.articleId = a.id

 and ad.suppliernumber like ‘ISBN%’

 and ad.instock > 0 

inner join s_articles_prices ap

 on ap.articleId = a.id

 and ap.pricegroup=‘EK’

 and ap.price > 0

inner join s_core_tax ct

 on ct.id = a.taxid

inner join (

 select 

 c.articleId,

 min(c.categoryId) as categoryId

  from (

  select

  ac.articleId,

  case when c.active=1 then c.Id else cp.Id end as categoryId

  from s_articles_categories ac

  inner join s_categories c

  on c.id = ac.categoryId

  left outer join s_categories cp

  on cp.id = c.parent

  and cp.active=1

 )c group by c.articleId

)c

on c.articleId = a.id

inner join s_articles_img ai

 on ai.articleId = a.id

 and ai.main = 1

inner join s_media m

 on m.id = ai.media_id

 and m.albumID = -1

left outer join s_articles_attributes aa

 on aa.articleId = a.id

where a.active = 1

order by ad.ordernumber