Shopify Canonical Einstellung Code

Hallo zusammen,

folgender Code ist in unserem Shop im Head:

{% if request.path contains 'collections' and request.path contains '/products/' == false %}
{% endif %}
 {% if request.path contains '/vendors' %}
  {% assign canonical_url = request.url %}
{% else %}
  {% assign canonical_url = request.path | append: request.query %}
  {% assign canonical_url = canonical_url | split: '?' | first %}
{% endif %}

Der Code funktioniert und stellt sicher, dass URLs wie “https://second-circle.de/collections/kuechengeraete-bware?page=2” folgendeCanonical URL “https://second-circle.de/collections/kuechengeraete-bware” haben.

Für uns sind aber auch die Vendor URLs wichtig für SEO und hier funktioniert der Code nicht, die URLs wie z.B.

https://second-circle.de/collections/vendors?q=Springlane” auch das Canonical “https://second-circle.de/collections/vendors?q=Springlane” haben.

Problem ist jetzt nur die Seiten wie “https://second-circle.de/collections/vendors?page=2&q=Springlane” auch den Canonical “https://second-circle.de/collections/vendors?page=2&q=Springlane” haben.

Kann ich den Code im Header so ändern, dass auch auf den Vendors URLs als Canonical die Seite 1 verwendet wird?

Hey @fabianbauer

Um sicherzustellen, dass auf Vendor-Seiten die richtige kanonische URL verwendet wird, insbesondere wenn mehrere Seiten (Pagination) vorhanden sind, den Code anpassen, um die Paginierungsparameter aus der URL zu entfernen. Dies sollte sicherstellen, dass alle Vendor-Seiten auf die Seite 1 als kanonische URL verweisen. Hier ein angepasstes Code Beispiel:

{% if request.path contains 'collections' and request.path contains '/products/' == false %}
{% endif %}
{% if request.path contains '/vendors' %}
  {% assign canonical_url = request.url %}
  {% assign canonical_url = canonical_url | split: '?' | first %}
  {% assign querystring = request.query | split: '&' %}
  {% assign new_querystring = '' %}
  {% for param in querystring %}
    {% unless param contains 'page=' %}
      {% assign new_querystring = new_querystring | append: param %}
      {% unless forloop.last %}
        {% assign new_querystring = new_querystring | append: '&' %}
      {% endunless %}
    {% endunless %}
  {% endfor %}
  {% if new_querystring != '' %}
    {% assign canonical_url = canonical_url | append: '?' | append: new_querystring %}
  {% endif %}
{% else %}
  {% assign canonical_url = request.path | append: request.query %}
  {% assign canonical_url = canonical_url | split: '?' | first %}
{% endif %}

Diese Bedingung prüft, ob die aktuelle URL /vendors enthält, um festzustellen, ob es sich um eine Vendor-Seite handelt:

{% if request.path contains '/vendors' %}

Hier wird die URL in den Pfad und den Query-String aufgeteilt. Dann wird der Query-String durchlaufen und alle Parameter außer page werden beibehalten:

{% assign canonical_url = request.url %}
{% assign canonical_url = canonical_url | split: '?' | first %}
{% assign querystring = request.query | split: '&' %}
{% assign new_querystring = '' %}
{% for param in querystring %}
  {% unless param contains 'page=' %}
    {% assign new_querystring = new_querystring | append: param %}
    {% unless forloop.last %}
      {% assign new_querystring = new_querystring | append: '&' %}
    {% endunless %}
  {% endunless %}
{% endfor %}

Wenn es andere Query-Parameter außer page gibt, werden sie wieder an die URL angehängt:

{% if new_querystring != '' %}
  {% assign canonical_url = canonical_url | append: '?' | append: new_querystring %}
{% endif %}

Weitere Ressourcen die ich für dich auf Google gefunden habe dazu:

  • Weglot provides a detailed guide on applying canonical tags in Shopify​ (Weglot)​.
  • HulkApps offers an in-depth SEO guide on mastering Shopify canonical tags​ (HulkApps)​.
  • Jamie McKaye explains how to fix pagination issues for SEO on Shopify​ (JamieMcKayeSEO)​.

Hoffe das hilft dir weiter - lass wissen falls nicht! :wink:


Warum nicht etwas Gamification in das Shop einbauen, um deinen Kunden etwas Fun im Shop anzubieten? Gerne kann ich bei Interesse Tipps dazu geben!

