Meta-Tags liefern Informationen über eine Webseite, die im Browser nicht sichtbar sind: Beschreibung, Autor, Zeichensatz und Anweisungen für Suchmaschinen. Mit der PHP-Funktion get_meta_tags() lassen sich diese Daten aus jeder HTML-Seite extrahieren.
Grundlegende Verwendung
Die Funktion erwartet einen Dateipfad oder eine URL und gibt ein assoziatives Array mit allen <meta name="...">-Tags zurück:
<?php
$tags = get_meta_tags('https://www.example.com');
if ($tags !== false) {
echo $tags['description'] ?? 'Keine Beschreibung';
echo $tags['author'] ?? 'Kein Autor';
}
?>
Die Array-Schlüssel entsprechen dem name-Attribut der Meta-Tags, umgewandelt in Kleinbuchstaben. Bindestriche bleiben erhalten, zum Beispiel wird <meta name="revisit-after"> zu $tags['revisit-after'].
Praxisbeispiel: SEO-Daten mehrerer Seiten vergleichen
Ein nützlicher Einsatz ist der Vergleich von Meta-Descriptions verschiedener Seiten, etwa um doppelte Beschreibungen zu finden:
<?php
$seiten = [
'https://www.example.com',
'https://www.example.com/kontakt',
'https://www.example.com/impressum',
];
foreach ($seiten as $url) {
$tags = @get_meta_tags($url);
if ($tags === false) {
echo $url . ': nicht erreichbar' . PHP_EOL;
continue;
}
$desc = $tags['description'] ?? '(keine description)';
echo $url . ': ' . $desc . PHP_EOL;
}
?>
Das @ vor dem Funktionsaufruf unterdrückt Warnungen, falls eine URL nicht erreichbar ist. Die Prüfung auf false fängt diesen Fall sauber ab.
Einschränkungen von get_meta_tags()
Die Funktion hat zwei wichtige Einschränkungen, die man kennen sollte:
Nur name-Attribut: get_meta_tags() liest ausschließlich Tags mit dem Attribut name. Open-Graph-Tags (<meta property="og:title">) und Twitter-Cards (<meta name="twitter:card">) werden teilweise nicht erkannt, weil sie das property-Attribut statt name verwenden.
allow_url_fopen: Für Remote-URLs muss die PHP-Einstellung allow_url_fopen in der php.ini aktiviert sein. Auf manchen Shared-Hosting-Servern ist diese Einstellung deaktiviert.
Alternative: DOMDocument für alle Meta-Tags
Wer auch Open-Graph-Tags oder andere Meta-Varianten auslesen möchte, kann stattdessen DOMDocument verwenden. Diese Klasse parst den gesamten HTML-Code und erlaubt den Zugriff auf beliebige Attribute:
<?php
function alleMetaTags(string $html): array
{
$doc = new DOMDocument();
@$doc->loadHTML($html);
$tags = [];
$metaElements = $doc->getElementsByTagName('meta');
foreach ($metaElements as $meta) {
$key = $meta->getAttribute('name')
?: $meta->getAttribute('property');
if ($key !== '') {
$tags[$key] = $meta->getAttribute('content');
}
}
return $tags;
}
$html = file_get_contents('https://www.example.com');
$tags = alleMetaTags($html);
/* Jetzt sind auch OG-Tags verfügbar */
echo $tags['og:title'] ?? 'Kein OG-Title';
echo $tags['og:description'] ?? 'Keine OG-Description';
echo $tags['description'] ?? 'Keine Description';
?>
Mit DOMDocument werden sowohl name- als auch property-basierte Meta-Tags erfasst. Das ist besonders für die Auswertung von Social-Media-Metadaten relevant.
Wann welchen Ansatz wählen?
get_meta_tags() ist die einfachste Lösung, wenn nur Standard-Meta-Tags wie description, author oder robots gebraucht werden. Für Open-Graph-Tags, Twitter-Cards oder andere Sonderformate führt kein Weg an DOMDocument vorbei.