Start · Sprachen · JavaScript · Referenz · LargestContentfulPaint.id

LargestContentfulPaint.id

Eigenschaft

Gibt als schreibgeschützten String das <code>id</code>-Attribut des Elements zurück, das als Largest Contentful Paint (LCP) gemeldet wurde, oder einen leeren String.

seit JavaScript Chromium-Browser (Chrome/Edge 77+, Opera); Firefox Kategorie: webapi

Signatur

LargestContentfulPaint.id

Beschreibung

Die schreibgeschützte Eigenschaft id eines LargestContentfulPaint-Eintrags liefert den Wert des HTML-Attributs id des Elements, das zum Zeitpunkt des Eintrags das größte sichtbare Inhaltselement im Viewport war. Dieses Element ist entscheidend für die Core-Web-Vitals-Metrik Largest Contentful Paint.

In der Praxis nutzt man id vor allem im Real User Monitoring (RUM): Statt einer DOM-Referenz, die sich nicht serialisieren lässt, schickt man einen kurzen, gut lesbaren String an den Analyse-Server. So sieht man, welches Hero-Bild, welche Überschrift oder welcher Banner die LCP-Zeit verursacht.

Hat das Element kein id-Attribut, ist der Wert ein leerer String (""). Für eine robustere Zuordnung kombiniert man id daher meist mit entry.url (bei Bildern) oder einem aus entry.element erzeugten CSS-Selektor.

Rückgabewert

Typ
string
Beschreibung
Die id des LCP-Elements oder ein leerer String, wenn das Element keine id hat.

Beispiele

LCP-Element-ID in der Konsole ausgeben

const observer = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const last = entries[entries.length - 1]; // letzter Kandidat zählt
  console.log('LCP-Element-ID:', last.id || '(keine id)');
  console.log('LCP-Zeit (ms):', Math.round(last.startTime));
});

observer.observe({ type: 'largest-contentful-paint', buffered: true });
LCP-Element-ID: hero-image LCP-Zeit (ms): 1240

LCP-Daten per sendBeacon an den RUM-Server melden

let lcpEntry;

const po = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  lcpEntry = entries[entries.length - 1];
});
po.observe({ type: 'largest-contentful-paint', buffered: true });

// Beim Verlassen/Verstecken der Seite endgültigen Wert senden
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState !== 'hidden' || !lcpEntry) return;
  po.takeRecords();
  po.disconnect();

  const payload = JSON.stringify({
    metric: 'LCP',
    value: lcpEntry.startTime,
    elementId: lcpEntry.id,
    url: lcpEntry.url,
    size: lcpEntry.size,
  });
  navigator.sendBeacon('/rum', payload);
}, { once: true });

Fallback-Selektor, wenn keine id vorhanden ist

const describe = (entry) => {
  if (entry.id) return `#${entry.id}`;
  const el = entry.element;
  if (!el) return entry.url || '(unbekannt)';
  const cls = el.classList.length ? '.' + [...el.classList].join('.') : '';
  return el.tagName.toLowerCase() + cls;
};

new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    console.log('LCP-Kandidat:', describe(entry));
  }
}).observe({ type: 'largest-contentful-paint', buffered: true });
LCP-Kandidat: h1.page-title LCP-Kandidat: #hero-image

// Wichtig · Fallstricke

  • Leerer String statt null: Ohne id-Attribut liefert die Eigenschaft "". Prüfen Sie deshalb auf einen falsy-Wert und nicht auf null.
  • Mehrere Kandidaten: Während des Ladens meldet der Browser oft mehrere LCP-Einträge. Maßgeblich ist der letzte Eintrag vor der ersten Nutzereingabe (Klick, Tastendruck) bzw. bevor die Seite versteckt wird.
  • Momentaufnahme: Der Wert wird beim Erzeugen des Eintrags festgehalten. Ändert sich die id des Elements später, bleibt der Eintrag unverändert. entry.element kann dagegen null werden, wenn das Element aus dem DOM entfernt wurde.
  • Kompatibilität: Wird in Chromium-Browsern und seit Version 122 in Firefox unterstützt, in Safari nicht. Prüfen Sie die Unterstützung vorher mit PerformanceObserver.supportedEntryTypes.includes('largest-contentful-paint').
  • Datenschutz: IDs können sprechende Namen enthalten (z. B. Nutzer- oder Produkt-IDs). Überlegen Sie, bevor Sie sie an Drittanbieter-Analysen weitergeben.