From 5d52db6eede89f31c6595003cdf3e067ab10ce2e Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jun 2026 01:15:58 +0200 Subject: [PATCH] fix: exclude internal comment-links; add initial external domain whitelist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - extractor.py: _find_comment_links() liefert nur noch externe Links. Interne Links in Kommentaren sind CMS-Artefakte (auskommentierte Navigations-Fragmente), keine SEO-Spam-Indikatoren. - allowed_external.yaml: 36 legitime externe Domains nach initialem Crawl von bredelar.info manuell geprüft und eingetragen. Co-Authored-By: Claude Sonnet 4.6 --- config/allowed_external.yaml | 64 +++++++++++++++++++++++++++--------- scanner/extractor.py | 14 ++++++-- 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/config/allowed_external.yaml b/config/allowed_external.yaml index ae0a9e4..5fa4271 100644 --- a/config/allowed_external.yaml +++ b/config/allowed_external.yaml @@ -1,18 +1,52 @@ -# Whitelist erlaubter externer Domains -# -# Jede externe Domain, die auf der Website verlinkt ist, muss hier eingetragen sein. +# Whitelist erlaubter externer Domains — bredelar.info +# Erstellt nach initialem Crawl und manueller Sichtprüfung am 2026-06-12. # Neue externe Domains, die NICHT hier stehen, lösen einen Alarm aus. -# -# Format: eine Domain pro Zeile (ohne Protokoll) -# Beispiele: -# Häufig verwendete externe Ressourcen — nur eintragen, was wirklich genutzt wird: -# - fonts.googleapis.com -# - fonts.gstatic.com -# - cdnjs.cloudflare.com -# - maps.googleapis.com -# - www.google-analytics.com -# - www.googletagmanager.com +# Lokale Vereine, Institutionen, Betriebe +- www.bergbauspuren-bredelar.de +- www.bergbauspuren.de +- www.kloster-bredelar.de +- www.schuetzen-bredelar.de +- www.klosterschuetzen-bredelar.de +- www.bsg-bredelar.de +- www.sg-hoppecketal.de +- www.sg-hoppecketal-padberg.de +- www.feuerwehrhütte-bredelar.de +- www.lesdurs-mc.de +- www.kantorei-marsberg.de +- www.tourismus-marsberg.de +- www.katholische-kirche-marsberg.de +- www.marsberg.ekvw.de -# Für bredelar.info: Bitte nach erstem `init` prüfen und befüllen. -# Vorerst leer = alle externen Links lösen Alarm aus. +# Lokale Unternehmen (Gewerbetreibende aus bredelar.info/companies/) +- www.VolksbankMarsberg.de +- www.borghoff-bredelar.de +- www.dachdeckermarsberg.de +- www.maler-luce.de +- www.pyls-pflasterbau.de + +# Technische Ressourcen (Fonts, CDN, Wetter-Widget) +- fonts.googleapis.com +- fonts.gstatic.com +- cdnjs.cloudflare.com +- www.wetter.com +- static1.wetter.com + +# Datenschutzerklärung / Impressum (gesetzlich vorgeschriebene Links) +- ec.europa.eu +- www.e-recht24.de +- www.heise.de +- www.ratgeberrecht.eu +- www.privacyshield.gov +- policies.google.com +- www.google.com +- adssettings.google.com +- developers.facebook.com +- www.facebook.com +- twitter.com + +# Webentwickler / Technischer Betreiber +- www.antillu.de + +# www-Variante der eigenen Domain (wird intern verlinkt) +- www.bredelar.info diff --git a/scanner/extractor.py b/scanner/extractor.py index 68aa669..e684f3f 100644 --- a/scanner/extractor.py +++ b/scanner/extractor.py @@ -303,10 +303,18 @@ def _extract_jsonld(soup: BeautifulSoup) -> list[dict]: # --------------------------------------------------------------------------- def _find_comment_links(html: str, base_url: str) -> list[str]: - """Find URLs hidden inside HTML comments.""" + """ + Find external URLs hidden inside HTML comments. + Internal links are excluded — CMS templates routinely comment out + navigation fragments that link back to the same domain. + """ + base_netloc = urlparse(base_url).netloc found: list[str] = [] for comment in re.findall(r"", html, re.S): for href in re.findall(r'href=["\']([^"\']+)["\']', comment, re.I): - if href.startswith(("http://", "https://", "/")): - found.append(urljoin(base_url, href)) + if not href.startswith(("http://", "https://")): + continue + if urlparse(href).netloc == base_netloc: + continue # internal comment link — CMS artifact, not a threat + found.append(href) return found