sitemap.xml 5.5

Angeregt durch diese Diskussion:

https://forum.shopware.com/discussion/57662/sw-5-4-6-sw-5-5-3-explodierende-anzahl-an-urls#latest

wollte ich mal die aktuelle sitemap in 5.5.3 mit dem Aufruf https://meinedomain.de/sitemap.xml anschauen;

bekomme aber nur eine Einzeilige Ausgabe in diesem Format :

https://meinedomain.de/web/sitemap/shop-1/sitemap-1.xml.gz
        2018-11-23

hab ich da was versäumt, hat sich der Aufruf geändert ? Oder wo liegt der Fehler ?

Du wirst an sitemap_index.xml weitergeleitet und dort wird ein xml.gz zur Verfügung gestellt. Das ist die neue Sitemap-Generierung in 5.5.

Wird hier auch von Google so beschrieben: https://support.google.com/webmasters/answer/75712?hl=de

Das ist eine Archiv-Datei (kannst du runterladen und entpacken) und dort ist die Sitemap drin. Es hat sich eigentlich nichts geändert.

Die Erzeugung kann jetzt über das Backend oder per Cron gesteuert werden. Vorher wurde die immer Live generiert, was zu lasten der Seitenperformance ging. Jetzt wird sie auch gecached.

1 „Gefällt mir“

Moin.

Ich häng mich hier mal ran. Nach dem Update auf 5.5.3 habe ich ein Problem mit der Sitemap.

  • Aufruf /sitemap.xml wird weitergeleitet auf /sitemap_index.xml

  • Aufruf /sitemap_index.xml wird mit einem „404 Not Found“ beantwortet.

  • /web/sitemap/shop-1/sitemap-1.xml.gz ist aufrufbar und sieht gut aus.

Es gibt also nur ein Problem mit der /sitemap_index.xml Ich habe keinerlei Ansatzpunkt. Die Logs geben gar nichts aus.

Was mich am meisten verwirrt: Ich hab nicht mal den Aufruf der sitemap_index.xml in der access.log des Servers. Dort ist nur die sitemap.xml mit HTTP 302. 

Hat irgendjemand eine Idee?

Was hast du für einen Webserver?

Nginx. Sorry, vergas ich zu erwähnen.

Danke @Shyim‍ für den (wohl ungewollten) Hinweis. In der nginx-Konfiguration fehlte dieser Eintrag:

location = /sitemap_index.xml {
    log_not_found off;
    access_log off;
    try_files $uri @shopware;
}

 

Sicher? Ich entwickle mit Nginx und bei mir brauch ich es nicht lol

Und erstell bitte einen kleinen Pull Request hier, damit jeder davon profitiert GitHub - bcremer/shopware-with-nginx: Running shopware using NGINX

ich denke es kommt drauf an ob es pure nginx ist oder proxy mit apache.

Ich habe nginx proxymodus in Verbindung mit plesk und brauche die Anweisung auch nicht.

Allerdings muss man auch bei google die „alten“ sitemaps rauslöschen sonst kapiert der Gockel das nicht gleich mit der neuen sitemap; dann dauert es auch gefühlt ne Ewigkeit bis sich die Neue durchsetzt, wie immer.

Was gehört dann in die robots.txt?
Bleibt es bei
Sitemap: domain…/sitemap.xml
oder soll da jetzt
Sitemap: domain…/web/sitemap/shop-1/sitemap-1.xml.gz
stehen?

Und wie kann man z.B. Hersteller aus der Sitmap ausschliessen?
Bisher konnte man das über {block name=„frontend_sitemap_xml_suppliers“}{/block} im eigenen Theme.

Ist aktuell in Bearbeitung: Shopware Issuetracker

Über das Template geht das durch die neue Methode leider nicht mehr. Es wird in Zukunft direkt über das Backend machbar sein.

 

Für den Übergang könntest du folgende Zeile ändern: shopware/ManufacturerUrlProvider.php at 5.5 · shopware/shopware · GitHub

Einfach aus “return $urls;” ein “return;” machen und die Sitemap neu generieren.

Danke für die Lösung, aber das kann ja eigentlich nicht sein.
Sorry, aber wie kann man denn so eine Verschlimmbesserung veröffentlichen.

Es ist echt “unvorteilhaft”, dass die eigenen Anpassungen über die Templates nun keinen Bestand mehr haben.

Wir haben bei den Artikel ein Freitextfeld “noindex” angelegt, um gezielt Artikel aus der Indexitierung und der Sitemap auszuschließen. Heute haben wir festgestellt, dass unsere Anpassung keinerlei Wirkung mehr zeigt und alle Artikel wieder in der Sitemap gelistet werden. Das ist mehr als ärgerlich.

