Werbung / Banner buchen
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Zoll-Symbol in products_description führt zu Problemen in Rich Snippets

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Meine Search Console hat mir heute ein Problem aufgezeigt, was sich auf die Strukturierten Daten von Produkten und Kategorien bezieht. Die Meldung sah so aus:

    Zitat
    Fehlerhafter Aufbau: "," oder "}" fehlt

    Wenn man sich das näher angeschaut hat, dann war schnell klar, dass hier Zoll-Angaben (Inch) in der Produktbeschreibung das Problem verursachen. Also zumindest wenn man normale Doublequotes dafür verwenden z.B.

    Zitat
    blablabla.... von bis zu 1" Durchmesser

    Das Thema "einfach keine Anführungszeichen verwenden" wurde hier im Forum schon öfter diskutiert. Wobei es da nicht um die Rich Snippets ging, die dadurch dann nicht mehr funktionieren.
    Ich will hier nur meine Erfahrung teilen und sagen wie ich es gelöst habe. Vielleicht sieht das ja jemand auch als verbesserungswürdig an und/oder hat noch eine schlauere Idee wie man das Problem umgehen kann.

    Ich hab in den Strukturierten Daten in der templates/mein_template/module/product_info/product_info.html folgendes dafür verändert:

    Suche:
    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME}{literal}",

    Ersetze mit:
    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME|replace:"\"":"”"}{literal}",

    Suche:
    Code: PHP  [Auswählen]
    {$PRODUCTS_DESCRIPTION|strip_tags|replace:"'":""}

    Ersetze mit:
    Code: PHP  [Auswählen]
    {$PRODUCTS_DESCRIPTION|strip_tags|replace:"'":""|replace:"\"":"”"}

    Ähnliches muss man dann auch in der templates/mein_template/module/includes/product_listing_include.html machen.

    Finde:
     
    Code: PHP  [Auswählen]
    "name": "{/literal}{$module_data.PRODUCTS_NAME"}{literal}",

    Ersetze mit:
    Code: PHP  [Auswählen]
     "name": "{/literal}{$module_data.PRODUCTS_NAME|replace:"\"":"”"}{literal}",

    Denn es kann ja durchaus auch vorkommen, dass eine Zollangabe im Produktnamen enthalten ist.
    Würde mich interessieren wie ihr das seht. Ist doch eigentlich ungünstig, dass bei Verwendung eines " die strukturierten Daten zerhauen werden, oder?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=42323.0
    Shop Hosting

    karsta.de

    • Experte
    • Beiträge: 3.157
    Kann man dafür nicht onlytext verwenden? Das sollte die Anführungszeichen dafür entfernen.

    BG Karsta

    Timm

    • Fördermitglied
    • Beiträge: 6.258
    Moin

    Tritt das nur bei einmaligen Doublequotes auf? Denn ich hab auch Artikel wo ein Wort in doppelten Anführungszeichen steht und da wird bei den rich snippets nichts bemängelt.

    Bsp: aus der Kollektion "xyz"

    Wenn es bei dir bei doppelten Anführungszeichen auch auftritt, dann liegt der Fehler eher in deinem Shop.

    Nutze Shopversion 2.0.5.1. Kannst es ja im Demoshop mal gegentesten.

    Gruss Timm

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Kann man dafür nicht onlytext verwenden? Das sollte die Anführungszeichen dafür entfernen.
    [...]

    Ich hab das gerade nochmal durchgetestet. Hatte mir aber schon gedacht, dass das nicht den gewünschten Effekt hat.
    Jetzt mal am Beispiel des Artikelnamens:

    Hab ich in den Strukturierten Daten nur folgendes stehen:
    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME}{literal}",

    Dann bekomme ich in meinem Beispiel folgendes im Quellcode zu sehen:

    Verschlusskappe 1/2"

    Was dann aufgrund der " zu Problemen führt.

    Mache ich es so:
    Code: PHP  [Auswählen]
    {$PRODUCTS_NAME|onlytext}

    bekomme ich folgendes:
    Verschlusskappe 1/2

    Was dann keine Probleme mehr bereitet aber inhaltlich ja falsch ist. Denn mir fehlt ja dann die Maßeinheit!
    Von daher find ich bis hierher meine replace-Variante irgendwie sinnvoller.

    [...]
    Nutze Shopversion 2.0.5.1. Kannst es ja im Demoshop mal gegentesten.
    [...]

    Ich habs mir gereade im Demoshop angeschaut und großes Sorry. Es ist tatsächlich dem Template geschuldet.
    Das hat die Strukturierten Daten anders als das Original-Template alle zusammengefasst am Ende der product_info. Die Art wie es da platziert ist schafft überhaupt erst die Probleme mit den ". Weil es nicht per itemprop in dem sowieso verhandenen Container deklariert wird sondern eben so:

    Code: PHP  [Auswählen]
     "name": "{/literal}{$PRODUCTS_NAME}{literal}",

    Und durch die hier verwendeten Anführunsgzeichen kommt es dann zu Problemen.
    Also falls jemand sich angesprochen fühlt, weil er dieses kostenpflichtige Template ebenfalls nutzt... o.g. Ergänzung könnte eine Lösung sein. Das ist leider einer von vielen Bugs in diesem Kauf-Template (kein offizielles modified Kauf-Template!).

    karsta.de

    • Experte
    • Beiträge: 3.157
    Nur im Zusammenhang mit der Maßangabe Inch:
    Ich weiß nicht wie die Vorgabe laut Omnibus-Richtlinie ab dem 28. Mai für die Maßeinheit Inch lauten muss, aber ich denke die muss dann sicher als Wort ausgeschrieben werden. (Dann hättest du an dieser Stelle auch dieses Problem nicht mehr.)

    BG Karsta

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Ich denke es muss escaped werden. In dem Fall mit einem ".

    Es soll also so übergeben werden:

    Verschlusskappe 1/2""

    Gruss Gerhard

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Danke euch. Also nur noch mal fürs Protokoll: Mein Problem hab ich im Prinzip ja schon lösen können. Finde es aber dennoch weiterhin interessant.

    Zitat
    Ich weiß nicht wie die Vorgabe laut Omnibus-Richtlinie ab dem 28. Mai für die Maßeinheit Inch lauten muss

    Das ist ein nicht unberechtigter Hinweis "Zoll" bzw. "Inch" in der Beschreibung einfach auszuschreiben. Das wäre sogar eine machbar Alternative. Im Artikelnamen geht das allerdings nicht so ohne weiteres, weil ich hier gerne Platz sparen würde. Ob das überhaupt etwas mit den Omnibus-Richtlinien ab dem 28. Mai zu tun hat, da bin ich unsicher. Beziehen die sich nicht nur auf Grundpreise (jetzt immer in l bzw. kg und nur noch in Ausnahmefällen  in g und ml erlaubt) und Angabe von Rabatten?
    Es gab doch aber mal die Geschichte mit den TFT-Monitoren die nicht mehr in nur in Zoll angegeben werden durften. Das greift hier vermutlich auch. Mein primäres Maß muss aber trotzdem hier Zoll bleiben in dem Zusammenhang (vorausgesetzt ich mache damit nichts illegales!).

    Zitat
    Ich denke es muss escaped werden. In dem Fall mit einem ".

    Bin mir leider nicht ganz sicher wie genau das als escape dann aussehen müsste.
    Ich hab es mal so probiert:

    Code: PHP  [Auswählen]
    {$PRODUCTS_NAME|escape:'html'}

    und erhalte dann:
    Code: PHP  [Auswählen]
    Verschlusskappe 1/2"

    Da weiß ich nun ehrlich gesagt nicht genau ob das für alle "weiterverarbeitenden Instanzen" der strukturierten Daten ok ist, wenn da eine html-entity drin steht. Aber wenn ja dann ginge es so recht elegant.

    Sorry, Gerhard, könntest du evtl. nochmal genau sagen wie das escapen mit " in smarty dann aussehen müsste?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Wo kommt das denn vor ?
    Code: XML  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME}{literal}",

    und warum steht das in {literal} ?

    Ich würde es so versuchen:
    Code: XML  [Auswählen]
    {$PRODUCTS_NAME|htmlentities:ENT_QUOTES:$smarty.session.language_charset}

    Das macht zwar auch ein " aus den doppelten Anführungszeichen aber das ist ja nur eine HTML-Entity und der Browser macht daraus die ".

    Oder habe ich das Problem nicht verstanden ?

    Gruß,
    noRiddle

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Zitat
    Wo kommt das denn vor ?

    Wenn ich mich da mal selber zitieren darf:  :-)

    Zitat
    Ich habs mir gereade im Demoshop angeschaut und großes Sorry. Es ist tatsächlich dem Template geschuldet.
    Das hat die Strukturierten Daten anders als das Original-Template alle zusammengefasst am Ende der product_info. Die Art wie es da platziert ist schafft überhaupt erst die Probleme mit den ". Weil es nicht per itemprop in dem sowieso verhandenen Container deklariert wird sondern eben so:

    Macht denn am Ende des Tages
    Code: PHP  [Auswählen]
    {$PRODUCTS_NAME|htmlentities:ENT_QUOTES:$smarty.session.language_charset}

    technisch was anderes als
    Code: PHP  [Auswählen]
    {$PRODUCTS_NAME|escape:'html'}

    ???

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Mmh, okay, scheint effektiv auf's selbe hinauszulaufen.
    Ja, habe nicht richtig gelesen.
    Dann  scheint dein Template Structured Data in application/ld+json notiert zu haben (deshalb auch {literal}).
    Dann muß ein double quote mit einem backslash escape-t werden, also so: \"

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    [..]
    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME|replace:"\"":"”"}{literal}",
    [...]

    In dem du das Anführungszeichen oben (HTML-Code -> " bzw. Unicode (HTML) -> ")[ " ] mit dem doppelten Anführungszeichen rechts (HTML-Code -> ” bzw. Unicode (HTML) -> ”)
    [ ” ] ersetzt, trickst du natürlich ein bisschen.

    Ein analoges Problem bei der breadcrumb habe ich so gelöst. Übertragen auf dein Problem würde der Code dann wie folgt aussehen.
    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME|addcslashes:'"'}{literal}",

    PS:  Sofern man darauf achtet, dass zwischen den öffnenden geschweiften Klammern und dem ersten Zeichen in der Klammer immer ein Leerzeichen oder ein Zeilenumbruch steht, kann man bei JavaScript und CSS eigentlich die {literal}-Tags im Smarty-Template weglassen.
    https://docs.whmcs.com/Version_6_Template_Migration_Guide

    Gruss
    Hanspeter

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Zitat
    Dann  scheint dein Template Structured Data in application/ld+json notiert zu haben

    Yep, so isses.

    Zitat
    Sofern man darauf achtet, dass zwischen den öffnenden geschweiften Klammern und dem ersten Zeichen in der Klammer immer ein Leerzeichen oder ein Zeilenumbruch steht, kann man bei JavaScript und CSS eigentlich die {literal}-Tags im Smarty-Template weglassen.

    Cooler Hinweis. Vielen Dank Hanspeter

    Auch das hier sieht nach ner guten Lösung aus:

    Code: PHP  [Auswählen]
    "name": "{/literal}{$PRODUCTS_NAME|addcslashes:'"'}{literal}",

    Das einzige was ich mich dabei dann frage (Hab leider wenig Ahnung von den json bzw. den Strukturierten Daten):
    Wenn ich dann in den Strukturierten Daten stehen habe:

    Code: PHP  [Auswählen]
    "name": "Ich bin ein Artikel mit \"Feature\"",

    Macht das dann überhaupt Sinn? Wird hier nicht reiner Text erwartet?
    Wäre man dann evtl. mit dem "tricksen" vielleicht doch besser beraten?
    Ich nehme an, dass dein Problem bei den Breadcrumbs ja etwas anders gelagert war, weil es in der "Ausgabe" dann wiederrum nicht sichtbar war, dass du die " auf diese Art escapest. Ich hoffe ihr versteht wie ich das meine. Vielleicht ist das ja auch wurscht... ich hab keine Ahnung.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    >> Hier findest du Antworten...

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    [...]
    Code: PHP  [Auswählen]
    "name": "Ich bin ein Artikel mit \"Feature\"",

    Macht das dann überhaupt Sinn? Wird hier nicht reiner Text erwartet?
    Wäre man dann evtl. mit dem "tricksen" vielleicht doch besser beraten?
    Ich nehme an, dass dein Problem bei den Breadcrumbs ja etwas anders gelagert war, weil es in der "Ausgabe" dann wiederrum nicht sichtbar war, dass du die " auf diese Art escapest. Ich hoffe ihr versteht wie ich das meine. Vielleicht ist das ja auch wurscht... ich hab keine Ahnung.

    noRiddle hat dir ja  bereits einen Tipp gegeben wie du Antworten auf deine Fragen erhältst.
    Deine strukturierten Daten auf Korrektheit überprüfen kannst du hier ->  https://validator.schema.org/

    Gruss
    Hanspeter

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Besten Dank. Wobei NoRiddle eine Antwort auf eine Frage gegeben hat die ich so nicht gestellt habe.
    Wie ich die " escape, hatte ich ja bereits herausgefunden bzw. wurde ja jetzt auch schon in verschiedenen Varianten hier aufgezeigt. Meine Frage war eigentlich bloß ob dann konkret \" in der Angabe zu "name:" nicht irgendwie stört. Vielleicht eine dumme Frage. Aber ich dachte eigentlich, dass es diese nicht gibt. Ich gehe jetzt aber mal einfach davon aus, dass es ok ist \" in den Strukturierten Daten stehen zu haben.

    Danke für den Link zum Validator auf jeden Fall. Der bringt anderen an dieser Stelle sicher ebenfalls weiter. Ich hatte damit in der Zwischenzeit schon hantiert. Und dann auch erfolgreich damit validieren können.

    Wobei ich dann festgestellt habe, dass der Validator zwar sagt es ist alles ok. Die Google Search Console moniert aber dennoch die ein oder andere Sache. In der Zwischenzeit hab ich mein Template sogar von JSON  zurück auf Mikrodaten umgebaut und mich dabei am Orginal-Template gehalten. Besagtes Kauftemplate war, was das anbetrifft einfach nur Schrott. Da hier ein Mix aus Mikrodaten und JSON eingebaut war (in der product_info JSON und in der products_reviews dann aber Mikrodaten) , der so nie erfolgreiche hätte validiert werden können.

    Ich weiche jetzt ein bisschen vom Thema ab. Es fiel mir aber gerade auf, als ich daran gearbeitet habe und ich möchte es nicht unerwähnt lassen:

    In der Search Console bekomme ich die Meldung, dass die "itemReviewed" Angabe fehlt. Ich kann das im Original weder in der product_info_v1.html noch in der products_reviews.html finden. Daher habe ich das in beiden nun ergänzt und bekomme keinen Fehler mehr.

    Code: PHP  [Auswählen]
    <span itemprop="itemReviewed" itemscope itemtype="http://schema.org/Product">
     <meta itemprop="name" content="{$PRODUCTS_NAME}" />
    </span>  
     

    In der products_reviews.html steht der Produktname eigentlich nicht zur Verfügung. Das hab ich mir dann erstmal so gebastelt. Ob man den an der Stelle überhaupt angeben muss bzw. ob das einen Vorteil hat... hey vielleicht google ich das einfach mal =P
    3 Antworten
    1892 Aufrufe
    12. August 2018, 12:50:57 von andi1404
    1 Antworten
    4173 Aufrufe
    28. Februar 2011, 09:23:25 von vsell
    0 Antworten
    3055 Aufrufe
    14. August 2012, 21:54:34 von Rich Snippets
    5 Antworten
    4243 Aufrufe
    23. März 2011, 17:19:01 von speedy
               
    anything