Ich möchte rel=canonical href mit Java Script aktualisieren

Ich habe einige doppelte Seiten auf meiner Domain und muss das kanonische Tag der doppelten Seiten mit JavaScript auf die Originalseite verweisen. (Das Löschen der doppelten Seiten kommt nicht infrage, da sie beträchtlichen Traffic generieren.)
Könnte mir jemand empfehlen, wie man in Discourse ein href-Attribut mit JavaScript aktualisiert?

Hier ist es, @KranthiKiranGude. So kannst du das Attribut href in JavaScript ändern. Zuerst wählst du das DOM-Element aus und änderst dann das Attribut.

<script>
var uC = document.querySelectorAll("link[rel='canonical']")[0];
var newURL = "https://my.coolforum.com/newlink";
uC.setAttribute("href", newURL);
</script>

Natürlich benötigst du eine Logik, die auf der Seite basiert, auf der du arbeiten möchtest.

Allgemeines Beispiel für die Logik:

<script>
if("die_tatsächliche_seiten_url_oder_id" == "meine_interessante_seiten_url_oder_id")
{
   var uC = document.querySelectorAll("link[rel='canonical']")[0];
   var newURL = "https://my.coolforum.com/newlink";
   uC.setAttribute("href", newURL);
}
</script>

Hoffe, das hilft.

Hallo @neounix,

ich habe deinen Code ausprobiert, aber anstatt den href zu aktualisieren, wurde ein neues Skript-Tag generiert:
image
Ich habe dieses Skript im “/head”-Bereich aktualisiert.

Hallo @KranthiKiranGude,

bitte poste den exakten Code, den du verwendet hast, und gib genau an, wo du ihn eingefügt hast. Füge außerdem einen Screenshot des Eintrags im </head>-Bereich bei, den du erwähnt hast.

Danke!

Es ist normal, dass beim Hinzufügen von mehr JavaScript neues JavaScript generiert wird.

Übrigens musst du das DOM in der Webentwickler-Konsole (die Elemente) prüfen, nicht im Quellcode der Seite.

Hallo @neounix,


Das ist das Skript, das ich hinzugefügt habe. Dies dient nur zum Testen.

Ich verstehe.

Übrigens fehlt in deiner Skript-Bedingungsanweisung ein öffnendes Anführungszeichen…

Hallo @neounix,

Es hat in der Dev-Konsole funktioniert. Aber im Quelltext wird immer noch auf die tatsächliche URL verwiesen. Wenn ich mich nicht irre, übernehmen Suchmaschinen die Daten aus dem Quelltext und nicht aus den DOM-Elementen. Bitte korrigieren Sie mich, falls ich falsch liege.

Ich bin mir ehrlich gesagt nicht sicher. Ich dachte früher, dass moderne Suchmaschinen (GoogleBot) das DOM lesen, aber jetzt, wo ich darüber nachdenke, ergibt es Sinn, dass Suchmaschinen möglicherweise nur den Quelltext und nicht das DOM lesen.

Aber … als ich bei Google nachgeprüft habe, heißt es:

SEO-Signale im DOM (Seitentitel, Meta-Beschreibungen, kanonische Tags, Meta-Robots-Tags usw.) werden berücksichtigt. Dynamisch im DOM eingefügter Inhalt ist ebenfalls crawlbare und indexierbar. Darüber hinaus können in bestimmten Fällen die DOM-Signale sogar Vorrang vor widersprüchlichen Angaben im HTML-Quelltext haben. Dies erfordert noch mehr Arbeit, war aber bei mehreren unserer Tests der Fall.

Referenz:

https://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157

Hallo @neounix,

vielen Dank für deine Hilfe. Ich werde mich auch noch einmal mit diesem Teil befassen. Aber wirklich, vielen Dank an dich.

Willkommen!

Bitte poste hier wieder und lass uns wissen, wie deine Recherche ausgegangen ist.

Eine weitere Methode, an der ich in meiner Freizeit in letzter Zeit gearbeitet habe, besteht darin, diese Discourse-Ruby-Bibliothek direkt zu modifizieren:

Du könntest etwas in diese Richtung in Betracht ziehen, falls dir die DOM-Manipulationstechnik mit JS nicht weiterhilft, @KranthiKiranGude

Hallo @neounix,