By the way: die Shopseiten sind doppelt in der Sitemap vorhanden.
Kann es im SW-Demoshop leider nicht prüfen, weil dort gar keine Shopseiten erscheinen, wie auch immer ihr das gemacht habt.

Was gehört denn nun in die robots.txt? (siehe Frage oben)

Die Shopseiten landen nicht in der Sitemap, wenn sie nicht dem Shop zugewiesen sind (Shopeinstellungen > Shops). Das ist bei der Demoinstallation so.

Doppelt hatte ich die nun nicht in der Sitemap.
Die robots.txt ist ja erstmal nur ein indikator dafür, wo die Sitemap liegt. Da der Bot die Sitemap sowohl über /sitemap.xml und auch sitemap_index erreichen kann, ist das denke ich egal. Bei sitemap_index spart man sich den Redirect. 

Dazu muss ich dann noch das da machen, weil die Shopseiten weg sind:
https://forum.shopware.com/discussion/comment/234861/#Comment_234861

Manchmal kann man echt nur mit dem Kopf schütteln.

@Moritz Naczenski schrieb:

Ist aktuell in Bearbeitung: https://issues.shopware.com/issues/SW-22753

Über das Template geht das durch die neue Methode leider nicht mehr. Es wird in Zukunft direkt über das Backend machbar sein.

Ich hab in unserem Testshop das Upate auf 5.5.7 gemacht. Das genannte Ticket ist umgesetzt.
Wie kann ich denn nun URLs aus der Sitemap ausschliessen?
Bisher konnte man das über {block name=„frontend_sitemap_xml_suppliers“}{/block} im eigenen Theme.

Ich hab das Ticket insofern falsch verstanden, dass es nicht über das Backend geht, aber die config.php.

Hier ein Beispiel:

'sitemap' => [
        'excluded_urls' => [
            [
                'resource' => 'product', // Möglich: Product, campaign, manufacturer, blog, category, static
                'identifier' => '', // Die ID der o.g. Entität. Wenn leer (oder 0) wird die o.g. Resource komplett ausgeschlossen
                'shopId' => 0 // Die ID des Shops, für den dieser Ausschluss gilt. Bei 0 zählen alle Shops
            ],[
                'resource' => 'static', // Beispiel: Schließt die statische Seite mit ID 1 (identifier) von Shop 2 aus
                'identifier' => '1', // In Shop mit ID 1 wird die URL trotzdem ausgespielt
                'shopId' => 2
            ],[
                'resource' => 'static', // Beispiel: Schließt die statische Seite mit den ID's 3 und 4 (identifier) von allen Shops aus
                'identifier' => '1',
                'shopId' => 0
            ],
        ]
    ],

 

1 „Gefällt mir“

Danke, aber das funktioniert nicht.
Vielleicht hab ich ja auch was falsch gemacht?
So sieht die config.php aus.

  array (
    'username' => 'xxxxxxx',
    'password' => 'xxxxxxx',
    'dbname' => 'xxxxxxx',
    'host' => 'xxxxxxx',
    'port' => 'xxxxxxx',
  ),
  
 	'cdn' => [
    'strategy' => 'plain',
    'adapters' => [
        'local' => [
            'type' => 'local',
            'mediaUrl' => '',
            'path' => realpath( __DIR__. '/'),
            'permissions' => [
                'file' => [
                    'public' => 0666 & ~umask(),
                    'private' => 0600 & ~umask(),
                ],
                'dir' => [
                    'public' => 0777 & ~umask(),
                    'private' => 0700 & ~umask(),
                ]
            ],
        ],
        'old_local' => [
            'type' => 'local',
            'mediaUrl' => '',
            'path' => realpath( __DIR__. '/'),
            'permissions' => [
                'file' => [
                    'public' => 0666 & ~umask(),
                    'private' => 0600 & ~umask(),
                ],
                'dir' => [
                    'public' => 0777 & ~umask(),
                    'private' => 0700 & ~umask(),
                ]
            ],
        ]
    ]
],

 'sitemap' => [
        'excluded_urls' => [
            [
                'resource' => 'manufacturer', // Möglich: Product, campaign, manufacturer, blog, category, static
                'identifier' => '0', // Die ID der o.g. Entität. Wenn leer (oder 0) wird die o.g. Resource komplett ausgeschlossen
                'shopId' => 0 // Die ID des Shops, für den dieser Ausschluss gilt. Bei 0 zählen alle Shops
            ]
        ]
    ]

);

 

Mach mal statt

 'resource' => 'manufacturer'

Einfach

'resource' => 'Shopware\Models\Article\Supplier',

Damit hat es bei mir geklappt. Ich schau mir das nochmal an, warum das so ist.

1 „Gefällt mir“