ummydev/ai-search

Rendre un site lisible, exact et cité par les assistants IA (ChatGPT, Claude, Perplexity, Gemini, Copilot, Google AI Overviews) pour qu'ils décrivent correctement le produit et le citent.

Qu'est-ce que ai-search ?

Cette compétence guide le développement d'un site web pour qu'il soit facilement compris et cité par les principaux assistants IA (ChatGPT, Claude, Perplexity, Gemini, Copilot, Google AI Overviews). Elle repose sur un principe central : chaque fait est écrit une seule fois et réutilisé partout (pages, llms.txt, données structurées). Le workflow inclut la création d'une fiche de faits centralisée, la publication des fichiers /llms.txt et /llms-full.txt, la configuration de robots.txt pour laisser passer les crawlers IA, l'ajout de définitions en une phrase en haut de chaque page clé, la création de tableaux comparatifs et de FAQ sourcés et datés, la publication des prix en texte clair, et l'utilisation de données structurées Organization/WebSite pour gérer les collisions de nom de marque. Une checklist finale et un suivi mensuel des réponses des assistants permettent de corriger les erreurs de citation et d'optimiser la présence du site dans les réponses IA.

Compatible avec✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/ummydev/marketing-team-skills/tree/HEAD/skills/ai-search

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Recherche IA

Un assistant qui répond à « qu'est-ce que X », « prix de X » ou « meilleur outil pour Y » récupère quelques pages, extrait des phrases et des lignes de tableau, et les cite. Si un fait n'est pas présent sur la page en texte brut, l'assistant devine, ou cite celui qui l'a écrit. Le but : rendre le produit facile à décrire correctement en une seule récupération.

Un principe guide chaque étape : écrire chaque fait une fois et le rendre partout. La définition, le statut (bêta, inscriptions ouvertes, généralement disponible), les prix, les plateformes supportées et les URLs clés vivent dans un seul fichier source ; les pages, llms.txt et les données structurées le lisent. Les faits copiés à la main dérivent.

Workflow

1. Rédiger la fiche de faits

Créez content/facts.ts (ou JSON/YAML) avec : le nom et ses variantes, la définition en une phrase, le public cible, le statut, les formules et prix, les plateformes ou intégrations, les URLs des pages clés, et les profils officiels (GitHub, X, LinkedIn, Product Hunt). Vérifiez chaque élément sur le produit en ligne avant de l'écrire.

2. Publier /llms.txt

Suivez llmstxt.org : un H1 avec le nom, un résumé en blockquote, quelques faits simples, puis des sections H2 de liens écrits - [Titre](url) : ce que ça couvre. Une section intitulée Optionnel marque les liens qu'un assistant peut ignorer.

# Acme AI

> Acme AI est un outil de rapprochement de factures qui réconcilie les paiements Stripe avec les dépôts bancaires pour les petites équipes financières. Il fonctionne dans le navigateur et se connecte à Stripe et Plaid.