Ich habe die Seite mit dem URL-Inspektions-Tool getestet. Google erkennt die aktualisierte URL.

Perfekt… schön zu hören, dass es funktioniert hat.

Danke für das Testen und das Zurückmelden.

PS: Diese JS-DOM-Methode ist viel einfacher als die Manipulation von canonical_url.rb :slight_smile:

Ich bin mir nicht sicher, ob das Überschreiben des Canonical-Tags mit JavaScript funktionieren wird, da dies eher auf der Ebene des Spiders liegt (also dem Teil, der Daten abruft und sammelt) als auf der Ebene des Indexers (dem Teil eines Bots, der Daten interpretiert und im Suchindex speichert).

Ungefragter Rat: Du solltest vielleicht diesen Beitrag lesen, damit du diese Überschreibungen in ein Plugin einbauen kannst:

Ja, mir auch. Die Entscheidung steht noch aus.

Allerdings liefern Google-Suchen zu diesem Thema viele Ergebnisse, wobei viele Leute dies tun und viele behaupten, dass Google DOM-Änderungen respektiert (und einige sagen, dass dies nicht der Fall ist, sodass es anscheinend keinen starken, überwältigenden Konsens zu diesem Thema gibt). Siehe beispielsweise:

Ich denke, wenn ich das tun würde, würde ich (1) das ursprüngliche Canonical-Tag aus der Quellseite löschen und dann (2) ein neues Canonical-Tag mit JS in das DOM einfügen.

Im Laufe der Zeit können wir dann einfach in der Google Search Console nachsehen, was Google als Canonical ausgewählt hat.

Siehe auch:

Da viele dies für SEO als wichtig erachten, habe ich dies angesichts der Bestätigung von @KranthiKiranGude erneut geprüft.

Laut developers.google.com, Grundlagen der JavaScript-SEO verstehen:

Googlebot unterstützt Web-Komponenten. Wenn Googlebot eine Seite rendert, flacht es den Shadow-DOM und Light-DOM Inhalt ab. Das bedeutet, Googlebot kann nur Inhalte sehen, die im gerenderten HTML sichtbar sind. Um sicherzustellen, dass Googlebot Ihre Inhalte auch nach dem Rendern noch sehen kann, verwenden Sie den Mobile-Friendly Test oder das URL-Inspektions-Tool und prüfen Sie das gerenderte HTML.

Da (1) @KranthiKiranGude bei seinen Tests sein URL-Inspektions-Tool verwendet hat und (2) er bestätigt hat, dass das Canonical-Tag auf diese Weise wie erwartet geändert wurde, folgt daraus, dass GoogleBot laut Google diesen DOM-Inhaltsänderungen nach dem Rendern der Seite tatsächlich „sieht

Ja, ich unterstütze die Idee, dass Google den DOM-Inhalt beim Indexieren so flacht, voll und ganz.

Aber einige bzw. die meisten meta-Tags entfalten ihre Semantik auf der Ebene des HTTP-Protokolls und nicht auf der Ebene des HTML-Protokolls, obwohl sie im HTML vorhanden sind. Ich habe das „beim Indexieren

Nicht wirklich, tut mir leid. Dieser Artikel von www.hillwebcreations.com erwähnt weder das DOM noch, wie man das DOM inspiziert, usw. Und zumindest für mich liest er sich „veraltet und meinungsstark

Ja, dieser Artikel stellt tatsächlich klar, dass sie gesehen haben, dass dynamisch eingefügte Canonical-Tags sich exakt genauso verhalten, als wären sie im Quellcode enthalten. Du hast recht (und ich hätte das beim ersten Mal, als du es gepostet hast, genauer lesen sollen).

Obwohl drei der vier Seiten, auf die du dich in diesem Thema beziehst, einschließlich derjenigen, die uns die Antwort gegeben hat, sogar älter sind als der Artikel, den ich gepostet habe :wink:

Übrigens @RGJ, sorry für die Verwirrung bezüglich „nicht aktuell"…

Wenn ich die Begriffe „veraltet" oder „nicht aktuell" verwende, beziehe ich mich auf Konzepte und Ideen, nicht auf das physische Datum eines Artikels.

Manche Menschen schreiben Artikel mit dem Datum „heute", doch die Konzepte darin sind „veraltet