---
title: "Scanners de liens et secrets à usage unique | Blog LinkPilot"
url: https://uselinkpilot.com/fr/blog/link-scanners-and-one-time-secrets
description: "Un lien à usage unique détruit sur un simple GET meurt dès que Slack ou une passerelle e-mail en crée l’aperçu. Métadonnées sur GET, destruction au clic."
lang: fr
---

Sécurité (https://uselinkpilot.com/fr/blog/category/security)

# Scanners de liens et secrets à usage unique

Un lien à usage unique détruit sur un simple GET meurt dès que Slack ou une passerelle e-mail en crée l’aperçu. Métadonnées sur GET, destruction au clic.

W. Miller (https://uselinkpilot.com/fr/author/w-miller)26 mai 2026 · Mis à jour le 22 octobre 2026 · À propos de LinkPilot (https://uselinkpilot.com/fr/about)

Un lien à usage unique qui se détruit sur une simple requête `GET` meurt dès que Slack, Teams ou une passerelle de messagerie le récupère pour afficher un aperçu. La solution: ne renvoyer que des métadonnées sur `GET` et ne détruire le secret que lors d’un affichage explicite par `POST`, avec en dernier rempart une phrase de passe envoyée par un second canal. Cet article passe en revue les systèmes qui récupèrent les liens sans rien demander et explique comment concevoir un outil qui leur résiste à tous.

Le générateur de liens secrets à usage unique (https://uselinkpilot.com/fr/tools/free-secret-link-generator) de LinkPilot fonctionne ainsi: une récupération pour aperçu n’obtient que la structure de la page; le secret est récupéré, et l’ouverture comptée, quand un navigateur exécute la page.

## Le mode de défaillance par défaut

La plupart des clients de messagerie instantanée et d’e-mail essaient d’afficher un aperçu dès qu’ils voient une URL. Le déroulement est le suivant:

1. L’utilisateur colle le lien secret dans Slack.
2. L’outil d’aperçu de liens de Slack récupère l’URL (il envoie un `GET`; Slack documente ce comportement dans sa page sur le link unfurling (https://api.slack.com/reference/messaging/link-unfurling)).
3. Votre gestionnaire d’affichage traite la requête comme une ouverture humaine, détruit le secret et renvoie le contenu.
4. Slack reçoit le contenu détruit (ou une page générique) et en affiche l’aperçu.
5. La personne clique sur le lien, voit « déjà consulté » et demande un nouveau lien à l’expéditeur.

L’outil d’aperçu de liens n’avait aucune intention malveillante. C’est votre gestionnaire qui a confondu « quelqu’un a récupéré l’URL » et « le destinataire a lu le secret ». Ce sont deux événements différents, et tout le problème de conception consiste à les séparer.

Une variante plus grave se cache à l’étape 3: si le `GET` de l’outil d’aperçu de liens a reçu le vrai contenu, le secret se trouve désormais dans l’infrastructure de génération d’aperçus d’un tiers. Dans le meilleur des cas, il a été supprimé une fois l’aperçu généré, mais vous n’avez aucun moyen de le confirmer, et aucun événement d’audit ne vous signale qu’il a été reçu.

## Qui récupère un lien avant que le destinataire ne l’ouvre?

Les outils d’aperçu de liens des messageries, les passerelles de sécurité des e-mails, la protection des postes de travail, les proxys d’entreprise et les extensions d’aperçu, et en général plusieurs d’entre eux à la fois. Dire « Slack affiche des aperçus » sous-estime le problème. Une URL collée dans un environnement de travail moderne est en général récupérée par plusieurs systèmes avant qu’un humain ne clique dessus:

| Système | Quand il intervient | Identifiable? |
| --- | --- | --- |
| Outils d’aperçu de liens des messageries (Slack, Teams, iMessage, WhatsApp, LinkedIn) | Dès l’envoi du message | En général: des user agents distincts, comme `Slackbot-LinkExpanding` |
| Passerelles de sécurité des e-mails (Mimecast, Proofpoint, Microsoft Defender) | À la réception, et souvent de nouveau au moment du clic | Souvent non: beaucoup se présentent avec le user agent d’un vrai navigateur |
| Protection des postes de travail / antivirus | Quand l’URL arrive sur la machine du destinataire | Rarement |
| Proxys web d’entreprise | Au moment du clic, avant que la requête de l’utilisateur ne soit transmise | Rarement |
| Extensions de navigateur d’aperçu de liens | Au survol ou au chargement de la page | Non: elles utilisent la session de navigation de l’utilisateur lui-même |

Le comportement des éditeurs décrit dans ce tableau évolue sans cesse: considérez chaque affirmation sur une passerelle précise comme « telle que publiée en juillet 2026, à vérifier dans la documentation actuelle ». Le point commun, lui, ne change pas: tous ces systèmes envoient un simple `GET`, car c’est la seule façon sûre et universelle de consulter une URL que vous ne contrôlez pas.

## Comment empêcher un aperçu de détruire un lien à usage unique?

Servez des métadonnées sur `GET` et ne détruisez le secret que sur un `POST` explicite. La sémantique HTTP le prévoit déjà: la RFC 9110, section 9.2.1 (https://www.rfc-editor.org/rfc/rfc9110#section-9.2.1) définit `GET` comme une méthode sûre et idempotente, c’est-à-dire une requête que n’importe qui peut envoyer librement parce qu’elle n’est censée rien modifier. `POST` est le verbe de l’action. Traitez donc l’affichage comme une action `POST` derrière un bouton visible:

```http
GET  /s/abc123   →  HTML page: "Click to reveal this secret"
POST /s/abc123   →  burns the secret, returns the payload
```

Le `GET` de Slack renvoie désormais une page de métadonnées neutre. Le secret n’est détruit que lorsque la personne clique sur le bouton. Tout scanner qui respecte la sémantique HTTP (presque tous, puisque envoyer des `POST` à effets de bord vers des URL arbitraires casserait la moitié du web) ne touche jamais au contenu.

## Un exemple pas à pas

Suivons un lien du début à la fin. Vous créez un secret avec destruction après lecture et une phrase de passe, puis vous collez l’URL dans un message privé Slack et dans un e-mail.

1. **L’outil d’aperçu de liens de Slack** envoie `GET /s/abc123`. Réponse: une petite page de métadonnées (statut « active », phrase de passe requise). Aucune ouverture enregistrée. Le secret est intact.
2. **La passerelle de messagerie du destinataire** réécrit l’URL dans l’e-mail et la récupère à la réception pour en analyser la réputation. Même `GET`, mêmes métadonnées. Toujours intact.
3. **Le destinataire clique sur le lien reçu par e-mail.** Au moment du clic, le scanner de la passerelle récupère l’URL une fois de plus (`GET`), puis redirige le navigateur vers sa destination.
4. **Le navigateur charge la page d’affichage**, avec un nouveau `GET`. La page montre un bouton d’affichage et un champ pour la phrase de passe. Toujours aucune ouverture enregistrée.
5. **Le destinataire saisit la phrase de passe et clique sur le bouton d’affichage.** Le navigateur envoie `POST /s/abc123`. L’ouverture est enregistrée, le contenu est renvoyé, le secret est détruit.
6. **Quiconque récupère l’URL ensuite** obtient une réponse explicite « déjà consulté et détruit » au lieu du contenu.

Cinq récupérations, un seul affichage. Ce rapport est normal en entreprise: une conception qui ne le tolère pas échouera dès le premier jour, et l’expéditeur finira par coller le mot de passe dans la messagerie.

## Des défenses en couches

### La séparation GET / POST

Elle couvre tous les outils d’aperçu de liens et scanners qui respectent les règles, soit l’immense majorité du trafic automatisé. C’est la base; tout ce qui suit vient la renforcer.

### Phrase de passe obligatoire

Elle couvre ce que la séparation ne couvre pas: les bacs à sable d’analyse qui exécutent du JavaScript et interagissent avec la page, ainsi que les clics humains accidentels et les e-mails transférés. Un bac à sable d’analyse peut cliquer sur un bouton d’affichage; il ne peut pas fournir une phrase de passe transmise par un autre canal. Envoyez le lien par e-mail et la phrase de passe par message privé Slack ou par SMS.

### Filtrage des robots par user agent

Écartez les robots d’aperçu connus (`Slackbot`, `LinkedInBot`, `Twitterbot`) avant qu’ils n’atteignent la logique d’affichage. C’est une précaution supplémentaire utile, mais jamais suffisante seule: les scanners de sécurité se présentent couramment avec le user agent d’un vrai navigateur, justement pour que les pages malveillantes ne puissent pas se dissimuler à l’analyse.

### Expiration courte

Limitez la fenêtre d’exposition. Un lien qui n’a vécu que quinze minutes laisse dans les scanners, les fichiers journaux et l’historique des messageries une URL qui ne mène plus à rien.

### Cache-Control: no-store

Définissez cet en-tête sur chaque réponse d’affichage pour qu’aucun intermédiaire (proxy d’entreprise, CDN, cache du navigateur) ne conserve une copie du contenu après l’unique lecture légitime.

## Le cas des passerelles de sécurité des e-mails

Les passerelles d’entreprise méritent une section à part, car elles récupèrent le lien deux fois. Les produits de cette catégorie (Microsoft Defender Safe Links (https://learn.microsoft.com/en-us/defender-office-365/safe-links-about) en est l’exemple documenté) réécrivent chaque URL des e-mails entrants pour la faire passer par leur propre domaine d’analyse. L’URL est en général récupérée une première fois à la réception pour l’analyse de réputation, puis de nouveau au moment du clic, avant que la personne ne soit redirigée vers la vraie destination.

Si l’une ou l’autre de ces récupérations détruisait le secret, le destinataire verrait _toujours_ un lien mort: une défaillance qui paraît aléatoire aux utilisateurs, mais qui est entièrement déterministe. La séparation `GET`/`POST` absorbe d’office les deux récupérations, puisque ce sont deux simples `GET`. La redirection au moment du clic amène ensuite la personne sur la page d’affichage, où a lieu le `POST`.

## Les cas limites qui posent encore problème

- **Les bacs à sable qui exécutent du JavaScript.** Certains environnements d’analyse affichent la page et interagissent avec elle. Un `POST` derrière un bouton _sans phrase de passe_ pourrait, en théorie, être déclenché par un bac à sable agressif. La phrase de passe est le dernier rempart.
- **Lien et phrase de passe sur le même canal.** S’ils voyagent dans le même e-mail, toutes les défenses ci-dessus se réduisent à « espérer que personne ne lise cet e-mail ». Séparez toujours les canaux.
- **Les transferts.** Chaque transfert vers une nouvelle messagerie ou un nouveau système d’e-mail déclenche une nouvelle série d’aperçus. Sans conséquence avec la séparation, mais chaque étape ajoute des journaux qui contiennent l’URL, ce qui plaide pour une expiration courte.
- **Les affichages simultanés.** Si deux personnes cliquent sur le bouton d’affichage au même moment, la lecture et la destruction doivent se faire en une seule étape indivisible: une seule requête l’emporte et l’autre reçoit « déjà consulté ». Une implémentation qui sépare ces deux opérations peut servir le contenu deux fois.

## Testez votre propre outil

Avant de confier de vrais identifiants à un service de partage de secrets, faites ce contrôle de deux minutes:

1. Créez un secret de test avec la destruction après lecture activée.
2. Récupérez-le depuis un terminal, exactement comme le fait un outil d’aperçu de liens: `curl -s -o /dev/null -w "%{http_code}" "<url>"`
3. Ouvrez le lien dans un navigateur. Si vous voyez « déjà consulté », l’outil détruit le secret sur `GET` et il est dangereux de coller ses liens dans une messagerie ou un e-mail.
4. Si le secret a survécu, affichez-le normalement dans le navigateur, puis relancez `curl`: vous devez maintenant obtenir une réponse explicite indiquant que le secret n’existe plus ou a été détruit, et non le contenu.

## Comment LinkPilot met cela en œuvre

Pour mémoire, voici la conception qu’utilisent les liens secrets de LinkPilot: un `GET` sur l’endpoint d’affichage ne renvoie que des métadonnées (le statut, et si une phrase de passe est requise); une ouverture n’est enregistrée que lors d’un affichage explicite par `POST`. Les phrases de passe sont hachées en SHA-256 côté client et limitées à cinq tentatives par IP, par minute et par secret. Chaque réponse d’affichage porte l’en-tête `Cache-Control: no-store`, les secrets détruits ou expirés renvoient le code HTTP 410 et leur contenu stocké est écrasé, et l’historique d’audit enregistre chaque événement avec une IP hachée à l’aide d’un sel renouvelé chaque jour: l’IP brute n’est jamais stockée. Tous les détails figurent sur la page Architecture de sécurité (https://uselinkpilot.com/fr/security-architecture).

Essai gratuit, sans inscription

### Message éphémère

Envoyez une note qui disparaît après une seule lecture.

Ouvrir l’outil (https://uselinkpilot.com/fr/tools/burn-after-read-secret)

## Les limites de cette conception

Soyons clairs sur ses limites: rien de ce qui précède ne protège un secret _après_ un affichage légitime. Le destinataire peut copier le contenu, en faire une capture d’écran ou le transférer. Cette conception n’aide pas non plus si la phrase de passe voyage avec le lien. Et elle ne peut pas empêcher une personne qui a reçu le lien par erreur de l’ouvrir avant le bon destinataire: c’est à cela que sert le journal d’audit. Vous voyez l’ouverture inattendue, et vous renouvelez l’identifiant.

## À lire aussi

- Comment fonctionnent les liens secrets à usage unique: https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work
- Pourquoi les URL divulguent des informations sensibles: https://uselinkpilot.com/fr/blog/why-urls-leak-sensitive-information
- Architecture de sécurité de LinkPilot: https://uselinkpilot.com/fr/security-architecture

## Références

- IETF, RFC 9110: HTTP Semantics, section 9.2.1 Safe Methods (https://www.rfc-editor.org/rfc/rfc9110#section-9.2.1).
- Slack API, Unfurling links in messages (https://api.slack.com/reference/messaging/link-unfurling).
- Microsoft Learn, Safe Links in Microsoft Defender for Office 365 (https://learn.microsoft.com/en-us/defender-office-365/safe-links-about).

## Outils pour cet article

Message éphémère

Envoyez une note qui disparaît après une seule lecture.
https://uselinkpilot.com/fr/tools/burn-after-read-secret

Générateur de liens secrets à usage unique

Partagez un mot de passe ou une note par un lien qui ne s’ouvre qu’une fois.
https://uselinkpilot.com/fr/tools/free-secret-link-generator

Générateur de liens temporaires

Créez des liens qui cessent de fonctionner à l’heure choisie.
https://uselinkpilot.com/fr/tools/temporary-link

## Questions fréquentes

### Quels clients posent le plus de problèmes?

### Peut-on repérer les outils d’aperçu de liens grâce au user agent?

### La séparation GET / POST règle-t-elle tout?

### Les scanners d’e-mails cliquent-ils parfois sur les boutons d’une page?

### Comment vérifier qu’un outil de partage de secrets résiste aux aperçus?

## LinkPilot envoie un lien secret qui disparaît une fois ouvert.

Chiffré dans votre navigateur, affiché une seule fois, puis détruit. Sans compte.

Créer un lien secret (https://uselinkpilot.com/fr/tools/free-secret-link-generator)

## À lire ensuite

Sécurité

### Partager des clés API en toute sécurité

Ne collez jamais de clé API dans un e-mail ou une messagerie. Envoyez un lien à usage unique chiffré dans le navigateur et renouvelez toute clé collée.
https://uselinkpilot.com/fr/blog/how-to-share-api-keys-securely

Sécurité

### Comment fonctionnent les liens secrets à usage unique

Un lien secret à usage unique s’affiche une fois: chiffré dans le navigateur, stocké sur le serveur en texte chiffré, détruit à la première ouverture.
https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work

Sécurité

### Liens qui expirent: le secret est détruit, pas redirigé

À l’échéance, un lien secret qui expire détruit le secret; un lien court mort cesse seulement de rediriger. Choisir la durée, et les cas limites.
https://uselinkpilot.com/fr/blog/expiring-links-security

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Accueil",
        "item": "https://uselinkpilot.com/fr"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Blog",
        "item": "https://uselinkpilot.com/fr/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "Scanners de liens et secrets à usage unique",
        "item": "https://uselinkpilot.com/fr/blog/link-scanners-and-one-time-secrets"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/fr/blog/link-scanners-and-one-time-secrets#article",
    "headline": "Scanners de liens et secrets à usage unique",
    "description": "Un lien à usage unique détruit sur un simple GET meurt dès que Slack ou une passerelle e-mail en crée l’aperçu. Métadonnées sur GET, destruction au clic.",
    "inLanguage": "fr",
    "datePublished": "2026-05-26",
    "dateModified": "2026-10-22",
    "image": "https://uselinkpilot.com/logo-512.png",
    "author": {
      "@type": "Person",
      "@id": "https://uselinkpilot.com/author/w-miller#person",
      "name": "W. Miller",
      "url": "https://uselinkpilot.com/fr/author/w-miller",
      "worksFor": {
        "@type": "Organization",
        "name": "LinkPilot",
        "url": "https://uselinkpilot.com"
      }
    },
    "publisher": {
      "@type": "Organization",
      "name": "LinkPilot",
      "url": "https://uselinkpilot.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://uselinkpilot.com/logo-512.png",
        "width": 512,
        "height": 512
      }
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://uselinkpilot.com/fr/blog/link-scanners-and-one-time-secrets"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Quels clients posent le plus de problèmes ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tout ce qui génère un aperçu des URL : Slack, Microsoft Teams, iMessage, les messages privés LinkedIn, les aperçus de WhatsApp Web et la plupart des passerelles de sécurité des e-mails (Mimecast, Proofpoint, Microsoft Defender). Tous récupèrent l’URL dès sa réception."
        }
      },
      {
        "@type": "Question",
        "name": "Peut-on repérer les outils d’aperçu de liens grâce au user agent ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "En partie. Les robots qui respectent les règles envoient un user agent identifiable (Slackbot-LinkExpanding, LinkedInBot, Twitterbot). Les scanners de sécurité, eux, imitent souvent de vrais navigateurs : le filtrage par user agent ne suffit donc pas à lui seul."
        }
      },
      {
        "@type": "Question",
        "name": "La séparation GET / POST règle-t-elle tout ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Elle règle entièrement le cas des outils d’aperçu de liens, puisque ceux-ci n’envoient que des GET. Elle ne règle pas le cas d’une personne qui clique par accident et détruit le secret : pour cela, il faut en plus exiger une phrase de passe."
        }
      },
      {
        "@type": "Question",
        "name": "Les scanners d’e-mails cliquent-ils parfois sur les boutons d’une page ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Certains bacs à sable d’analyse exécutent du JavaScript et peuvent interagir avec une page : un simple bouton d’affichage n’est donc pas une garantie. C’est pourquoi la phrase de passe compte : un bac à sable ne peut pas fournir une phrase de passe transmise par un autre canal."
        }
      },
      {
        "@type": "Question",
        "name": "Comment vérifier qu’un outil de partage de secrets résiste aux aperçus ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Créez un secret de test, récupérez son URL une fois avec curl (un simple GET, exactement ce que fait un outil d’aperçu de liens), puis ouvrez-la dans un navigateur. Si le navigateur affiche « déjà consulté », l’outil détruit le secret sur GET, et il est dangereux de coller ses liens dans une messagerie ou un e-mail."
        }
      }
    ],
    "inLanguage": "fr"
  },
  {
    "@context": "https://schema.org",
    "@type": "SoftwareApplication",
    "@id": "https://uselinkpilot.com/#software",
    "name": "LinkPilot",
    "applicationCategory": "BusinessApplication",
    "operatingSystem": "Web",
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "url": "https://uselinkpilot.com",
    "offers": [
      {
        "@type": "Offer",
        "name": "Free",
        "price": "0",
        "priceCurrency": "USD",
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro",
        "price": "29",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "29",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency",
        "price": "299",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "299",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus",
        "price": "799",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "799",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro (yearly)",
        "price": "288",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "288",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency (yearly)",
        "price": "2988",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "2988",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus (yearly)",
        "price": "7980",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "7980",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Enterprise",
        "priceSpecification": {
          "@type": "PriceSpecification",
          "priceCurrency": "USD"
        },
        "url": "https://uselinkpilot.com/pricing"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "@id": "https://uselinkpilot.com/#organization",
    "name": "LinkPilot",
    "alternateName": "LinkPilot by TetraCore",
    "url": "https://uselinkpilot.com",
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "customer support",
      "email": "support@uselinkpilot.com",
      "url": "https://uselinkpilot.com/support"
    },
    "parentOrganization": {
      "@type": "Organization",
      "@id": "https://tetracorehq.com/#organization",
      "name": "TetraCore",
      "url": "https://tetracorehq.com/"
    },
    "logo": {
      "@type": "ImageObject",
      "url": "https://uselinkpilot.com/logo-512.png",
      "width": 512,
      "height": 512
    },
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "sameAs": [
      "https://x.com/uselinkpilot",
      "https://www.linkedin.com/company/uselinkpilot",
      "https://facebook.com/uselinkpilot",
      "https://github.com/TetraCoreHQ/linkpilot-cli",
      "https://github.com/TetraCoreHQ/linkpilot-mcp",
      "https://www.npmjs.com/package/linkpilot",
      "https://www.npmjs.com/package/@uselinkpilot/sdk",
      "https://www.npmjs.com/package/@uselinkpilot/mcp",
      "https://chromewebstore.google.com/detail/linkpilot-short-links-and/mnmppadihpcncicldpkmgknhnjkondad",
      "https://addons.mozilla.org/en-US/firefox/addon/uselinkpilot/"
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "LinkPilot",
    "url": "https://uselinkpilot.com",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "https://uselinkpilot.com/blog?q={search_term_string}",
      "query-input": "required name=search_term_string"
    }
  }
]
```