RichSnippets: GX4 zeigt nur noch "InStock" an , also Lagerware :-(

Thema wurde von Anonymous, 16. Januar 2021 erstellt.

  1. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Moin,

    wir haben gerade festgestellt, daß egal was wir in Lieferzeiten und dem Produkt einstellen, der Shop immer den RichSnippet Status "InStock" ausgibt, egal wie die Verfügbarkeit im Shop ist (auf Lager, nicht auf Lager und Vorbestellt). Die Ausgabe erfolgt ja in der Produktinfo über die Datei/script $JSONLD .

    Wir haben daraufhin die Lieferzeiten geprüft und die Artikeldaten. In den Artikels ist die Option "Verfügbarkeit" richtig gewählt mit "[siehe Lieferstatus]". Die Angabe der Lieferzeit im Lieferstatus ist auch entsprechend gesetzt unter der Option: "Diesen Lieferstatus mit folgender Google-Shopping-Verfügbarkeit verknüpfen:" Dort haben wir entsprechen ausgewählt "auf Lager" / "nicht auf Lager" / "vorbestellt"

    Egal was wir machen, der Shop zeigt im Quelltext immer "InStock" an: " @type":"Offer","availability":"InStock" "

    Verschiedene Artikel getestet, mit unterschiedlichen Optionen, und auch den Cache schon zig mal gelöscht.

    Kann mir einer da helfen oder das erklären? Für mich ist es eigentlich logisch, das wenn der Lieferstatus "nicht auf Lager" gewählt ist, die Ausgabe "OutOfStock" wäre. Oder liege ich da jetzt falsch?
     
  2. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    937
    Danke erhalten:
    808
    Danke vergeben:
    301
    Hi Marco :)

    InStock vs. OutOfStock prüft Gambio ausschließlich anhand des Lagerbestands. Der Lieferstatus spielt dabei keine Rolle.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Moin Dominik,

    danke für die Info. Das ist ja schlecht und in meinem Fall fatal und ich finde auch unlogisch. Google meckert rum das der Lieferstatus aus der csv-Datei von Gambio mit den der RichSnippets der Seite nicht stimmen. Im Artikelexport des Shops werden ja die richtigen Daten übernommen gem Angaben, daher finde ich das jetzt etwas unlogisch. In der CSV so und auf der Webseite so...

    Gibt es da einen einfachen Overload zu zb so oder son ähnlich in einer Datei was basteln:

    {if $module_data.PRODUCTS_SHIPPING_NAME eq "Ab Lager 1-3 Werktage" }

    {$RICH_SNIPPET_ARRAY.offer_itemprop_in_stock}

    {else}

    {$RICH_SNIPPET_ARRAY.offer_itemprop_out_of_stock}

    {/if}
     
  4. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    937
    Danke erhalten:
    808
    Danke vergeben:
    301
    Nein. Das JSON-LD wird in einer Methode mit über 400 Zeilen generiert. Die ist nicht update-sicher überladbar, sondern muss direkt im Gammelcode geändert werden. Dauerhafte Lösung muss von Gambio selbst kommen.

    Also...

    Du findest die Lieferstatus-ID raus unter Toolbox > SQL mit...
    Code:
    SELECT shipping_status_id, shipping_status_name FROM `shipping_status` WHERE language_id=2;
    Je nachdem, ob Template oder Theme knöpfst Du Dir die entsprechende Datei vor:

    GXMainComponents/View/ThemeContentViews/products/ProductInfoThemeContentView.inc.php (Theme)
    oder
    system/classes/products/ProductInfoContentView.inc.php (Template)

    In beiden findest Du diese Zeile:

    Code:
    $availability     = ($productsQuantity > 0 || !$this->stockCheck) ? 'InStock' : 'OutOfStock';
    und änderst sie in

    Code:
    $availability = ((int)$this->product->data['products_shippingtime'] === 123) ? 'OutOfStock' : 'InStock';
    Dabei ist 123 die ID des Lieferstatus, für den Produkte OutOfStock sein sollen.

    Kein Leeren der Gambio-Caches erforderlich, wohl aber der Ladezeitoptimierung ;)
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    #5 Anonymous, 16. Januar 2021
    Zuletzt bearbeitet: 16. Januar 2021
    Moin Dominik,

    vielen herzlichen Dank. Werde ich mal testen morgen wenn ich am Rechner sitze :)

    Edit: Wie mache ich es den wenn ich 2 ID´s habe die OutOfStock sind?
     
  6. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    937
    Danke erhalten:
    808
    Danke vergeben:
    301
    PHP:
    // Lieferstatus-ID 123 und 124 sind OutOfStock
    $availability in_array((int)$this->product->data['products_shippingtime'], [123124]) ? 'OutOfStock' 'InStock';
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Danke nochmals :)
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Update: Entsprechende Datei geändert, Ladezeitmodulcache gelöscht: Funktioniert.

    DANKESCHÖN nochmal :)
     
  9. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Üblicherweise heisst ja es gibt einen Lagerbestand es gäbe einen Lagerbestand. Wieso ist das bei dir nicht so? Wo steckt das Logikproblem?
     
  10. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Moin Wilken,

    wir arbeiten im Shop nicht mit Lagerbeständen sondern mit Lieferstatus. Durch Droppshippingartikel, eigenen Lagerbestand, Händlerlieferbestand usw, wäre das zu aufwändig umzusetzen. Daher gibt es nur den Lieferstatus: Verfügbar, Bestellbar oder nicht Verfügbar.

    Der Google Export hat damit ja absolut keine Probleme und gibt es richtig wieder: InStock & OutOfStock. Nur der Shop in den Snippets macht es nicht.

    Wo steckt da die Logik: das eine kann es und akzeptiert es, das andere kann es mit den gleichen Daten nicht :)
     
  11. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Ich denke, dass da 2 Verschiedene Dinge übergeben werden.
    Das eine übergibt den Lieferstatus und damit das, was Du im Lieferstatus eingetragen hast, das andere gibt ein Snippet aus, das sich rein nach dem Bestand richtet
    Lagerbestand ja / nein: ob da als Lieferstatus jetzt 10 Tage, 3 Tage, im Zulauf oder nicht mehr Lieferbar steht, ist dafür eigentlich nicht relevant.

    Ist aber nur eine Vermutung
     
  12. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Moin Barbara,

    ja, so wird es ab "Werk" gemacht. Wenn man jetzt aber bedenkt das beide Sachen für einen "Anbieter" = Google sind, ist es schon etwas verwunderlich das Google einmal über den Feed Daten A bekommt und über die Onpage Snippets Daten B für ein und den selben Artikel. Das Google da meckert ist dann verständlich ;)

    Verständlich wäre es ja, wenn es gekoppelt wäre, so aber etwas verwirrend :p
     
  13. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Man darf Google nicht als einen Laden sehen, Google sind viele Buden mit einem gemeinsamen Logo.

    Die Android Leute kennen die Crawler Leute nicht. Die Crawler Leute kennen die Analytics Leute nicht. Die Analytics Leute kennen die Ads Leute aus der Ferne...
     
  14. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Februar 2016
    Beiträge:
    394
    Danke erhalten:
    92
    Danke vergeben:
    44
    Solange die Daten an einer Stelle zusammenlaufen, ausgewertet werden und Fehler verursachen, dann stimmt was nicht ;-)

    Ob das jetzt gravieren ist oder nicht, ist mal dahin gestellt. Ich persönlich finde es unlogisch :)
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Juli 2018
    Beiträge:
    49
    Danke erhalten:
    8
    Danke vergeben:
    11
    Ist zwar ein wenig älter, aber sicher für manche noch interessant.

    1. Finde das auch unlogisch. Wenn es ein Einstellung bei den Lieferstati gibt, die ja auch im Shopping-Modul verwendet wird, dann aber an anderer Stelle eine andere Logik zur Ermittlung der Verfügbarkeit verwendet wird, die dann vom gleichen Google Service verwendet wird, passt das so nicht ganz zusammen. Führt das nicht letztlich dazu, dass die Einstellung beim Lieferstatus sinnlos wird? Es ist ja nun nicht Android so, Analytics anders, sondern beides landet im Merchant Center.

    2. Danke Dominik für die Hinweise! Das hat mit eine Menge Arbeit erspart.

    3. Da man ja nicht nur stänkern soll, hier mein Ansatz. Verwendung auf eigene Gefahr und von mir nur für Templates getestet. An der von Dominik beschriebenen Stelle verwenden wir statt der Abfrage fixer shipping_time IDs folgenden Code

    PHP:
    // Anpassung für Rich-Snippets Google Shopping Verfügbarkeit basierend auf Lieferstatus
       // $productsQuantity = xtc_get_products_stock($this->product->data['products_id']);
       // $availability     = ($productsQuantity > 0 || !$this->stockCheck) ? 'InStock' : 'OutOfStock';

       
    $g_shopping_sql "SELECT google_export_availability_id FROM shipping_status_to_google_availability WHERE shipping_status_id = " $this->product->data['products_shippingtime'];
       
    $g_shopping_result xtc_db_query($g_shopping_sql);
    $t_result_array xtc_db_fetch_array($g_shopping_result);
    $g_shopping_availabilty_id = (int) $t_result_array['google_export_availability_id'];
       
    // google_export_availability_id 3 -> nicht auf Lager, sonst auf Lager
       
    $availability     = ($g_shopping_availabilty_id === 3) ? 'OutOfStock' 'InStock';
       
       
    // Ende Anpassung für Rich-Snippets Google Shopping Verfügbarkeit basierend auf Lieferstatus
    Nachteil ist offensichtlich ein zusätzlicher Query. Vorteil dagegen, dass auch für neu angelegte Versandstati der Wert gezogen wird, den man im Shop eingestellt hat.

    Prinzipiell könnte man den Query auch in eine eigene Funktion innerhalb eines Overloads auslagern. Wenn man aber sowieso schon in einem riesigen Codeblock herumfuscht, von dem man eigentlich die Finger lassen sollte, bevorzuge ich die Lösung, wo ich alles an einer Stelle habe.

    Vielleicht hilft es ja jemanden. Verbesserungsvorschläge sind natürlich willkommen.