- Public cible : responsables financiers d'entreprises de 1 à 50 personnes qui réconcilient les paiements manuellement.
- Statut : inscriptions ouvertes (depuis 2026-11).
- Prix (https://acme.example/pricing) : Gratuit, 0 $, jusqu'à 50 factures par mois ; Pro, 29 $/mois, factures illimitées ; Équipe, 79 $/mois, jusqu'à 10 sièges. Prix en USD.
- À ne pas confondre avec : Acme Anvil, une entreprise de matériel sans lien.

## Pages clés
- [Tarifs](https://acme.example/pricing) : formules, limites et ce qui est inclus.
- [Acme AI vs Concurrent](https://acme.example/vs/concurrent) : comparaison de fonctionnalités et de prix, vérifié le 2026-11-06.

## FAQ
- Acme AI est-il gratuit ? Oui, jusqu'à 50 factures par mois. Les formules Pro et Équipe sont payantes.

## Optionnel
- [Blog](https://acme.example/blog) : mises à jour produit et guides.

Générez-le à partir de la fiche de faits et des métadonnées des pages (un gestionnaire de route ou un script de build) pour qu'une nouvelle page apparaisse sans modifications manuelles. Servez-le avec le statut 200, en text/plain ou text/markdown ; charset=utf-8, sans connexion, redirection ni JavaScript. Vérifiez :

curl -sI https://acme.example/llms.txt | head -5        # 200 et un type de contenu texte
curl -s  https://acme.example/llms.txt | head -30

3. Ajouter optionnellement /llms-full.txt

Le texte complet en Markdown des pages que vous souhaitez le plus voir citées (produit, tarifs, comparaisons, documentation), chacune sous son propre # Titre avec une ligne Source : <url>. Générez-le au moment du build. Laissez de côté les archives du blog et tout ce qui est obsolète.

4. Faire un lien vers

Mettez un lien simple llms.txt dans le pied de page, et optionnellement <link rel="alternate" type="text/markdown" href="/llms.txt"> dans <head>. Un fichier vers lequel aucun lien ne pointe n'est trouvé que par les crawlers qui devinent le chemin.

5. Laisser entrer les crawlers IA (robots.txt et le CDN)

User-agentPropriétaireUtilisé pour
OAI-SearchBotOpenAIIndex de recherche ChatGPT
ChatGPT-UserOpenAIRécupération d'une page demandée par un utilisateur
GPTBotOpenAIEntraînement de modèle
Claude-SearchBot / Claude-User / ClaudeBotAnthropicIndex de recherche / récupérations utilisateur / entraînement
PerplexityBot / Perplexity-UserPerplexityIndex de recherche / récupérations utilisateur
Google-ExtendedGoogleJeton pour l'entraînement et l'ancrage de Gemini ; n'affecte pas Google Search ni AI Overviews
BingbotMicrosoftIndex Bing, à partir duquel Copilot répond

Les agents de recherche et de récupération utilisateur décident si vous pouvez être cité. Les agents d'entraînement sont un choix commercial ; un produit qui veut être recommandé les autorise généralement aussi.

User-agent: *
Allow: /
Disallow: /api/
Disallow: /app/

User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: GPTBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: ClaudeBot
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: Google-Extended
Allow: /
Disallow: /api/
Disallow: /app/

Sitemap: https://acme.example/sitemap.xml

Un crawler n'obéit qu'au groupe qui le nomme, donc un groupe nommé doit répéter chaque Disallow, sinon il ouvre vos chemins privés. robots.txt ne peut pas non plus outrepasser le CDN : certains proposent un interrupteur « bloquer les bots IA » qui renvoie 403 quoi que dise robots.txt. Vérifiez ponctuellement, puis confirmez les visites réelles des crawlers dans le rapport de bots du CDN ou les logs du serveur (les CDN qui vérifient les IP des bots peuvent traiter un User-Agent usurpé différemment) :

curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (compatible ; OAI-SearchBot/1.0 ; +https://openai.com/searchbot)' https://acme.example/pricing

6. Mettre une définition en une phrase en haut de chaque page clé

Juste sous le H1, dans le HTML rendu par le serveur : « est un <catégorie> qui pour . » La deuxième phrase donne le différenciateur. Réutilisez la même phrase sur la page d'accueil, dans llms.txt, dans Organization.description, dans les annuaires et dans les bios sociales. Un slogan (« Finance, réinventée ») ne donne rien à citer à un assistant. De nombreux récupérateurs IA n'exécutent pas JavaScript, vérifiez donc le HTML brut :

curl -s https://acme.example/ | grep -c "est un outil de rapprochement de factures"     # attend 1 ou plus

7. Tableaux comparatifs et FAQ

  • Tableaux : un vrai <table> HTML, une ligne par produit, des colonnes sur ce que les acheteurs demandent (prix, plateformes, open source, limite principale). Datez-le (« Vérifié le 2026-11-06 »). Prenez chaque fait sur le site du fournisseur, sa documentation, sa page de tarifs ou l'API GitHub. Écrivez « Non publié » quand un fournisseur ne publie pas quelque chose ; n'estimez jamais.
  • FAQ : la question comme titre, dans les mots du chercheur ; une réponse de 2 à 4 phrases qui se suffit à elle-même, la première phrase y répondant. Couvrez les questions sur lesquelles les assistants se trompent : prix, « est-ce gratuit », « ça marche avec X », « est-ce la même chose que ». Le balisage FAQPage est facultatif ; les Q&A visibles sont ce qui est cité.

8. Rendre les tarifs publics

Une page /pricing avec les noms des formules, les prix, la devise, la période de facturation et les limites en texte, pas seulement dans une image ou un calculateur. Miroir dans llms.txt et dans SoftwareApplication.offers. Les réponses et les annuaires ont besoin d'un prix ou d'un modèle tarifaire (gratuit, freemium, payant) ; sans cela, ils devinent ou vous ignorent. Si les formules payantes ne sont pas encore actives, dites-le (« Pro : à venir ; tout est gratuit jusque-là »).

{ "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Acme AI",
  "applicationCategory": "BusinessApplication", "operatingSystem": "Web",
  "offers": [ { "@type": "Offer", "name": "Gratuit", "price": "0", "priceCurrency": "USD" },
              { "@type": "Offer", "name": "Pro", "price": "29", "priceCurrency": "USD" } ] }

9. Données Organization et WebSite en cas de collision de nom

Si la recherche de votre nom de marque nu renvoie d'abord un autre produit, choisissez une forme distinctive (par exemple « Acme AI ») et utilisez-la partout, avec des données structurées qui lient les variantes à une seule entité :

{ "@context": "https://schema.org", "@type": "Organization",
  "name": "Acme AI", "alternateName": ["Acme", "acme.example"],
  "url": "https://acme.example/", "logo": "https://acme.example/logo.png",
  "description": "Acme AI est un outil de rapprochement de factures qui réconcilie les paiements Stripe avec les dépôts bancaires pour les petites équipes financières.",
  "sameAs": ["https://github.com/acme-ai", "https://x.com/acmeai", "https://www.linkedin.com/company/acme-ai"] }

Ajoutez un objet WebSite avec le même name et alternateName ; Google l'utilise pour le nom du site dans les résultats. Ne listez dans sameAs que les profils que vous contrôlez et qui renvoient au site.

10. Maintenir le suffixe de marque cohérent

Un suffixe partout : | Acme AI dans les titres, la même chaîne dans og:site_name, le H1 de llms.txt, les bios sociales et l'org GitHub. Gardez les titres dans 60 caractères (environ 30 pour le chinois, le japonais et le coréen), mot-clé en premier ; n'ajoutez le suffixe que quand il tient.

11. Vérifier ce que les assistants disent réellement

Mensuellement, et après des changements importants, posez 5 à 10 requêtes manuellement dans ChatGPT (recherche activée), Perplexity, Claude, Gemini et Copilot : « Qu'est-ce que Acme AI ? », « Tarifs Acme AI », « meilleur <catégorie> pour », « alternatives à », « Acme AI vs ». Une requête à la fois dans l'interface normale ; ne scriptez pas les interfaces de chat. Enregistrez la date, l'assistant, la requête, si vous êtes mentionné, quelle URL est citée et tout fait erroné dans docs/seo/ai-answers.md. Corrigez la page source derrière chaque fait erroné, puis revérifiez. Pour le trafic, segmentez les analytics par référent : chatgpt.com, perplexity.ai, claude.ai, gemini.google.com, copilot.microsoft.com.

Checklist

  • La fiche de faits existe ; les pages, llms.txt et JSON-LD sont lus depuis celle-ci
  • /llms.txt renvoie 200 en texte, est généré et est lié depuis le pied de page
  • robots.txt autorise les agents IA et répète les interdictions ; le CDN ne les bloque pas
  • Chaque page clé commence par une définition en une phrase dans le HTML brut
  • Les tableaux comparatifs sont datés et sourcés ; les inconnus disent « Non publié »
  • Les réponses FAQ se suffisent à elles-mêmes et couvrent le prix, « est-ce gratuit » et la confusion de nom
  • /pricing est public ; llms.txt et offers correspondent
  • Organization et WebSite portent name, alternateName, description et sameAs
  • Un suffixe de marque partout ; titres dans 60 caractères
  • Les réponses des assistants sont enregistrées ; les faits erronés sont tracés jusqu'à une page et corrigés

Pièges rencontrés

  • Pas de prix public. /pricing renvoyait 404, llms.txt et SoftwareApplication n'avaient pas d'offres, et notre propre tableau comparatif devait dire « Non publié » pour nous. Une page /pricing avec trois formules en texte, reflétée dans llms.txt et offers, a résolu le problème ; les niveaux payants sont marqués « à venir ».
  • Dérive du statut. Après l'ouverture des inscriptions, environ 300 fichiers dans 9 langues, y compris llms.txt, disaient encore « accès anticipé ». Le statut vient maintenant d'une constante.
  • Un fichier vers lequel personne ne pointe. Un audit n'a trouvé aucune page pointant vers llms.txt, pas de llms-full.txt ni de lastmod dans le sitemap.
  • Remplacement de groupe dans robots.txt. Donner aux crawlers IA leur propre groupe sans répéter les interdictions aurait ouvert les chemins API et de connexion pour eux.
  • Collision de marque. La recherche de notre nom de marque nu renvoyait d'abord une application de planification d'équipe du même nom. Nous sommes passés à « AI » dans les titres, alternateName et sameAs.
  • Titres tronqués et incohérents. 49 titres en anglais faisaient 57 à 88 caractères avec des suffixes mélangés. Nous les avons réduits à 60 ou moins, mot-clé en premier, suffixe seulement quand il tient.
  • Récupérations peu fiables des pages concurrentes. La récupération par un sous-agent de recherche de la page de tarifs d'un concurrent a renvoyé quelque chose qui semblait trafiqué ; nous l'avons confirmé dans un vrai navigateur avant de publier. La page de tarifs d'un autre fournisseur renvoyait 403 au récupérateur, nous avons donc pris les prix de leur documentation et précisé d'où ils venaient.
  • Écrire « gratuit » trop tôt. Jusqu'à ce que les prix soient publiés, nous écrivions « non publié », pas « gratuit ». Un assistant répète ce que dit la page.

Compétences associées

  • seo-page : le modèle de page où vivent la définition, le tableau et la FAQ.
  • competitor-pages : pages de comparaison et d'alternatives, que les assistants citent abondamment.
  • programmatic-pages : génération de sections llms.txt et de données structurées à l'échelle.
  • multilingual-seo : définitions localisées, titres et longueur de suffixe par langue.
  • keyword-research, trend-keywords : les questions auxquelles répondre et les requêtes à tester.
  • index-push : faire crawler les pages ; l'index Bing alimente Copilot.
  • seo-daily-report : visites référées par l'IA comme leur propre ligne dans le rapport.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

ummydev/index-push

When the user wants to get new or changed pages crawled and indexed by Google and Bing quickly, instead of waiting weeks for the sitemap to be read. Use after any deploy that adds or updates pages, and when the user says "get this indexed", "request indexing", "submit to Google", "submit URLs to Bing", "IndexNow", "ping search engines", "resubmit the sitemap", "why isn't my page indexed", "Discovered – currently not indexed", "URL is unknown to Google", "Quota Exceeded in Search Console" or "indexing queue". Covers IndexNow, Search Console URL Inspection and sitemaps, Bing Webmaster URL submission, a prioritized queue file, and diagnosing pages that stay out of the index.

ummydev/remotion-video

When the user wants to make a vertical promo video of their own software product in code with Remotion, rebuilding the product's real UI instead of screen-recording it, with a TTS voice-over, captions timed to the voice and camera moves that zoom into details. Use when the user says "Remotion", "make a product video", "faceless demo video", "UI motion video", "programmatic video", "product reel", "animate our UI", "render the video", or wants a TikTok or Reels video about their app that an agent can re-render after every change.

ummydev/short-video-formats

When the user wants to choose or plan the format of a promo short video for TikTok, Instagram Reels, YouTube Shorts or Xiaohongshu, especially for a software product, dev tool or AI agent. Covers the four formats that carry this category (talking head over a demo, phone filming the screen, faceless UI demo, talking-head open into full-screen demo), screen layout rules, hooks and endings like "comment X and I'll send it", and how to make an AI presenter. Use when the user says "what kind of video should we make", "video format", "talking head", "faceless video", "AI presenter", "AI avatar", "UGC style", "hook ideas", "how should the first frame look", "comment to get the link", or "视频形式".

ummydev/video-retro

When the user wants to review how their short videos performed on TikTok, Instagram Reels or other platforms and decide what to make next. Covers reading views, likes, comments, saves and follows without scraping, the stats log, 24-hour and 72-hour checks, comparing topics, formats and hooks, the daily report and recording what to change. Use when the user says "how did the video do", "video stats", "复盘", "retro", "which videos worked", "why did this flop", "weekly video report", "update the stats", or at the start or end of a short-video working day.

Skills associés