---
title: "Escàners d'enllaços i secrets d'un sol ús | Blog de LinkPilot"
url: https://uselinkpilot.com/ca/blog/link-scanners-and-one-time-secrets
description: "Un enllaç d'un sol ús destruït amb un GET mor quan Slack o una passarel·la de correu el previsualitza. Doneu metadades al GET i destruïu-lo en mostrar-lo."
lang: ca
---

Seguretat (https://uselinkpilot.com/ca/blog/category/security)

# Escàners d'enllaços i secrets d'un sol ús

Un enllaç d'un sol ús destruït amb un GET mor quan Slack o una passarel·la de correu el previsualitza. Doneu metadades al GET i destruïu-lo en mostrar-lo.

W. Miller (https://uselinkpilot.com/ca/author/w-miller)26 de maig del 2026 · Actualitzat el 22 d’octubre del 2026 · Sobre LinkPilot (https://uselinkpilot.com/ca/about)

Un enllaç d'un sol ús que es destrueix amb un `GET` simple mor en el moment en què Slack, Teams o una passarel·la de correu l'obren per generar-ne una previsualització. La solució és tornar només metadades al `GET` i destruir el secret amb una petició `POST` explícita en mostrar-lo, amb una frase de contrasenya enviada per un segon canal com a protecció addicional. Aquest article explica quins sistemes obren enllaços sense demanar permís i com dissenyar el servei perquè cap d'ells no el faci fallar.

El generador d'enllaços secrets d'un sol ús (https://uselinkpilot.com/ca/tools/free-secret-link-generator) de LinkPilot funciona així: una petició de previsualització només rep l'estructura de la pàgina; el secret s'obté, i la visualització es compta, quan un navegador executa la pàgina.

## La fallada per defecte

La majoria de clients de xat i de correu intenten mostrar una previsualització quan veuen un URL. El flux és aquest:

1. Un usuari enganxa l'enllaç secret a Slack.
2. El previsualitzador de Slack obre l'URL (fa un `GET`; Slack documenta aquest comportament a link unfurling (https://api.slack.com/reference/messaging/link-unfurling)).
3. El vostre gestor de visualització tracta la petició com si fos una persona, destrueix el secret i en retorna el contingut.
4. Slack rep el contingut ja destruït (o una pàgina genèrica) i el mostra.
5. La persona fa clic a l'enllaç, veu «ja s'ha vist» i demana a qui l'ha enviat un enllaç nou.

El previsualitzador no tenia cap mala intenció. El vostre gestor ha confós «algú ha obert l'URL» amb «el destinatari ha llegit el secret». Són esdeveniments diferents, i tot el problema de disseny consisteix a mantenir-los separats.

Al pas 3 s'amaga una variant pitjor: si el `GET` del previsualitzador ha rebut el contingut real, el secret ara és dins la infraestructura de previsualitzacions d'un tercer. En el millor dels casos s'ha descartat després de generar la previsualització, però no teniu cap manera de confirmar-ho, ni cap esdeveniment d'auditoria que us digui que ha passat.

## Qui obre un enllaç abans que el destinatari?

Els previsualitzadors dels xats, les passarel·les de seguretat del correu, la protecció dels dispositius, els servidors intermediaris corporatius i les extensions de previsualització, i normalment més d'un alhora. Dir que «Slack genera previsualitzacions» es queda curt. Un URL enganxat en un entorn de treball actual l'obren normalment diversos sistemes abans que cap persona hi faci clic:

| Qui l'obre | Quan ho fa | Es pot identificar? |
| --- | --- | --- |
| Previsualitzadors de xat (Slack, Teams, iMessage, WhatsApp, LinkedIn) | En el moment d'enviar el missatge | Normalment sí: user agents propis com `Slackbot-LinkExpanding` |
| Passarel·les de seguretat del correu (Mimecast, Proofpoint, Microsoft Defender) | En el lliurament, i sovint una altra vegada en el moment del clic | Sovint no: moltes es presenten amb el user agent d'un navegador real |
| Protecció de dispositius / antivirus | Quan l'URL arriba a l'ordinador del destinatari | Rarament |
| Servidors intermediaris web corporatius | En el moment del clic, abans de reenviar la petició de l'usuari | Rarament |
| Extensions de navegador que previsualitzen enllaços | En passar el ratolí per sobre o en carregar la pàgina | No: funcionen dins la sessió del navegador de l'usuari |

El comportament dels proveïdors d'aquesta taula canvia amb el temps: preneu les afirmacions concretes sobre cada passarel·la com «segons el que es publicava el juliol del 2026, comproveu-ho amb la documentació actual». El que tenen en comú, en canvi, no canvia: tots aquests sistemes fan un `GET` simple, perquè és l'única manera segura i universal de mirar un URL que no controleu.

## Com s'evita que una previsualització destrueixi un enllaç d'un sol ús?

Doneu metadades al `GET` i destruïu el secret només amb un `POST` explícit. La semàntica d'HTTP ja ho preveu: l'RFC 9110, secció 9.2.1 (https://www.rfc-editor.org/rfc/rfc9110#section-9.2.1) defineix `GET` com a mètode segur i idempotent, és a dir, una petició que qualsevol pot fer lliurement perquè no hauria de canviar res. `POST` és el verb d'acció. Per tant, tracteu la visualització com una acció `POST` darrere d'un botó visible:

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

Ara el `GET` de Slack retorna una pàgina neutra de metadades. El secret només mor quan la persona fa clic al botó. Cap escàner que respecti la semàntica d'HTTP no toca mai el contingut, i gairebé tots la respecten, perquè enviar `POST`s amb efectes a URL arbitraris trencaria mig web.

## Un recorregut pas a pas

Seguiu un enllaç de principi a fi. Creeu un secret que es destrueix després de la lectura, amb frase de contrasenya, i enganxeu l'URL en un missatge directe de Slack i en un correu.

1. **El previsualitzador de Slack** fa `GET /s/abc123`. Resposta: una petita pàgina de metadades (estat actiu, cal frase de contrasenya). No es registra cap visualització. El secret continua viu.
2. **La passarel·la de correu del destinatari** reescriu l'URL del correu i l'obre en el moment del lliurament per analitzar-ne la reputació. El mateix `GET`, les mateixes metadades. Continua viu.
3. **El destinatari fa clic a l'enllaç del correu.** L'escàner de la passarel·la l'obre una vegada més en el moment del clic (`GET`) i després redirigeix el navegador.
4. **El navegador carrega la pàgina per mostrar el secret**, amb un altre `GET`. La pàgina mostra un botó i un camp per a la frase de contrasenya. Encara no s'ha registrat cap visualització.
5. **El destinatari introdueix la frase de contrasenya i fa clic al botó.** El navegador envia `POST /s/abc123`. Es registra la visualització, es retorna el contingut i el secret es destrueix.
6. **Qualsevol que obri l'URL després** rep una resposta explícita que diu que ja s'ha vist i s'ha destruït, en lloc del contingut.

Cinc peticions, una visualització. Aquesta proporció és normal en un entorn corporatiu. Un disseny que no l'aguanti fallarà el primer dia, i qui envia acabarà enganxant la contrasenya directament al xat.

## Defenses en capes

### La separació entre GET i POST

Resol el cas de tots els previsualitzadors i escàners que es comporten bé, que són la immensa majoria del trànsit automatitzat. Aquesta és la base; tota la resta afegeix profunditat.

### Frase de contrasenya

Cobreix el que la separació no pot cobrir: els entorns aïllats que executen JavaScript i interactuen amb la pàgina, a més dels clics accidentals de persones i dels correus reenviats. Un entorn aïllat d'anàlisi pot fer clic a un botó; no pot proporcionar una frase de contrasenya que ha viatjat per un altre canal. Envieu l'enllaç per correu i la frase de contrasenya per un missatge directe de Slack o per SMS.

### Filtratge de bots pel user agent

Descarteu els bots de previsualització coneguts (`Slackbot`, `LinkedInBot`, `Twitterbot`) abans que arribin a la lògica de visualització. Val la pena fer-ho com a precaució extra, però mai no és suficient per si sol: els escàners de seguretat es presenten habitualment amb el user agent d'un navegador real precisament perquè les pàgines malicioses no es puguin amagar de l'anàlisi.

### Caducitat curta

Limiteu el període de risc. Un enllaç que ha viscut quinze minuts deixa als escàners, als fitxers de registre i a l'historial del xat un URL que ja no porta enlloc.

### Cache-Control: no-store

Poseu-lo a cada resposta de visualització perquè cap intermediari (servidor intermediari corporatiu, CDN, memòria cau del navegador) no conservi una còpia del contingut després de l'única lectura legítima.

## El cas de les passarel·les de seguretat del correu

Les passarel·les corporatives mereixen una secció pròpia perquè obren l'enllaç dues vegades. Els productes d'aquesta mena (Microsoft Defender Safe Links (https://learn.microsoft.com/en-us/defender-office-365/safe-links-about) n'és l'exemple documentat) reescriuen cada URL del correu entrant perquè passi pel seu propi domini d'anàlisi. Normalment l'URL s'obre una vegada en el lliurament, per analitzar-ne la reputació, i una altra en el moment del clic, abans de redirigir la persona a la destinació real.

Si qualsevol d'aquestes peticions destruís el secret, el destinatari veuria _sempre_ un enllaç mort: una fallada que als usuaris els sembla aleatòria però que és del tot determinista. La separació entre `GET` i `POST` absorbeix les dues peticions sense cap cost, perquè totes dues són `GET`s simples. Després, la redirecció del moment del clic porta la persona a la pàgina de visualització, on es fa el `POST`.

## Casos límit que encara fan mal

- **Entorns aïllats que executen JavaScript.** Alguns entorns d'anàlisi renderitzen la pàgina i hi interactuen. En principi, un entorn agressiu podria fer clic a un `POST` darrere d'un botó _sense frase de contrasenya_. La frase de contrasenya és la protecció addicional.
- **Enllaç i frase de contrasenya pel mateix canal.** Si viatgen tots dos en un mateix correu, totes les defenses anteriors queden reduïdes a «esperem que ningú no llegeixi aquest correu». Separeu sempre els canals.
- **Reenviaments.** Cada reenviament a un xat o un sistema de correu nou provoca una nova ronda de previsualitzacions. Amb la separació no fa cap mal, però cada salt és un altre conjunt de registres que conserven l'URL, i això és un argument a favor de la caducitat curta.
- **Visualitzacions simultànies.** Si dues persones fan clic al botó alhora, la lectura i la destrucció han de passar en un sol pas indivisible: exactament una petició guanya i l'altra rep «ja s'ha vist». Una implementació que les separi pot servir el contingut dues vegades.

## Comproveu la vostra eina

Abans de confiar credencials reals a qualsevol servei per compartir secrets, feu aquesta comprovació de dos minuts:

1. Creeu un secret de prova que es destrueixi després de la lectura.
2. Obriu-lo des d'un terminal, que és exactament el que fa un previsualitzador: `curl -s -o /dev/null -w "%{http_code}" "<url>"`
3. Obriu l'enllaç en un navegador. Si veieu «ja s'ha vist», l'eina destrueix el secret amb el `GET` i no és segur enganxar-ne els enllaços en un xat o un correu.
4. Si ha sobreviscut, mostreu-lo correctament al navegador i torneu a executar `curl`: ara hauríeu de rebre una resposta explícita que indiqui que ja no existeix o s'ha destruït, no el contingut.

## Com ho implementa LinkPilot

Perquè consti, aquest és el disseny que fan servir els enllaços secrets de LinkPilot: un `GET` al punt de visualització només retorna metadades (l'estat i si cal frase de contrasenya), i només es registra una visualització amb un `POST` explícit. Les frases de contrasenya es converteixen en un hash SHA-256 al client i tenen un límit de cinc intents per IP, per minut i per secret. Cada resposta de visualització porta `Cache-Control: no-store`, els secrets destruïts o caducats retornen HTTP 410 amb el contingut desat sobreescrit, i la cronologia d'auditoria registra cada esdeveniment amb la IP convertida en hash amb una sal que canvia cada dia: la IP en brut no es desa mai. Teniu tots els detalls a la pàgina d'arquitectura de seguretat (https://uselinkpilot.com/ca/security-architecture).

Proveu-la gratis, sense registre

### Missatge que s'autodestrueix

Envieu una nota que desapareix després de llegir-la una vegada.

Obre l'eina (https://uselinkpilot.com/ca/tools/burn-after-read-secret)

## Límits d'aquest disseny

Els límits, amb franquesa: res de tot això no protegeix un secret _després_ d'una visualització legítima, perquè el destinatari pot copiar el contingut, fer-ne una captura de pantalla o reenviar-lo. No serveix de res si la frase de contrasenya viatja amb l'enllaç. I no pot impedir que una persona que ha rebut l'enllaç per error l'obri abans que el destinatari previst. Per a això hi ha la cronologia d'auditoria: veieu la visualització inesperada i roteu la credencial.

## Lectures relacionades

- Com funcionen els enllaços secrets d'un sol ús: https://uselinkpilot.com/ca/blog/how-one-time-secret-links-work
- Per què els URL filtren informació confidencial: https://uselinkpilot.com/ca/blog/why-urls-leak-sensitive-information
- Arquitectura de seguretat de LinkPilot: https://uselinkpilot.com/ca/security-architecture

## Referències

- 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).

## Eines per a aquest article

Missatge que s'autodestrueix

Envieu una nota que desapareix després de llegir-la una vegada.
https://uselinkpilot.com/ca/tools/burn-after-read-secret

Generador d'enllaços secrets d'un sol ús

Compartiu una contrasenya o una nota amb un enllaç que només s'obre una vegada.
https://uselinkpilot.com/ca/tools/free-secret-link-generator

Generador d'enllaços amb caducitat

Creeu enllaços que deixen de funcionar en un moment determinat.
https://uselinkpilot.com/ca/tools/temporary-link

## Preguntes freqüents

### Quins clients són els pitjors?

### Puc detectar els previsualitzadors pel user agent?

### Separar GET i POST ho soluciona del tot?

### Els escàners de correu arriben a fer clic als botons de la pàgina?

### Com puc comprovar si una eina per compartir secrets resisteix les previsualitzacions?

## LinkPilot envia un enllaç secret que desapareix després d'obrir-lo.

Es xifra al vostre navegador, es mostra una sola vegada i després es destrueix. Sense compte.

Crea un enllaç secret (https://uselinkpilot.com/ca/tools/free-secret-link-generator)

## Llegiu també

Seguretat

### Com compartir claus d'API de manera segura

No enganxeu mai una clau d'API al xat o al correu: envieu un enllaç d'un sol ús, xifrat al navegador i destruït en obrir-lo, i roteu les claus ja enganxades.
https://uselinkpilot.com/ca/blog/how-to-share-api-keys-securely

Seguretat

### Com funcionen els enllaços secrets d'un sol ús

Un enllaç secret d'un sol ús es mostra una vegada: el navegador el xifra, el servidor només en desa el text xifrat i la primera lectura destrueix la còpia.
https://uselinkpilot.com/ca/blog/how-one-time-secret-links-work

Seguretat

### Enllaços que caduquen: destrueixen secrets, no redirigeixen

Un enllaç secret amb caducitat destrueix el secret al termini; un enllaç curt mort només deixa de redirigir. Com triar el termini i els casos límit.
https://uselinkpilot.com/ca/blog/expiring-links-security

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Inici",
        "item": "https://uselinkpilot.com/ca"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Blog",
        "item": "https://uselinkpilot.com/ca/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "Escàners d'enllaços i secrets d'un sol ús",
        "item": "https://uselinkpilot.com/ca/blog/link-scanners-and-one-time-secrets"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/ca/blog/link-scanners-and-one-time-secrets#article",
    "headline": "Escàners d'enllaços i secrets d'un sol ús",
    "description": "Un enllaç d'un sol ús destruït amb un GET mor quan Slack o una passarel·la de correu el previsualitza. Doneu metadades al GET i destruïu-lo en mostrar-lo.",
    "inLanguage": "ca",
    "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/ca/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/ca/blog/link-scanners-and-one-time-secrets"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Quins clients són els pitjors?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Qualsevol que generi previsualitzacions d'URL: Slack, Microsoft Teams, iMessage, els missatges directes de LinkedIn, les previsualitzacions de WhatsApp web i la majoria de passarel·les de seguretat del correu (Mimecast, Proofpoint, Microsoft Defender). Tots obren l'URL en rebre'l."
        }
      },
      {
        "@type": "Question",
        "name": "Puc detectar els previsualitzadors pel user agent?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "En part. Els bots que es comporten bé envien un user agent identificable (Slackbot-LinkExpanding, LinkedInBot, Twitterbot). Els escàners de seguretat sovint es fan passar per navegadors reals, així que no n'hi ha prou de filtrar pel user agent."
        }
      },
      {
        "@type": "Question",
        "name": "Separar GET i POST ho soluciona del tot?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Resol completament el cas dels previsualitzadors, perquè només fan peticions GET. No resol el cas d'una persona que hi fa clic per error i destrueix el secret: per a això també cal la frase de contrasenya."
        }
      },
      {
        "@type": "Question",
        "name": "Els escàners de correu arriben a fer clic als botons de la pàgina?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Alguns entorns aïllats d'anàlisi executen JavaScript i poden interactuar amb una pàgina, de manera que un simple botó per mostrar el secret no és cap garantia. Per això importa la frase de contrasenya: un entorn aïllat no pot proporcionar una frase de contrasenya que ha viatjat per un altre canal."
        }
      },
      {
        "@type": "Question",
        "name": "Com puc comprovar si una eina per compartir secrets resisteix les previsualitzacions?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Creeu un secret de prova, obriu-ne l'URL una vegada amb curl (un GET simple, exactament el que fa un previsualitzador) i després obriu-lo en un navegador. Si el navegador diu que ja s'ha vist, l'eina destrueix el secret amb el GET i no és segur enganxar-ne els enllaços en un xat o un correu."
        }
      }
    ],
    "inLanguage": "ca"
  },
  {
    "@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"
    }
  }
]
```