Hast du weitere Fragen zum Shop? Gebe einfach ein Suchbegriff oben in der Suchleiste der Community Landingpage ein, denn das Thema haben wir sehr wahrscheinlich schon besprochen. Halte bitte Ausschau in deiner E-Mail auf Notifications zu Antworten auf deine Fragen in der Community.

Hi Gabe,

danke für den Code.
Ich hab den Code eingefügt, jedoch funktioniert er nicht.

Z.b. die URL "https://second-circle.de/collections/vendors?page=3&q=Euluna" hat als Canonical "https://second-circle.de/collections/vendors?page=3&q=Euluna" und nicht "https://second-circle.de/collections/vendors?q=Euluna"

Viele Grüße
Fabian

Hey @fabianbauer

Ja, so ganz ist es von hier aus nicht ganz nachvollziehbar was da passiert und du wirst das ggf. mit einem Experten lösen müssen. Bitte beachte auch dass:

  • Shopify und Google eng zusammenarbeiten um automatisch kanonische Tags zu Produktseiten, Blog-Posts und Sammlungseiten hinzufügt, um Duplicate Content-Probleme zu vermeiden. Das bedeutet, dass Shopify bereits sicherstellt, dass die Hauptversion einer Seite indexiert wird und nicht ihre Duplikate.

  • Shopify hat viele Best Practices integriert, die dabei helfen, die Sichtbarkeit deiner Website in Suchmaschinen zu maximieren. Dazu gehören optimierte URL-Strukturen, Metadaten-Management und mobile Optimierung.

Wenn du es aber trotzdem selber programmieren möchtest dann bitte immer in einer Themekopie/Testumgebung zuerst testen und zusammen mit einem Experten/Programmierer. Du kannst ein Backup deines Themes erstellen, bevor man den Code bearbeitet, oder den Code wiederherstellen, falls dies nötig sein sollte. Du könntest auch einen unserer Experten engagieren indem du denen eine E-Mail rüberschießt. Unsere Experten antworten meist sehr schnell.

Änderungen zu deinem Theme Code können auch 1) die Page Loading Speeds negativ beeinflussen und 2) dein Theme aus den Theme Updates ausschließen. Das folgende ist Theme-abhängig, ohne Gewähr und dient lediglich dazu dich in die richtige Richtung zu weisen!

Um das Problem zu lösen, insbesondere für paginierte Seiten, ist es wichtig sicherzustellen, dass die Paginierungsparameter wie page=2 aus der kanonischen URL ausgeschlossen werden. Hier ist ein verfeinerter Ansatz, um dies zu erreichen:

Überprüfen, ob die URL eine Vendor-Seite ist:

{% if request.path contains '/vendors' %}

Initialisieren der kanonischen URL ohne Query-Parameter:

{% assign canonical_url = request.path %}

Aufteilen des Query-Strings und Herausfiltern des page-Parameters:

{% assign querystring = request.query | split: '&' %}
{% assign new_querystring = '' %}
{% for param in querystring %}
  {% unless param contains 'page=' %}
    {% if new_querystring != '' %}
      {% assign new_querystring = new_querystring | append: '&' %}
    {% endif %}
    {% assign new_querystring = new_querystring | append: param %}
  {% endunless %}
{% endfor %}

Rekonstruieren der kanonischen URL mit den gefilterten Query-Parametern:

{% if new_querystring != '' %}
  {% assign canonical_url = canonical_url | append: '?' | append: new_querystring %}
{% endif %}

Behandlung von Nicht-Vendor-URLs:

{% else %}
  {% assign canonical_url = request.path | append: request.query %}
  {% assign canonical_url = canonical_url | split: '?' | first %}
{% endif %}

Setzen des kanonischen Links:


Durch das Entfernen des page-Parameters aus der kanonischen URL wird sichergestellt, dass alle paginierten Seiten unter einer Vendor-URL auf die Basis-URL mit allen anderen relevanten Query-Parametern verweisen. Dies ist für SEO wichtig, da es die Ranking-Signale auf die Hauptseite konsolidiert und Probleme mit doppeltem Inhalt vermeidet.

Für detailliertere Schritte und Tools, die dir bei der Verwaltung von kanonischen URLs in Shopify helfen können, sind die folgenden Ressourcen hilfreich: