from urllib.parse import urlparse, parse_qs, urlunparse, urlencode # Liste gängiger Tracking-Parameter, die entfernt werden sollen TRACKING_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'session', 'ref', 'gclid', 'fbclid'] def normalize_url(url): """ Normalisiert eine URL, indem Fragmente entfernt und gängige Tracking-Parameter aus der Query-Komponente entfernt werden. """ parsed = urlparse(url) # 1. Fragment entfernen # 2. Query-Parameter bereinigen query_params = parse_qs(parsed.query) # Tracking-Parameter entfernen cleaned_params = {k: v for k, v in query_params.items() if k.lower() not in TRACKING_PARAMS} # Query neu zusammensetzen # Da parse_qs Listen von Werten zurückgibt, müssen wir sie für urlunparse/urlencode # in das Standardformat zurückführen (z.B. k=v1&k=v2) cleaned_query = urlencode(cleaned_params, doseq=True) # urlunparse erwartet eine Liste von 6 Elementen: scheme, netloc, path, params, query, fragment normalized_url = urlunparse(parsed._replace(query=cleaned_query, fragment='')) return normalized_url