- Create /api/og-image endpoint that generates SVG with 1.91:1 ratio (1200x630px) - Prevents logo cropping on Facebook and Twitter - Uses safe padding (150px) to ensure content is never cut off - Update default OG image to use dynamic endpoint - Add SEO testing documentation
6.7 KiB
SEO & Open Graph Testing Guide
Übersicht
Diese Anleitung zeigt dir, wie du die SEO-Implementierung (Meta-Tags, Open Graph, Twitter Cards) testen kannst.
Lokales Testen
1. Browser-Entwicklertools
-
App starten:
npm run devDie App läuft unter
http://localhost:3000 -
Meta-Tags im HTML prüfen:
- Öffne eine Seite (z.B.
http://localhost:3000/enoderhttp://localhost:3000/de/about) - Rechtsklick → "Seite untersuchen" (F12)
- Tab "Elements" →
<head>Bereich erweitern - Suche nach Meta-Tags:
<meta property="og:title"><meta property="og:description"><meta property="og:image"><meta name="twitter:card">
- Öffne eine Seite (z.B.
-
View Page Source:
- Rechtsklick → "Seitenquelltext anzeigen"
- Suche nach "og:" oder "twitter:" um alle Open Graph und Twitter Meta-Tags zu sehen
2. cURL-Test (für schnelle Prüfung)
# Prüfe Meta-Tags einer Seite
curl -s http://localhost:3000/en | grep -i "og:\|twitter:"
3. Node.js-Script zum Testen
Erstelle eine Test-Datei test-og.js:
const https = require('https');
const http = require('http');
function fetchHTML(url) {
return new Promise((resolve, reject) => {
const client = url.startsWith('https') ? https : http;
client.get(url, (res) => {
let data = '';
res.on('data', (chunk) => data += chunk);
res.on('end', () => resolve(data));
}).on('error', reject);
});
}
async function testOGTags(url) {
try {
const html = await fetchHTML(url);
const ogTags = {
title: html.match(/<meta property="og:title" content="([^"]*)"/)?.[1],
description: html.match(/<meta property="og:description" content="([^"]*)"/)?.[1],
image: html.match(/<meta property="og:image" content="([^"]*)"/)?.[1],
url: html.match(/<meta property="og:url" content="([^"]*)"/)?.[1],
};
console.log('Open Graph Tags:', ogTags);
return ogTags;
} catch (error) {
console.error('Error:', error.message);
}
}
// Test
testOGTags('http://localhost:3000/en');
Online-Tools (für Produktions-URLs)
1. Facebook Sharing Debugger (Empfohlen)
URL: https://developers.facebook.com/tools/debug/
Verwendung:
- Öffne die URL
- Gib deine Produktions-URL ein (z.B.
https://hoerdle.de/en) - Klicke auf "Debuggen"
- Prüfe die Vorschau und alle Meta-Tags
Wichtig:
- Facebook cached die Vorschau! Klicke auf "Scraping erneut ausführen" um den Cache zu leeren
- Funktioniert nur mit öffentlich erreichbaren URLs (nicht localhost)
2. Twitter Card Validator
URL: https://cards-dev.twitter.com/validator
Verwendung:
- Öffne die URL
- Gib deine Produktions-URL ein
- Prüfe die Twitter Card Vorschau
Hinweis: Twitter hat den Validator eingestellt, aber die Cards funktionieren trotzdem. Du kannst auch einfach einen Tweet mit deiner URL erstellen, um zu sehen, ob die Card angezeigt wird.
3. LinkedIn Post Inspector
URL: https://www.linkedin.com/post-inspector/
Verwendung:
- Öffne die URL (Login erforderlich)
- Gib deine Produktions-URL ein
- Prüfe die LinkedIn Vorschau
4. OpenGraph.xyz (Universelles Tool)
URL: https://www.opengraph.xyz/
Verwendung:
- Öffne die URL
- Gib deine URL ein
- Sieh dir alle Open Graph und Twitter Meta-Tags an
- Sieh dir die Vorschau für verschiedene Plattformen an
5. Metatags.io
URL: https://metatags.io/
Verwendung:
- Gebe deine URL ein
- Sieh dir alle Meta-Tags an
- Vorschau für verschiedene Plattformen
Produktions-Test (hoerdle.de / hördle.de)
Sobald die App deployed ist, kannst du alle oben genannten Tools mit deinen Produktions-URLs verwenden:
Test-URLs:
- Homepage (EN):
https://hoerdle.de/en - Homepage (DE):
https://hoerdle.de/de - About (EN):
https://hoerdle.de/en/about - About (DE):
https://hoerdle.de/de/about - Genre-Seiten:
https://hoerdle.de/en/Rock(Beispiel) - Special-Seiten:
https://hoerdle.de/en/special/Weihnachtslieder(Beispiel)
Schnelltest mit cURL:
# Teste Homepage
curl -s https://hoerdle.de/en | grep -E "og:|twitter:" | head -10
# Teste About-Seite
curl -s https://hoerdle.de/de/about | grep -E "og:|twitter:" | head -10
Erwartete Meta-Tags
Die folgenden Meta-Tags sollten auf allen Seiten vorhanden sein:
Open Graph Tags:
og:title- Seitentitelog:description- Seitenbeschreibungog:image- Bild für Social Media (Standard:/favicon.ico)og:url- Canonical URLog:type- Typ (sollte "website" sein)og:site_name- Name der Siteog:locale- Sprache (de/en)
Twitter Tags:
twitter:card- Card-Typ (sollte "summary_large_image" sein)twitter:title- Titeltwitter:description- Beschreibungtwitter:image- Bild
Canonical & Alternates:
<link rel="canonical">- Canonical URL<link rel="alternate" hreflang="de">- Deutsche Version<link rel="alternate" hreflang="en">- Englische Version<link rel="alternate" hreflang="x-default">- Standard-Version
Troubleshooting
Problem: Meta-Tags werden nicht angezeigt
Lösung:
- Prüfe, ob die App läuft:
npm run dev - Prüfe Browser-Console auf Fehler
- Stelle sicher, dass
generateMetadatain der Seite exportiert ist - Prüfe, ob
lib/metadata.tskorrekt importiert wird
Problem: Open Graph Image wird nicht angezeigt
Lösung:
- Prüfe, ob das Bild unter
/favicon.icoexistiert (oder konfiguriertes OG-Image) - Für bessere Ergebnisse: Erstelle ein dediziertes Open Graph Bild (1200x630px)
- Platziere es in
public/og-image.png - Setze in
.env:NEXT_PUBLIC_OG_IMAGE=/og-image.png
Problem: Facebook zeigt alte Vorschau
Lösung:
- Öffne Facebook Sharing Debugger
- Gib deine URL ein
- Klicke auf "Scraping erneut ausführen" (mehrfach, falls nötig)
- Facebook cached die Vorschau - Cache kann mehrere Stunden dauern
Problem: Domain-Erkennung funktioniert nicht
Lösung:
- Prüfe
lib/seo.ts-getBaseUrl()Funktion - Stelle sicher, dass Request-Headers korrekt sind
- In Produktion: Prüfe, ob Proxy-Headers (
x-forwarded-host) korrekt gesetzt sind
Open Graph Bild optimieren
Für bessere Social Media Vorschauen solltest du ein dediziertes OG-Bild erstellen:
Empfohlene Größe: 1200x630px
Format: PNG oder JPG
Pfad: public/og-image.png
Konfiguration:
# In .env
NEXT_PUBLIC_OG_IMAGE=/og-image.png
Dann wird dieses Bild in allen Open Graph Meta-Tags verwendet.