Shop Hosting
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: Der Wert für item.id muss eine gültige URL sein

    derheiko

    • Fördermitglied
    • Beiträge: 463
    • Geschlecht:
    Der Wert für item.id muss eine gültige URL sein
    am: 03. September 2018, 10:16:29
    Hallo zusammen,

    bei meiner regelmäßigen Shopkontrolle schaue ich auch immer, ob die Metadaten korrekt an Google übergeben werden.
    Dafür stellt Google ein praktisches Tool zur Verfügung:

    https://search.google.com/structured-data/testing-tool#url=

    Nun tauch da ein Fehler auf, den ich bis dato nicht hatte:

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Da ich die letzten Wochen nichts am Template geändert habe, die Meldung bis dahin nicht gesehen habe und die Google Suche kein Erfolg brachte, vermute ich mal das Google hier was geändert hat?

    Dies wird wahrscheinlich nicht nur mich betreffen, da es im "sauberen" Dev Shop von Modified auch gemeldet wird:

    https://search.google.com/structured-data/testing-tool#url=https%3A%2F%2Fdev.modified-shop.org%2FTestkategorie-1%2FTestartikel-1%3A%3A1.html%3FMODsid%3D46tksh42qnm2einf1fap3tesv6

    Gruß Heiko

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

    Timm

    • Fördermitglied
    • Beiträge: 6.341
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #1 am: 03. September 2018, 10:22:41
    Gleicher Fehler auch bei mir.

    Vielleicht mal ein Ticket dafür öffnen, oder Moderator informieren!?

    Gruß Timm

    derheiko

    • Fördermitglied
    • Beiträge: 463
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #2 am: 04. September 2018, 08:16:59
    Ok, habe ich gemacht: Ticket #1519

    Andreas Kroll

    • Fördermitglied
    • Beiträge: 249
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #3 am: 31. Oktober 2018, 18:08:17
    Gibt es bereits einen Lösungsansatz zu diesem Problem?
    Ich bin da auch seit Wochen dran und komme leider nicht zu Rande ....  :-(

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #4 am: 31. Oktober 2018, 19:54:16
    Sehe eigentlich nur die Lösung in der Datei includes/classes/breadcrumb.php ca. Zeile 69 folgende Codezeile

    Code: PHP  [Auswählen]
              $trail_string .= '<span itemprop="item"><span class="current" itemprop="name">'.$this->_trail[$i]['title'].'</span></span>';

    mit dieser

    Code: PHP  [Auswählen]
              $trail_string .= '<a itemprop="item" href="#"><span class="current" itemprop="name">'.$this->_trail[$i]['title'].'</span></a>';

    oder dieser zu ersetzen.

    Code: PHP  [Auswählen]
    $trail_string .= '<a itemprop="item" href="#'.$this->_trail[$i]['title'].'"><span class="current" itemprop="name">'.$this->_trail[$i]['title'].'</span></a>';

    Gruss
    Hanspeter

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.724
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #5 am: 31. Oktober 2018, 22:53:15
    Ich weiß nicht ob an den Implementations-Vorgaben etwas geändert wurde.
    Jedenfalls wird es auf schema.org (auf Tab "Microdata" klicken) mit Link dokumentiert.

    In der von hpzeller genannten Klasse wird in der Funktion add() folgendes bestimmt:

    Code: PHP  [Auswählen]
          $current_link = xtc_href_link(basename($PHP_SELF), xtc_get_all_get_params(array('cat', 'filter_id', 'filter', 'show', 'page')), $request_type);
         
          if ($link == $current_link) {
            $link = '';
          }

    Wenn man das so anpasst *EDIT* (oder den entsprechenden Code auskommentiert) *END_EDIT*

    Code: PHP  [Auswählen]
          $current_link = xtc_href_link(basename($PHP_SELF), xtc_get_all_get_params(array('cat', 'filter_id', 'filter', 'show', 'page')), $request_type);
         
          if ($link == $current_link) {
            $link = $current_link; //Anpassung ist hier
          }

    dürfte das die korrekte Lösung sein.

    Allerdings habe ich jetzt nicht durchdacht was das für in mehrere Kategorien verlinkte Artikel bedeutet.
    In Anbetracht des automatisch gesetzten link rel="canonical" bei jedem Artikel sollte das allerdings kein Problem sein.

    Mit der von mir gepsoteten Änderung wird allerdings jeder letzte Breadcrumb-Punkt verlinkt, also auch Kategorien, Contents und Hersteller, was aber ja, wenn das Fehlen des links denn von Tante G. moniert wird so richtig sein sollte.

    Gruß,
    noRiddle

    Timm

    • Fördermitglied
    • Beiträge: 6.341
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #6 am: 01. November 2018, 00:18:29
    Danke @hpzeller und @noRiddle

    @noRiddle
    ist deine Änderung zusätzlich zu der von @hpzeller gemeint?

    @hpzeller
    deine erste Änderung führt dazu, dass der Link in der Breadcrumbzeile im Shop anklickbar ist
    deine zweite Lösung gibt einen Fehler im strukturierte Daten Testtool

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Zur Diskussion:
    Wenn ich mir im Google Guideline Breadcrumb die Beispiele angucke, dann sind alle mit url angegeben. Auch die letzte Position (aktuelle Zielseite). Warum das bis dato nicht bemängelt wurde ist aber auch komisch.

    Warum in Ticket #594 gefordert wurde für die aktuelle Seite den Link nicht zu übergeben, verstehe ich nicht. Ich würde das Ticket fast so interpretieren, dass damit nicht die strukturierten Daten gemeint waren, sondern die Breadcrumbzeile über dem Artikel zb. Das dort der Link nur nicht anklickbar sein sollte, aber dennoch der link an google übergeben werden soll.

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Die Beispiele im Ticket können nicht mehr herangezogen werden, weil dort teilweise gar keine Breadcrumb mehr übergeben wird. Genauso bei Amazon nicht. Es wird zwar auf der Seite eine Breadcrumbliste bis zur vorherigen Kategorie angezeigt (nicht zum Produkt) aber nicht an Google übergeben. Aber ich gehe davon aus, dass wir weiterhin die Breadcrumb übergeben wollen.

    Es gibt aber aktuelle Beispiele, wo die Breadcrumbliste beim Punkt der Zielseite nicht anklickbar ist (aber alle Seiten davor) und dieser dennoch an google korrekt übergeben wird.

    mediamarkt
    Google Test strukturierte Daten Mediamarkt korrekte Breadcrumbübergabe

    Stoffundstil
    Google Test strukturierte Daten Stoffundstil korrekte Breadcrumbübergabe

    Wenn man die Links zum Google Testtool klickt, dann sieht man auch die Links zu den Artikeln.

    Sollte das nicht die anzustrebende Lösung sein? Wie kann man das umsetzen?

    Gruß Timm

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.724
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #7 am: 01. November 2018, 01:14:56
    ...
    @noRiddle
    ist deine Änderung zusätzlich zu der von @hpzeller gemeint?
    ...

    Ich dachte bislang, daß meine Aussage
    "dürfte das die korrekte Lösung sein"
    eindeutig ist. Also: nicht zusätzlich sondern anstelle dessen.
    Ich vermute das die betroffene Code-Stelle auch die ist welche als Antwort auf Ticket #594 hinzugefügt wurde.

    Allerdings ist deine Aussage
    ...
    Ich würde das Ticket fast so interpretieren, dass damit nicht die strukturierten Daten gemeint waren, sondern die Breadcrumbzeile über dem Artikel zb. Das dort der Link nur nicht anklickbar sein sollte, aber dennoch der link an google übergeben werden soll.
    ...

    sehr interesaant.

    Ob der Ticket-Ersteller das so gemeint hat sei mal dahingestellt. Jedenfalls erscheint es sinnvoll es so zu verstehen.

    Ich denke, daß es Tante G. egal ist ob die letzte Position in der Breadcrumb auf die Seite selbst verlinkt ist. Die itemprop="item" sollte die URL jedoch wohl enthalten (sinnvoll wäre vielleicht ein meta-tag, der aber in der Doku nicht vorgesehen ist).
    Allerdings wüsste ich nicht mit welchem Attribut das geschehen sollte, weshalb ich die von mir verlinkte Doku von schema.org als die richtige Variante ansehen würde, auch wenn es nicht wirklich Sinn macht auf sich selbst zu verlinken.
    Aber so wie wir alle Denkfehler machen oder oft nicht alles bedacht haben, so geht es sicher auch den Schöpfern von solchen "Standards".
    Wem Tante G. wichtig ist sollte nun allerdings die Fehlermeldung im Test-Tool ernst nehmen und das korrigieren.

    Ich muß allerdings sagen, daß ich in dem genannten Test-Tool keinen Fehler angezeigt bekomme (*EDIT bei einer willkürlich ausgewählten Webseite *END_EDIT), und zwar ohne die von mir oder die von hpzeller gepostete Anpassung.
    Das lässt vermuten, daß der Fehler woanders/tiefer liegt...

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #8 am: 01. November 2018, 07:06:39
    [...]
    @hpzeller
    deine erste Änderung führt dazu, dass der Link in der Breadcrumbzeile im Shop anklickbar ist
    deine zweite Lösung gibt einen Fehler im strukturierte Daten Testtool
    [...]

    Mein erster Vorschlag  ist ein a-Tag mit einem Seitenverweis auf sich selbst, ein Klick darauf führt zum Seitenanfang und ist in diesem Sinne auch korrekt, siehe hier -> https://wiki.selfhtml.org/wiki/HTML/Tutorials/Links/Seiteninterne_Verweise#Sprungmarken_zum_Seitenanfang, auch das Testtool für strukturierte Daten zeigt keinen Fehler. Das ein a-Tag anklickbar ist liegt in seiner "Natur", es findet aber bei meinem Vorschlag kein reload der Seite statt und ist somit Ressourcen sparend. Mein zweiter Vorschlag ist nicht korrekt, denn der Verweis müsste auf ein name-Attribut zeigen, was er aber nicht tut.

    Gruss
    Hanspeter

    Timm

    • Fördermitglied
    • Beiträge: 6.341
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #9 am: 01. November 2018, 12:19:48
    Hallo Hanspeter

    Ich hoffe du hast das nicht als negative Kritik aufgenommen.


    @hpzeller
    deine erste Änderung führt dazu, dass der Link in der Breadcrumbzeile im Shop anklickbar ist

    Im Testtool erscheint dadurch nicht mehr der Fehler für Breadcrumb. Das war nur um zu verdeutlichen, dass es dann anklickbar ist, was wahrscheinlich nicht die optimale Lösung zu sein scheint.

    Ich denke eine Lösung wie bei Mediamarkt im vorher geposteten Link scheint am besten zu sein. Auf der Seite ist in der Breadcrumbleiste auf der Zielseite nur alles vor der Zielseite verlinkt. An Google wird aber jeder Breadcrumb (auch der für die Zielseite) übergeben.

    Sprich Übergabe itemprob = item name und position, aber Zielseite nicht verlinkt im Shop.

    Gäbe es da eine Möglichkeit?

    Ich muß allerdings sagen, daß ich in dem genannten Test-Tool keinen Fehler angezeigt bekomme (*EDIT bei einer willkürlich ausgewählten Webseite *END_EDIT), und zwar ohne die von mir oder die von hpzeller gepostete Anpassung.
    Das lässt vermuten, daß der Fehler woanders/tiefer liegt...
    Hast du dort auch modifiedshops getestet? Das Problem betrifft oder betraf zwar auch andere Shopsysteme (zb woocommerce), aber das hat für unsere Lösung ja keine Bedeutung. Das es aber funktionieren kann zeigen zb Mediamarkt und Stoffundstil und sicher noch viele weitere.

    Gruß Timm

    P.S. Vage Vermutung: Vielleicht will Google das neuerdings, dass der komplette Breadcrumbstrang übergeben wird, weil sie dadurch weniger Rechenleistung irgendwo benötigen. Am Ende macht das dann die Masse, die was einspart. So müssen sie doch den Link der Zielseite selbst an den unfertigen Breadcrumbstrang noch ansetzen, weil nur das itemprob=name übergeben wird.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #10 am: 01. November 2018, 12:32:28
    Hallo Timm,

    ja aber hier -> https://www.stoffundstil.de/stoffe/baumwollleinen/baumwollleinen-einfarbig/luxus-baumwolle-puder sind doch alle Elemente der Breadcrumb klickbar und das letzte Element führt zu einem reload der Seite.

    Bei MediaMarkt wird es per Json so gelöst,

    Code: PHP  [Auswählen]
    <ul class="breadcrumbs">
        <li class="home">
            <a href="/">Startseite</a>
        </li>

        <li>
            <a href="/de/category/_smartphone-tarife-464026.html">Smartphone &amp; Tarife</a>
        </li>
        <li>
            <a href="/de/category/_smartphones-handys-464027.html">Smartphones &amp; Handys</a>
        </li>
        <li>
            <a href="/de/category/_handys-506509.html">Handys</a>
        </li>
        <li class="current">NOKIA 105 Dual Sim Schwarz, Handy</li>
    </ul>


    <script type="application/ld+json"> {
        "@context":"https://schema.org",
        "@type":"BreadcrumbList",
        "itemListElement":[ {
            "@type":"ListItem",
            "position":1,
            "item": {
                "@id": "/", "name": "Startseite"
            }
        }
        ,
        {
            "@type":"ListItem",
            "position":2,
            "item": {
                "@id": "/de/category/_smartphone-tarife-464026.html", "name": "Smartphone & Tarife"
            }
        }
        ,
        {
            "@type":"ListItem",
            "position":3,
            "item": {
                "@id": "/de/category/_smartphones-handys-464027.html", "name": "Smartphones & Handys"
            }
        }
        ,
        {
            "@type":"ListItem",
            "position":4,
            "item": {
                "@id": "/de/category/_handys-506509.html", "name": "Handys"
            }
        }
        ,
        {
            "@type":"ListItem",
            "position":5,
            "item": {
                "@id": "/de/product/_nokia-105-dual-sim-2293531.html#top", "name": "NOKIA 105 Dual Sim Schwarz, Handy"
            }
        }
        ]
    }

    </script>
     

    dabei enthält die eigentliche Breadcrumb gar keine strukturierte Daten.

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #11 am: 01. November 2018, 13:14:45
    Naschtrag: Also ich finde es so wie MediaMarkt das löst zwar sehr sauber, aber jetzt einen solchen Aufwand auch im modified Shop zu treiben, nur damit das letzte Element in der Breadcrumb nicht clickbar ist, halte ich für übertrieben.

    Infos dazu habe ich unter folgenden Links gefunden.
    https://developers.google.com/search/docs/guides/intro-structured-data
    https://json-ld.org/

    Gruss
    Hanspeter

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.724
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #12 am: 01. November 2018, 19:11:33
    ...
    Ich muß allerdings sagen, daß ich in dem genannten Test-Tool keinen Fehler angezeigt bekomme (*EDIT bei einer willkürlich ausgewählten Webseite *END_EDIT), und zwar ohne die von mir oder die von hpzeller gepostete Anpassung.
    Das lässt vermuten, daß der Fehler woanders/tiefer liegt...
    Hast du dort auch modifiedshops getestet?
    ...

    Natürlich, was würde meine Aussage ansonsten für einen Wert haben ?

    Aaaaber, durch deine Nachfrage hervorgerufen fiel mir gerade etwas auf.
    Der letzte Breadcrumb-Punkt hat einen Link wenn man auf einem Produkt ist, das hatte ich übersehen, klar, daß das Test-Tool dann keinen Fehler wirft.
    Der getestete Shop hat ein eigenes SEO-URL-Modul wo sich die Artikelnummer im Produkt-Link befindet.
    Zwar ist das SEO-URL-Modul ohne Core-File-Änderung implementiert worden, aber es scheint da doch im Core-Code Abhängigkeiten zu geben die nicht bis zu Ende durchdacht oder nicht vorhersehbar sind.

    Gruß,
    noRiddle

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #13 am: 01. November 2018, 22:30:24
    Hallo Timm,

    du kannst mal folgendes testen.

    Ersetze den gesamten Code der Datei includes/classes/breadcrumb.php mit folgendem Code, danach sollte es so funktionieren wie bei MediaMarkt.

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: breadcrumb.php 899 2005-04-29 02:40:57Z hhgag $  

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(breadcrumb.php,v 1.3 2003/02/11); www.oscommerce.com
       (c) 2003      nextcommerce (breadcrumb.php,v 1.5 2003/08/13); www.nextcommerce.org
       (c) 2003 XT-Commerce

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


      class breadcrumb {
        var $_trail;


        function __construct() {
          $this->reset();
        }


        function reset() {
          $this->_trail = array();
        }


        function remove_last() {
          array_pop($this->_trail);
        }


        function remove($title) {
          for ($i=0, $n=sizeof($this->_trail); $i<$n; $i++) {
            if ($this->_trail[$i]['title'] == $title) {
              unset($this->_trail[$i]);
            }
          }
          $this->_trail = array_values($this->_trail);
        }


        function add($title, $link = '') {
         
          $this->_trail[] = array('title' => $title, 'link' => $link);
        }


        function trail($separator = ' - ') {
          $json_ld_str = PHP_EOL . '<script type="application/ld+json">' . PHP_EOL .
                                   ' {' . PHP_EOL .
                                   '   "@context": "http://schema.org/",' . PHP_EOL .
                                   '   "@type": "BreadcrumbList",' . PHP_EOL .
                                   '   "itemListElement": [' . PHP_EOL;
         
          for ($i=0, $n=sizeof($this->_trail); $i<$n; $i++) {

            if (($i+1)<$n) {
              $trail_string .= '<a href="' . $this->_trail[$i]['link'] . '" class="headerNavigation">' . $this->_trail[$i]['title'] . '</a>';
            } else {
              $trail_string .= '<span class="current" itemprop="name">'.$this->_trail[$i]['title'].'</span>';
            }

            if (($i+1) < $n) $trail_string .= $separator;
           
            $json_ld_str .= '     {' . PHP_EOL .
                            '        "@type": "ListItem",' . PHP_EOL .
                            '        "position": "' . ($i+1) . '",' . PHP_EOL .
                            '        "item": {' . PHP_EOL .
                            '          "@id": "' . $this->_trail[$i]['link'] . '",' . PHP_EOL .
                            '          "name": "' . $this->_trail[$i]['title'] . '"' . PHP_EOL .
                            '       }' . PHP_EOL .
                            '     }' . (($i+1)<$n ? ',' : '') . PHP_EOL;                            
          }
         
          $json_ld_str .= '   ]' . PHP_EOL .
                          ' }' . PHP_EOL .
                          '</script>' . PHP_EOL;      
         
          return $trail_string . $json_ld_str;
        }
       

        function econda() {
          $econda_string = '';

          for ($i=1, $n=sizeof($this->_trail); $i<$n; $i++) {
            $econda_string .= $this->_trail[$i]['title'];

            if (($i+1) < $n) $econda_string .= '/';
          }

          return $econda_string;
        }
       
      }
     

    Gruss
    Hanspeter

    Andreas Kroll

    • Fördermitglied
    • Beiträge: 249
    • Geschlecht:
    Re: Der Wert für item.id muss eine gültige URL sein
    Antwort #14 am: 02. November 2018, 09:22:09
    Vielen Dank auch von mir Hanspeter

    Der von Dir bearbeitete Code funktioniert einwandfrei.  :-B
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware
    22 Antworten
    11300 Aufrufe
    13. Juli 2018, 19:43:47 von umbi
    13 Antworten
    6804 Aufrufe
    30. Januar 2015, 21:50:50 von peterdd
               
    anything