sitemap

XML-Sitemaps von Websites mit automatischer Erkennung über robots.txt parsen

Maintainer: onnimonni

Installation und Laden

INSTALL sitemap FROM community;
LOAD sitemap;

Beispiel

-- Get all URLs from a sitemap (auto-prepends https://)
SELECT * FROM sitemap_urls('example.com');
-- Direct sitemap URL (skips discovery)
SELECT * FROM sitemap_urls('https://example.com/sitemap.xml');
-- Get URLs from multiple sites
SELECT * FROM sitemap_urls(['example.com', 'google.com']);
-- Filter specific URLs
SELECT * FROM sitemap_urls('example.com')
WHERE url LIKE '%/blog/%';
-- Bruteforce find sitemap (tries 587+ patterns)
SELECT bruteforce_find_sitemap('example.com') as sitemap_url;
-- Ignore errors for invalid domains
SELECT * FROM sitemap_urls(['valid.com', 'invalid.com'], ignore_errors := true);
-- Set custom user agent
SET sitemap_user_agent = 'MyBot/1.0';
-- Count URLs by type
SELECT
CASE
WHEN url LIKE '%/product/%' THEN 'product'
WHEN url LIKE '%/blog/%' THEN 'blog'
ELSE 'other'
END as type,
count(*) as count
FROM sitemap_urls('https://example.com')
GROUP BY type;

Über sitemap

Die Erweiterung sitemap stellt eine Tabellenfunktion zum Parsen von XML-Sitemaps von Websites bereit. Sie erkennt Sitemaps automatisch über mehrere Fallback-Methoden und unterstützt das rekursive Durchlaufen von Sitemap-Indizes.

Funktionen:

  • Sitemap-Erkennung mit mehreren Fallbacks (robots.txt, /sitemap.xml, /sitemap_index.xml, HTML-Meta-Tags)
  • Sitzungs-Caching für gefundene Sitemap-Orte
  • Bruteforce-Finder (bruteforce_find_sitemap) – versucht über 587 gängige Sitemap-URL-Muster
  • Benutzerdefinierter User-Agent über SET sitemap_user_agent
  • Direkte Sitemap-URLs (überspringt die Erkennung)
  • Sitemap-Index-Unterstützung (verschachtelte Sitemaps)
  • Array-Unterstützung zur Verarbeitung mehrerer Domains
  • Wiederholungslogik mit exponentiellem Backoff
  • Beachtet den Retry-After-Header bei 429-Antworten
  • Gzip-Dekompression für .xml.gz-Dateien
  • Unterstützung mehrerer Namensräume (Standard + Google-Schemas)
  • SQL-Filterung mit WHERE-Klauseln
  • Optionales Ignorieren von Fehlern bei Stapelverarbeitung

Die Funktion gibt eine Tabelle mit folgenden Spalten zurück:

  • url: Seiten-URL (VARCHAR)
  • lastmod: Datum der letzten Änderung (VARCHAR, optional)
  • changefreq: Hinweis zur Änderungshäufigkeit (VARCHAR, optional)
  • priority: Prioritätshinweis 0.0–1.0 (VARCHAR, optional)

Optionen:

  • follow_robots (BOOLEAN): Zuerst robots.txt parsen (Standard: true)
  • max_depth (INTEGER): Maximale Verschachtelung des Sitemap-Index (Standard: 3)
  • max_retries (INTEGER): Maximale Wiederholungsversuche (Standard: 5)
  • backoff_ms (INTEGER): Anfängliches Backoff in ms (Standard: 100)
  • max_backoff_ms (INTEGER): Obergrenze für Backoff in ms (Standard: 30000)
  • ignore_errors (BOOLEAN): Bei fehlgeschlagenen Abrufen keinen Fehler werfen (Standard: false)

Beispiel mit Optionen:

SELECT * FROM sitemap_urls(
'https://example.com',
follow_robots := true,
max_depth := 5,
max_retries := 10
) WHERE url LIKE '%/product/%';

Bruteforce-Sitemap-Erkennung (Skalarfunktion):

-- Find sitemap by trying 587+ common patterns
SELECT bruteforce_find_sitemap('https://example.com') as sitemap_url;
-- Returns first working sitemap URL or NULL
-- Patterns tested include:
-- /sitemap.xml, /sitemap_index.xml
-- /sitemap/sitemap.xml, /sitemaps/sitemap-index.xml
-- /en/sitemap.xml, /de/sitemap.xml
-- /pub/media/sitemap.xml
-- And 580+ more variations

Kombinieren Sie dies mit http_request, um Seiteninhalte abzurufen:

SELECT s.url, h.body
FROM sitemap_urls('https://example.com') s
JOIN LATERAL (SELECT * FROM http_get(s.url)) h ON true
WHERE s.url LIKE '%/product/%'
LIMIT 10;

Hinzugefügte Funktionen

Diese Erweiterung fügt keine Funktionen hinzu.

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.