Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 51.9%
TypeScript 32.7%
JavaScript 4.8%
CSS 4.1%
Shell 2.9%
HTML 1.8%
SQL 1.5%
1# Trouve-KA — exclusions de crawl2# Author: Simon-Pierre Boucher3# Contact: contact@spboucher.ai45"""Domaines jamais crawlés : plateformes globales (réseaux sociaux, app stores,6CDN, moteurs) qui polluent le frontier sans jamais produire de contenu québécois7indexable — la plupart exigent JS/login et leurs pages sont vides en fetch HTTP.89Le budget de crawl est précieux (§12) : chaque slot dépensé sur apps.apple.com10est un slot volé à un vrai site québécois.11"""1213# Comparaison sur le domaine enregistrable ET ses sous-domaines.14EXCLUDED_DOMAINS: frozenset[str] = frozenset({15 # Réseaux sociaux16 "facebook.com", "fb.com", "instagram.com", "twitter.com", "x.com",17 "linkedin.com", "pinterest.com", "pinterest.ca", "tiktok.com",18 "snapchat.com", "reddit.com", "threads.net", "bsky.app", "mastodon.social",19 # Vidéo / streaming20 "youtube.com", "youtu.be", "vimeo.com", "dailymotion.com",21 "twitch.tv", "spotify.com", "soundcloud.com",22 # App stores / OS23 "apps.apple.com", "itunes.apple.com", "apple.com",24 "play.google.com", "microsoft.com", "chrome.google.com",25 # Moteurs / géants génériques26 "google.com", "google.ca", "bing.com", "yahoo.com", "duckduckgo.com",27 "amazon.com", "amazon.ca", "ebay.com", "ebay.ca", "aliexpress.com",28 "wikimedia.org", "wikidata.org", "archive.org", # wikipedia.org reste crawlable (contenu QC réel)29 # Infra / outils30 "d2cmedia.ca", # CDN d'images de concessionnaires — des milliers d'URLs, zéro texte31 "cloudflare.com", "wordpress.com", "wordpress.org", "blogspot.com",32 "wix.com", "squarespace.com", "shopify.com", "godaddy.com",33 "goo.gl", "bit.ly", "t.co", "ow.ly", "tinyurl.com",34 "gravatar.com", "addthis.com", "sharethis.com",35 "doubleclick.net", "googletagmanager.com", "google-analytics.com",36 # Cartes / avis génériques37 "maps.google.com", "waze.com", "tripadvisor.com", "tripadvisor.ca",38 "yelp.com", "yelp.ca", "booking.com", "airbnb.com", "airbnb.ca",39 "eventbrite.com", "eventbrite.ca", "meetup.com",40})414243def is_excluded_domain(domain: str) -> bool:44 """True si le domaine (ou un de ses parents) est dans la liste d'exclusion."""45 d = domain.lower().rstrip(".")46 while d:47 if d in EXCLUDED_DOMAINS:48 return True49 _, _, d = d.partition(".")50 return False515253# ---------------------------------------------------------------------------54# Pivot 2026-08-23 — Trouve·Ka devient le moteur de recherche du GROUPE KA.55# Le périmètre de crawl est une ALLOWLIST stricte : seuls les sites de56# l'écosystème KA sont découverts, crawlés et indexés.57#58# Exclus volontairement : api-ka.com (API pure, rien d'indexable),59# forma-ka.com (aucune couche SEO/sitemap à ce jour),60# administration-ka.com (console privée).61KA_DOMAINS: frozenset[str] = frozenset({62 "groupe-ka.com", "trouve-ka.com",63 "lou-ka.com", "immo-ka.com", "vrai-prix.com", "toit-ka.com", "valoplex.com",64 "auto-ka.com", "fabri-ka.com", "food-ka.com", "resto-ka.com",65 "sorti-ka.com", "crea-ka.com", "job-ka.com",66})676869def is_ka_domain(domain: str) -> bool:70 """Le domaine (ou l'un de ses parents) appartient-il au Groupe KA ?"""71 d = domain.lower().rstrip(".")72 while d:73 if d in KA_DOMAINS:74 return True75 _, _, d = d.partition(".")76 return False777879def is_in_scope(domain: str) -> bool:80 """Périmètre de crawl du moteur : domaines du Groupe KA uniquement."""81 return is_ka_domain(domain)82