Signatur
Beschreibung
Die Eigenschaft rel spiegelt das HTML-Attribut rel eines <a>-Elements wider. Der Wert ist ein String mit einem oder mehreren Linktypen, die durch Leerzeichen getrennt sind, zum Beispiel "noopener noreferrer", "nofollow", "external" oder "next". Diese Angaben beschreiben, wie das verlinkte Dokument zur aktuellen Seite steht.
Der Wert beeinflusst sowohl die Sicherheit als auch Suchmaschinen und Browserfunktionen:
noopenerverhindert, dass die neu geöffnete Seite überwindow.openerauf die ursprüngliche Seite zugreift.noreferrerunterdrückt zusätzlich denReferer-Header und schließtnoopenermit ein.nofollow,ugcundsponsoredsind Hinweise für Suchmaschinen.
Beim Lesen erhältst du immer den vollständigen Attributwert als String. Fehlt das Attribut, ist das ein leerer String "". Beim Setzen wird das Attribut vollständig ersetzt. Wenn du einzelne Linktypen hinzufügen oder entfernen willst, ohne andere zu überschreiben, ist relList (eine DOMTokenList) meist die bessere Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | "" | Nur beim Setzen: ein oder mehrere Linktypen, getrennt durch Leerzeichen, z. B. "noopener noreferrer". Andere Werte als Strings werden in einen String umgewandelt. |
Rückgabewert
rel-Attributs. Fehlt das Attribut, ist es ein leerer String "".Beispiele
rel-Wert eines Links auslesen
// HTML: <a id="doku" href="https://example.com" rel="external nofollow">Doku</a>
const link = document.getElementById('doku');
console.log(link.rel);
console.log(link.rel.split(' ').includes('nofollow'));
Externe Links mit target="_blank" absichern
// Alle Links, die in einem neuen Tab öffnen, erhalten noopener noreferrer
const links = document.querySelectorAll('a[target="_blank"]');
for (const a of links) {
const isExternal = a.origin !== location.origin;
if (isExternal) {
a.rel = 'noopener noreferrer';
}
}
console.log(`${links.length} Links geprüft`);
Linktyp ergänzen, ohne bestehende Werte zu verlieren
const a = document.createElement('a');
a.href = 'https://partner.example/angebot';
a.textContent = 'Zum Angebot';
a.rel = 'external';
// Falsch: a.rel = 'sponsored' würde 'external' überschreiben
// Richtig per String:
const addRel = (el, token) => {
const tokens = new Set(el.rel.split(/\s+/).filter(Boolean));
tokens.add(token);
el.rel = [...tokens].join(' ');
};
addRel(a, 'sponsored');
console.log(a.rel);
// Einfacher mit relList:
a.relList.add('noopener');
console.log(a.rel);
document.body.append(a);
Nutzerinhalte (z. B. Kommentare) kennzeichnen
const comment = document.querySelector('.kommentar');
comment?.querySelectorAll('a[href]').forEach((a) => {
a.rel = 'ugc nofollow noopener';
a.target = '_blank';
});
// Wichtig · Fallstricke
- Überschreiben: Wenn du
relsetzt, wird der komplette Attributwert ersetzt. Zum Hinzufügen oder Entfernen einzelner Linktypen verwendest durelList.add()bzw.relList.remove(). - Sicherheit (Tabnabbing): Ohne
noopenerkann eine pertarget="_blank"geöffnete fremde Seite überwindow.opener.locationdeine Seite umleiten, zum Beispiel auf eine Phishing-Seite. Moderne Browser (Chrome 88+, Firefox 79+, Safari 12.1+) behandelntarget="_blank"automatisch so, als wärenoopenergesetzt. Für ältere Browser solltest dunoopenertrotzdem ausdrücklich angeben. - Datenschutz:
noreferrerunterdrückt denReferer-Header. Das kann Statistik- und Affiliate-Auswertungen auf der Zielseite beeinträchtigen. - Keine Prüfung: Der Browser prüft nicht, ob die Linktypen gültig sind. Tippfehler wie
"noopenner"führen zu keiner Fehlermeldung und haben einfach keine Wirkung. - Groß-/Kleinschreibung: Linktypen werden ohne Beachtung der Groß-/Kleinschreibung ausgewertet. Die Eigenschaft gibt den Wert aber genau so zurück, wie er im Attribut steht.
- Kompatibilität:
relwird von allen Browsern unterstützt.relListgibt es erst in neueren Browsern (im Internet Explorer fehlt es).