---
title: "Sådan virker hemmelige engangslinks | LinkPilot-bloggen"
url: https://uselinkpilot.com/da/blog/how-one-time-secret-links-work
description: "Et hemmeligt engangslink viser indholdet én gang: browseren krypterer det, serveren gemmer kun chifferteksten, og første visning sletter den gemte kopi."
lang: da
---

Sikkerhed (https://uselinkpilot.com/da/blog/category/security)

# Sådan virker hemmelige engangslinks

Et hemmeligt engangslink viser indholdet én gang: browseren krypterer det, serveren gemmer kun chifferteksten, og første visning sletter den gemte kopi.

W. Miller (https://uselinkpilot.com/da/author/w-miller)26. maj 2026 · Opdateret 22. oktober 2026 · Om LinkPilot (https://uselinkpilot.com/da/about)

Et hemmeligt engangslink er en URL, der viser sit indhold præcis én gang og derefter holder op med at virke for altid. Afsenderens browser krypterer hemmeligheden med AES-GCM-256, serveren gemmer kun chifferteksten, og nøglen ligger i den del af linket, der står efter `#k=`, som browsere aldrig sender. Når modtageren åbner indholdet første gang, dekrypteres det, og den gemte kopi slettes i samme operation.

Du kan lave et uden konto med den gratis generator til hemmelige links (https://uselinkpilot.com/da/tools/free-secret-link-generator).

Selve mekanismen er enkel. Det interessante er grænsetilfældene, for det er dér, sjuskede implementeringer lækker, uden at nogen opdager det.

## Det grundlæggende forløb

1. Afsenderen indsætter en hemmelighed. Browseren genererer en tilfældig nøgle, krypterer indholdet med AES-GCM-256 via Web Crypto API (https://www.w3.org/TR/WebCryptoAPI/) og sender kun chifferteksten. Serveren gemmer den under en tilfældig slug, der er svær at gætte, og returnerer en URL. Browseren tilføjer nøglen som et `#k=`-fragment, der aldrig forlader afsenderens enhed.
2. Afsenderen deler URL'en via en hvilken som helst kanal: e-mail, chat, sms.
3. Modtageren åbner URL'en. Et almindeligt `GET` returnerer kun status. Når modtageren klikker på Vis, markerer serveren hemmeligheden som brugt og returnerer chifferteksten i ét og samme trin, der ikke kan deles op. Modtagerens browser dekrypterer den med nøglen fra fragmentet.
4. Alle senere besøg får en statusside om, at indholdet er slettet, i stedet for indholdet.

Det afgørende trin er trin 3. Sker læsningen og statusopdateringen som to separate forespørgsler, først `SELECT` for at tjekke og så `UPDATE` for at markere, kan to samtidige besøgende begge komme igennem tjekket, før nogen af dem skriver. Begge får indholdet. Det er en klassisk TOCTOU-fejl (time-of-check to time-of-use), og den gør garantien om ”præcis én gang” til ”for det meste én gang”.

## Hvorfor skal sletningen og læsningen ske i ét trin?

Fordi to samtidige besøgende ellers begge kan komme igennem tjekket, før nogen af dem markerer hemmeligheden som brugt. Løsningen er at samle tjekket, markeringen og læsningen i én databaseoperation. I Postgres ser det sådan ud med `UPDATE ... RETURNING` (https://www.postgresql.org/docs/current/sql-update.html):

```sql
UPDATE secrets
SET burned_at = now()
WHERE slug = $1
  AND burned_at IS NULL
  AND expires_at > now()
RETURNING payload;
```

Den rækkelås, som `UPDATE` tager, betyder, at samtidige kald bliver afviklet ét ad gangen: Det første matcher `WHERE`-betingelsen, sætter `burned_at` og får indholdet tilbage via `RETURNING`. Alle senere kald finder `burned_at` allerede sat, matcher nul rækker og får status som slettet. Der er intet vindue mellem ”tjek” og ”forbrug”, fordi de er den samme sætning.

Netop derfor registrerer LinkPilot visninger i ét udeleligt trin gennem en databasefunktion: Samtidige forsøg på at vise hemmeligheden kan ikke lække den to gange. Vurderer du et værktøj, er det et rimeligt spørgsmål at stille leverandøren direkte: _sker sletningen og læsningen i ét trin, der ikke kan deles op?_

## Hvorfor returnerer slettede links HTTP 410 og ikke 404?

Fordi 410 Gone (https://www.rfc-editor.org/rfc/rfc9110#section-15.5.11) siger, at ressourcen har eksisteret og er permanent utilgængelig, og det er præcis, hvad en slettet hemmelighed er. Når linket er brugt, skal det fejle tydeligt og permanent. LinkPilot gør to ting, når indholdet slettes:

- Det gemte indhold bliver **overskrevet** med `[REDACTED]` i den samme skrivning, som ændrer status. Selv hvis databasen senere bliver kompromitteret, kan en brugt hemmelighed ikke gendannes.
- Senere forsøg på at vise indholdet returnerer **HTTP 410 Gone** med en tydelig side om, at indholdet ”allerede er vist og destrueret”.

410 er den rigtige statuskode: Den betyder, at ressourcen har eksisteret og med vilje er permanent utilgængelig, i modsætning til 404, som siger ”aldrig hørt om den”. Forskellen betyder også noget for mennesker. En modtager, der ser ”denne hemmelighed er allerede vist”, ved, at afsenderen skal have besked. Afsenderen kan så tjekke revisionsloggen og skifte adgangskoden, hvis det ikke var modtageren, der åbnede den.

## Slugs, der er svære at gætte, og hvorfor de ikke er nok

Sluggen er det eneste, der står mellem det offentlige internet og en ulæst chiffertekst (nøglen ligger i fragmentet, ikke på serveren), så den skal have reel entropi. En slug, der er trukket fra en kryptografisk sikker tilfældighedskilde med fx 22 tegn i base62, har omkring 128 bit. Det er ikke et realistisk angreb at gennemløbe dem ved nogen forespørgselsrate, en server ville overleve.

Men entropien i sluggen beskytter kun mod at blive _gættet_. Den gør intet ved, at URL'en bliver _set_: browserhistorik, proxylogfiler, videresendte e-mails, skærmdeling, udklipsholderprogrammer. Derfor bygger seriøse implementeringer flere lag ovenpå:

- **Udløb**, så en URL, der er blevet set, holder op med at virke til tiden.
- **En adgangssætning**, så en URL, der er blevet set, ikke er nok i sig selv.
- **Sletning efter læsning**, så en URL, der er blevet set, er værdiløs, når den rette modtager har læst indholdet.

## Linkforhåndsvisninger og bots

Chatklienter (Slack, Teams, iMessage) og sikkerhedsscannere til e-mail laver forhåndsvisninger af URL'er ved at hente dem med en `GET`-forespørgsel, i det øjeblik beskeden bliver leveret. Sletter dit endpoint til visning indholdet ved `GET`, sletter forhåndsvisningsbotten hemmeligheden, før et menneske overhovedet ser den. Det er den mest almindelige fejl i praksis hos naive værktøjer med sletning efter læsning.

Sådan beskytter LinkPilot mod det:

- **Separate handlinger til metadata og visning.** Et `GET` på visnings-endpointet returnerer kun status, og om der kræves en adgangssætning. En visning registreres kun ved et eksplicit `POST`, som er den handling, et menneske udfører ved at klikke på knappen Vis.
- **Adgangssætning (Pro).** Når der er sat en adgangssætning, returneres indholdet ikke til nogen, hverken bot eller menneske, uden den korrekte hash.
- **`Cache-Control: no-store`** på alle svar med indhold, så mellemled aldrig cacher hemmeligt indhold.

LinkPilots side om sikkerhedsarkitektur (https://uselinkpilot.com/da/security-architecture) dokumenterer håndteringen fra ende til anden.

## Livscyklussen, tilstand for tilstand

| Tilstand | Udløses af | Hvad en besøgende ser | Kan indholdet gendannes? |
| --- | --- | --- | --- |
| Aktiv | Oprettelse | Visningsside (beder om adgangssætning, hvis den er sat) | Ja, én visning er tilbage |
| Slettet | Grænsen for antal visninger er nået | ”Allerede vist og destrueret”, HTTP 410 | Nej, indholdet er overskrevet |
| Udløbet | Udløbstidspunktet passeres | Statusside om udløb | Nej, overskrives ved næste adgang |
| Tilbagekaldt | Afsenderen lukker det fra dashboardet | Viser ikke indholdet, HTTP 410 | Nej, med det samme og permanent |

Hver overgang havner i revisionsloggen, som er en Pro-funktion i LinkPilot. Hændelsestyperne er `created`, `viewed`, `failed_passphrase`, `burned`, `expired` og `revoked`, hver med et tidsstempel og en hashet IP-adresse (SHA-256 med et salt, der skiftes dagligt; den rå IP-adresse gemmes aldrig). Det spor gør ”jeg tror, de fik det” til ”vist kl. 10:05 fra det forventede land, én visning, derefter slettet”.

## Almindelige udvidelser

- **Adgangssætning:** Kræv en adgangssætning, der sendes ad en anden kanal, før indholdet vises, så en lækket URL alene ikke er en lækket hemmelighed. I LinkPilot er det en Pro-funktion (29 $/md.) sammen med selvvalgt udløb og revisionsloggen; generatoren uden konto kan ikke sætte en. Begræns antallet af forsøg: LinkPilot tillader 5 pr. IP-adresse pr. minut pr. hemmelighed og logger hver fejl.
- **Tidsbaseret udløb:** Hemmeligheden forsvinder efter et fastsat tidsrum, også selv om den aldrig er læst. LinkPilots formular for brugere, der er logget ind, tilbyder 1 time, 24 timer eller 7 dage på alle planer og en selvvalgt dato og tid på Pro. Generatoren uden konto sætter 7 dage som standard. Det dækker det tilfælde, hvor linket bliver glemt i en indbakke, som sletning efter læsning ikke kan klare.
- **Manuel tilbagekaldelse:** Afsenderen kan lukke en ulæst hemmelighed fra dashboardet, så snart noget virker forkert. En billig forsikring, når man har sendt det til den forkerte Alex.

## Grænsetilfælde, der skiller gode implementeringer fra dårlige

### Den forkerte person åbner det først

Sletning efter læsning forhindrer ikke den forkerte i at se indholdet, men den gør fejlleveringen _synlig_. Den rette modtager møder en side om, at indholdet er slettet, revisionsloggen viser en visning, du ikke ventede, og du skifter loginoplysningerne. Det er ubehageligt, men afgrænset: præcis én eksponering, opdaget hurtigt. Sammenlign med en hemmelighed, der er indsat i en chat, hvor du aldrig ville opdage det.

### Problemet med skærmbilleder

Et engangslink giver én _visning_, ikke én _kopi_. Modtageren kan tage et skærmbillede af hemmeligheden, kopiere den eller skrive den af. Intet ved linket forhindrer det, og leverandører, der antyder noget andet, sælger fiktion. Den ærlige beskrivelse: Sletning efter læsning styrer leveringskanalen, ikke modtageren. Tillid til modtageren er en forudsætning, ikke et resultat.

### Prefetch og spekulativ indlæsning i browseren

Nogle browsere og apps henter på forhånd de URL'er, man sandsynligvis vil klikke på. Fordi et velbygget værktøj kun sletter ved et eksplicit `POST`, opfører prefetch sig præcis som en forhåndsvisningsbot: Den kan hente selve siden, men aldrig indholdet.

## Hvornår du ikke skal bruge et engangslink

- **Værdien skal bruges igen.** At kunne hente noget frem igen er hele formålet med en adgangskodeadministrator og det modsatte af formålet med et engangslink. Brug et element i en boks.
- **Flere modtagere skal have den.** Ét link, én læsning. Skal flere have den, må du enten oprette ét link pr. person (fint, og det kan spores) eller erkende, at du i stedet har brug for fælles adgangsstyring.
- **Det er en maskine, der skal bruge den.** Tjenester og CI skal læse fra en secrets manager, ikke klikke på links.

Vil du se mekanismen i aktion, så opret et med den gratis generator til hemmelige links (https://uselinkpilot.com/da/tools/free-secret-link-generator): ingen konto, krypteret i din browser og væk efter første visning.

## Læs også

- Sikker deling af adgangskoder: 5 metoder sammenlignet: https://uselinkpilot.com/da/secure-password-sharing
- One-time secret (https://uselinkpilot.com/da/one-time-secret), engangslink (https://uselinkpilot.com/da/one-time-link) og hemmeligt link (https://uselinkpilot.com/da/secret-link): de korte sider med værktøjet øverst
- Er OneTimeSecret sikkert?: https://uselinkpilot.com/da/is-onetimesecret-secure
- De bedste alternativer til OneTimeSecret: https://uselinkpilot.com/da/blog/best-onetimesecret-alternatives
- OneTimeSecret vs Privnote vs Password Pusher: https://uselinkpilot.com/da/blog/onetimesecret-vs-privnote-vs-password-pusher
- Udløbende links: hemmeligheden destrueres, den bliver ikke bare viderestillet: https://uselinkpilot.com/da/blog/expiring-links-security
- Gratis generator til hemmelige links: https://uselinkpilot.com/da/tools/free-secret-link-generator

## Kilder

- W3C, Web Cryptography API (https://www.w3.org/TR/WebCryptoAPI/).
- IETF, RFC 3986, section 3.5 Fragment (https://www.rfc-editor.org/rfc/rfc3986#section-3.5).
- IETF, RFC 9110: HTTP Semantics, section 15.5.11 410 Gone (https://www.rfc-editor.org/rfc/rfc9110#section-15.5.11).
- PostgreSQL Documentation, UPDATE (https://www.postgresql.org/docs/current/sql-update.html).

## Værktøjer til denne artikel

Generator til hemmelige engangslinks

Del en adgangskode eller en note via et link, der kun kan åbnes én gang.
https://uselinkpilot.com/da/tools/free-secret-link-generator

Selvdestruerende besked

Send en note, der forsvinder efter én læsning.
https://uselinkpilot.com/da/tools/burn-after-read-secret

Generator til links med udløb

Opret links, der holder op med at virke på et bestemt tidspunkt.
https://uselinkpilot.com/da/tools/temporary-link

## Ofte stillede spørgsmål

### Hvad sker der, hvis to personer åbner linket samtidig?

### Sletter en linkforhåndsvisning hemmeligheden?

### Hvorfor returnerer slettede links HTTP 410 i stedet for 404?

### Kan jeg gendanne en slettet hemmelighed?

### Kan serveren læse en engangshemmelighed?

### Er det sikkert at sende et engangslink via e-mail?

## LinkPilot sender et hemmeligt link, der er væk, når det er åbnet.

Krypteres i din browser, vises én gang og destrueres derefter. Kræver ingen konto.

Opret et hemmeligt link (https://uselinkpilot.com/da/tools/free-secret-link-generator)

## Læs videre

Sikkerhed

### Links med udløb: hemmeligheden destrueres, ikke omdirigeres

Et hemmeligt link med udløb destruerer hemmeligheden ved fristen; et dødt kortlink stopper kun omdirigeringen. Om valg af periode og særtilfældene.
https://uselinkpilot.com/da/blog/expiring-links-security

Sikkerhed

### Kryptering på klientsiden ved deling af hemmeligheder: hvad den beskytter

Kryptering på klientsiden beskytter kun en gemt hemmelighed mod operatøren og datalæk. Ikke mod skadeligt JavaScript, udvidelser eller et lækket link.
https://uselinkpilot.com/da/blog/client-side-encryption-for-secret-sharing

Sikkerhed

### Del loginoplysninger én gang ved onboarding af kunder

Til bureauer og MSP'er: send det første login som et engangslink, del fortrolige onboardingvejledninger på samme måde, og registrer overdragelsen.
https://uselinkpilot.com/da/blog/one-time-credential-sharing-for-client-onboarding

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Forside",
        "item": "https://uselinkpilot.com/da"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Blog",
        "item": "https://uselinkpilot.com/da/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "Sådan virker hemmelige engangslinks",
        "item": "https://uselinkpilot.com/da/blog/how-one-time-secret-links-work"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/da/blog/how-one-time-secret-links-work#article",
    "headline": "Sådan virker hemmelige engangslinks",
    "description": "Et hemmeligt engangslink viser indholdet én gang: browseren krypterer det, serveren gemmer kun chifferteksten, og første visning sletter den gemte kopi.",
    "inLanguage": "da",
    "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/da/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/da/blog/how-one-time-secret-links-work"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Hvad sker der, hvis to personer åbner linket samtidig?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Et korrekt implementeret engangslink udfører læsningen og markeringen som brugt i én databaseoperation, der ikke kan deles op, så præcis én besøgende får indholdet. Den anden ser en status om, at indholdet er slettet. Sker de to ting hver for sig, kan begge læse hemmeligheden. Det er en klassisk TOCTOU-fejl."
        }
      },
      {
        "@type": "Question",
        "name": "Sletter en linkforhåndsvisning hemmeligheden?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Det bør den ikke. Serveren bør kun slette ved en eksplicit visningshandling (POST), ikke ved den hentning af metadata (GET), som chat- og e-mailklienter bruger til at lave forhåndsvisninger. LinkPilots GET-endpoint returnerer kun status, og om der kræves en adgangssætning."
        }
      },
      {
        "@type": "Question",
        "name": "Hvorfor returnerer slettede links HTTP 410 i stedet for 404?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "410 Gone betyder, at ressourcen har eksisteret og med vilje er permanent utilgængelig, og det er præcis betydningen af en slettet hemmelighed. Det fortæller klienter og cacher, at indholdet ikke kommer tilbage, og det er ærligt: Linket var ægte, og det er brugt."
        }
      },
      {
        "@type": "Question",
        "name": "Kan jeg gendanne en slettet hemmelighed?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nej, det er hele pointen. I LinkPilot bliver den gemte chiffertekst overskrevet, i det øjeblik hemmeligheden slettes, udløber eller tilbagekaldes, så der er intet at gendanne. Har du brug for at kunne hente den frem igen, så brug en adgangskodeadministrator, og del et element fra boksen i stedet."
        }
      },
      {
        "@type": "Question",
        "name": "Kan serveren læse en engangshemmelighed?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Ikke i LinkPilot. Hemmeligheden krypteres i din browser med AES-GCM-256, før den sendes. Serveren gemmer kun chifferteksten, og dekrypteringsnøglen ligger i den del af linket, der står efter #k=, som browsere aldrig sender til en server. En visning returnerer chifferteksten, og din browser dekrypterer den. Den, der har hele linket, har også nøglen, og derfor betyder udløb og sletning efter læsning stadig noget."
        }
      },
      {
        "@type": "Question",
        "name": "Er det sikkert at sende et engangslink via e-mail?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Rimeligt sikkert, hvis linket udløber og er beskyttet af en adgangssætning, der sendes ad en anden kanal. E-mails bliver scannet, videresendt og gemt, så gå ud fra, at selve URL'en kan blive set. Det er adgangssætningen og det korte udløb, der forhindrer, at en URL, der er blevet set, bliver til en lækket hemmelighed."
        }
      }
    ],
    "inLanguage": "da"
  },
  {
    "@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"
    }
  }
]
```