---
title: "איך עובדים קישורים סודיים חד-פעמיים | הבלוג של LinkPilot"
url: https://uselinkpilot.com/he/blog/how-one-time-secret-links-work
description: "קישור סודי חד-פעמי מציג את התוכן פעם אחת: הדפדפן מצפין אותו, השרת שומר רק טקסט מוצפן, וההצגה הראשונה מוחקת את העותק השמור."
lang: he
---

אבטחה (https://uselinkpilot.com/he/blog/category/security)

# איך עובדים קישורים סודיים חד-פעמיים

קישור סודי חד-פעמי מציג את התוכן פעם אחת: הדפדפן מצפין אותו, השרת שומר רק טקסט מוצפן, וההצגה הראשונה מוחקת את העותק השמור.

W. Miller (https://uselinkpilot.com/he/author/w-miller)26 במאי 2026 · עודכן 22 באוקטובר 2026 · על LinkPilot (https://uselinkpilot.com/he/about)

קישור סודי חד-פעמי הוא URL שמציג את התוכן שלו פעם אחת בדיוק, ואחר כך מפסיק לעבוד לצמיתות. הדפדפן של השולח מצפין את הסוד ב-AES-GCM-256, השרת שומר רק את הטקסט המוצפן, והמפתח עובר בחלק של הקישור שאחרי `#k=`, שדפדפנים אף פעם לא שולחים. ההצגה הראשונה אצל הנמען מפענחת את הסוד, ובאותה פעולה העותק השמור נמחק.

אפשר ליצור קישור כזה בלי חשבון במחולל הקישורים הסודיים החינמי (https://uselinkpilot.com/he/tools/free-secret-link-generator).

המנגנון פשוט, אבל מקרי הקצה הם החלק המעניין, ושם מימושים רשלניים דולפים בלי שאיש ישים לב.

## התהליך הבסיסי

1. השולח מדביק את הסוד. הדפדפן יוצר מפתח אקראי, מצפין את התוכן ב-AES-GCM-256 דרך ה-Web Crypto API (https://www.w3.org/TR/WebCryptoAPI/), ושולח רק את הטקסט המוצפן. השרת שומר אותו תחת סיומת קישור אקראית שקשה לנחש ומחזיר URL. הדפדפן מוסיף את המפתח כחלק `#k=` שאחרי הסימן #, והחלק הזה לא יוצא מהמכשיר של השולח.
2. השולח משתף את ה-URL בכל ערוץ: אימייל, צ'אט, SMS.
3. הנמען פותח את ה-URL. בקשת `GET` רגילה מחזירה רק סטטוס. כשהנמען לוחץ על הצגה, השרת מסמן את הסוד כנצרך ומחזיר את הטקסט המוצפן בפעולה אחת שאי אפשר לפצל. הדפדפן של הנמען מפענח אותו עם המפתח מהחלק שאחרי הסימן #.
4. כל ביקור נוסף מקבל עמוד סטטוס של "נמחק" במקום התוכן.

השלב הקריטי הוא שלב 3. אם הקריאה ועדכון הסטטוס מתבצעים בשתי שאילתות נפרדות, `SELECT` לבדיקה ואחריה `UPDATE` לסימון, שני צופים בו-זמניים יכולים לעבור את הבדיקה לפני שאחד מהם כותב. שניהם מקבלים את התוכן. זה באג TOCTOU קלאסי (time-of-check to time-of-use), והוא הופך את ההבטחה "בדיוק פעם אחת" ל"בדרך כלל פעם אחת".

## למה המחיקה והקריאה חייבות לקרות בצעד אחד?

כי אחרת שני צופים בו-זמניים יכולים לעבור את הבדיקה לפני שאחד מהם מסמן את הסוד כנצרך. הפתרון הוא לאחד את הבדיקה, הסימון והקריאה לפעולת מסד נתונים אחת. ב-Postgres, עם `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;
```

ה-`UPDATE` נועל את השורה, ולכן קריאות בו-זמניות מתבצעות בזו אחר זו: הראשונה עומדת בתנאי `WHERE`, משנה את `burned_at` ומקבלת את התוכן בחזרה דרך `RETURNING`. כל קריאה מאוחרת יותר מוצאת ש-`burned_at` כבר מוגדר, לא תואמת אף שורה ומקבלת את סטטוס המחיקה. אין חלון זמן בין "בדיקה" ל"צריכה", כי שתיהן אותה פקודה.

בדיוק מהסיבה הזאת LinkPilot רושם צפיות דרך פונקציה במסד הנתונים, בצעד אחד שאי אפשר לפצל, וניסיונות הצגה בו-זמניים לא יכולים להדליף את הסוד פעמיים. אם אתם בודקים כלי, זו שאלה הוגנת לשאול את הספק ישירות: _האם המחיקה והקריאה קורות בצעד אחד?_

## למה קישורים שנמחקו מחזירים HTTP 410 ולא 404?

כי 410 Gone (https://www.rfc-editor.org/rfc/rfc9110#section-15.5.11) אומר שהמשאב היה קיים ואינו זמין עוד לצמיתות, וזה בדיוק המצב של סוד שנמחק. אחרי שהקישור נצרך, הוא צריך להיכשל באופן ברור וקבוע. LinkPilot עושה שני דברים במחיקה:

- התוכן השמור **נדרס** ב-`[REDACTED]` באותה פעולת כתיבה שמשנה את הסטטוס, כך שגם פריצה עתידית למסד הנתונים לא תוכל לשחזר סוד שכבר נצרך.
- ניסיונות הצגה נוספים מחזירים **HTTP 410 Gone** עם עמוד ברור שאומר שהתוכן "כבר נצפה והושמד".

410 הוא קוד הסטטוס הנכון: הוא אומר שהמשאב היה קיים ושהוא לא זמין עוד, בכוונה ולצמיתות. 404, לעומתו, אומר "אין לנו מושג על מה מדובר". ההבדל חשוב גם לבני אדם: נמען שרואה "הסוד הזה כבר נצפה" יודע לספר לשולח, והשולח יכול לבדוק את יומן הביקורת ולהחליף את הסיסמה אם הצופה לא היה הנמען.

## סיומות קישור שקשה לנחש, ולמה זה לא מספיק

סיומת הקישור היא מה שעומד בין האינטרנט הציבורי לבין טקסט מוצפן שעוד לא נקרא (המפתח נמצא בחלק שאחרי הסימן #, לא בשרת), ולכן היא חייבת לשאת אנטרופיה אמיתית. סיומת שנוצרת ממקור אקראי מאובטח קריפטוגרפית, למשל 22 תווים ב-base62, נושאת בערך 128 ביט. במצב כזה ניחוש שיטתי אינו מתקפה מציאותית בשום קצב בקשות ששרת היה עומד בו.

אבל האנטרופיה של הסיומת מגינה רק מפני _ניחוש_. היא לא עוזרת כשמישהו _רואה_ את ה-URL: היסטוריית הדפדפן, לוגים של פרוקסי, אימיילים שהועברו הלאה, שיתופי מסך, תוכנות לניהול לוח ההעתקה. לכן מימושים רציניים מוסיפים עוד שכבות:

- **תפוגה**, כך שתוקף של URL שנצפה פג בזמן שנקבע מראש.
- **ביטוי סיסמה**, כך שה-URL לבדו לא מספיק למי שראה אותו.
- **מחיקה לאחר קריאה**, כך שאחרי הקריאה הלגיטימית ל-URL שנצפה אין שום ערך.

## תצוגות מקדימות של קישורים ובוטים

אפליקציות צ'אט (Slack, Teams, iMessage) וסורקי אבטחה של אימייל מייצרים תצוגה מקדימה של URL: הם מורידים אותו בבקשת `GET` ברגע שההודעה נמסרת. אם נקודת הקצה של ההצגה מוחקת את הסוד ב-`GET`, הבוט של התצוגה המקדימה משמיד את הסוד לפני שאדם בכלל ראה אותו. זה הכשל הנפוץ ביותר בפועל בכלים פשטניים של מחיקה לאחר קריאה.

ההגנות, כפי ש-LinkPilot מממש אותן:

- **הפרדה בין פעולת המטא-דאטה לפעולת ההצגה.** בקשת `GET` לנקודת הקצה של ההצגה מחזירה רק את הסטטוס ואם נדרש ביטוי סיסמה. צפייה נרשמת רק בבקשת `POST` מפורשת, הפעולה שאדם מבצע כשהוא לוחץ על כפתור ההצגה.
- **שער ביטוי סיסמה (Pro).** כשמוגדר ביטוי סיסמה, התוכן לא מוחזר לאף אחד, בוט או אדם, בלי ה-hash הנכון.
- **`Cache-Control: no-store`** בכל תגובת הצגה, כך שגורמי ביניים אף פעם לא שומרים את תוכן הסוד במטמון.

עמוד ארכיטקטורת האבטחה של LinkPilot (https://uselinkpilot.com/he/security-architecture) מתעד את הטיפול הזה מקצה לקצה.

## מחזור החיים, מצב אחר מצב

| מצב | מה גורם לו | מה המבקר רואה | אפשר לשחזר את התוכן? |
| --- | --- | --- | --- |
| פעיל | יצירה | עמוד ההצגה (בקשה לביטוי סיסמה אם הוגדר) | כן: הצגה אחת זמינה |
| נמחק | הגעה למגבלת הצפיות | "כבר נצפה והושמד", HTTP 410 | לא: התוכן נדרס |
| פג תוקף | חלף מועד התפוגה | עמוד סטטוס של פג תוקף | לא: נדרס בגישה הבאה |
| בוטל | השולח מבטל את הקישור מלוח הבקרה | מסרב להציג, HTTP 410 | לא: מיידי ולצמיתות |

כל מעבר בין מצבים נרשם ביומן הביקורת, תכונה של Pro ב-LinkPilot. סוגי האירועים הם `created`, `viewed`, `failed_passphrase`, `burned`, `expired` ו-`revoked`, כל אחד עם חותמת זמן וכתובת IP שעברה hash (SHA-256 עם salt שמתחלף מדי יום; כתובת ה-IP הגולמית לא נשמרת אף פעם). היומן הזה הוא מה שהופך את "נראה לי שזה הגיע" ל"נצפה ב-10:05 מהמדינה הצפויה, צפייה אחת, ואז נמחק".

## הרחבות נפוצות

- **שער ביטוי סיסמה**: דרישה לביטוי סיסמה שנמסר בערוץ אחר לפני ההצגה, כך ש-URL שדלף לבדו אינו סוד שדלף. ב-LinkPilot זו תכונה של Pro ($29 לחודש), לצד תפוגה מותאמת אישית ויומן הביקורת; המחולל שעובד בלי חשבון לא יכול להגדיר ביטוי סיסמה. הגבילו את קצב הניסיונות: LinkPilot מאפשר 5 ניסיונות לכל IP לדקה לכל סוד, ורושם כל כישלון.
- **תפוגה לפי זמן**: הסוד מת אחרי פרק זמן קבוע גם אם אף אחד לא קרא אותו. הטופס של LinkPilot למשתמשים מחוברים מציע 1 שעה, 24 שעות או 7 ימים בכל תוכנית, ותאריך ושעה מותאמים אישית בתוכנית Pro. המחולל שעובד בלי חשבון מגדיר 7 ימים כברירת מחדל. זה מכסה את המקרה של קישור שנשכח בתיבת הדואר, שמחיקה לאחר קריאה לא מכסה.
- **ביטול ידני**: השולח יכול לבטל את הקישור לסוד שלא נקרא מלוח הבקרה ברגע שמשהו נראה לא בסדר. ביטוח זול למקרה של "שלחתי לאלכס הלא נכון".

## מקרי קצה שמבדילים מימושים טובים

### האדם הלא נכון פותח את הקישור ראשון

מחיקה לאחר קריאה לא עוצרת את הצופה הלא נכון, אבל היא הופכת את המסירה השגויה ל_גלויה_. הנמען המיועד מגיע לעמוד שאומר שהתוכן כבר נמחק, יומן הביקורת מראה צפייה אחת שלא ציפיתם לה, ואתם מחליפים את פרטי ההתחברות. זה כואב, אבל תחום: חשיפה אחת בדיוק, שמתגלה מהר. השוו את זה לסוד שהודבק בצ'אט, שבו לא הייתם יודעים על כך אף פעם.

### בעיית צילום המסך

חד-פעמי פירושו _הצגה_ אחת, לא _עותק_ אחד. הנמען יכול לצלם את המסך, להעתיק או להקליד מחדש את הסוד, ושום דבר בקישור לא מונע את זה. ספקים שרומזים אחרת מוכרים בדיה. התיאור הכן: מחיקה לאחר קריאה שולטת בערוץ המסירה, לא בנמען. האמון בנמען הוא נתון שאתם מביאים, לא משהו שהכלי מספק.

### טעינה מוקדמת וטעינה ספקולטיבית בדפדפן

חלק מהדפדפנים והאפליקציות טוענים מראש URL שסביר שילחצו עליהם. כלי שבנוי נכון מוחק רק בבקשת `POST` מפורשת, ולכן טעינה מוקדמת מתנהגת בדיוק כמו בוט של תצוגה מקדימה: היא יכולה להוריד את מעטפת העמוד, אף פעם לא את התוכן.

## מתי לא להשתמש בקישור חד-פעמי

- **תצטרכו את הערך שוב.** אפשרות השחזור היא כל מטרת התכנון של מנהל סיסמאות, ובדיוק מה שקישור חד-פעמי נועד למנוע. השתמשו בפריט בכספת.
- **כמה נמענים צריכים את הסוד.** קישור אחד, קריאה אחת. הפצה לכמה אנשים פירושה ליצור קישור לכל אדם (זה בסדר, ואפשר לעקוב אחריו ביומן), או להודות שאתם צריכים בקרת גישה משותפת.
- **מי שצורך את הסוד הוא מכונה.** שירותים ו-CI צריכים לקרוא ממנהל סודות, לא ללחוץ על קישורים.

אם אתם רוצים לראות את המנגנון בפעולה, צרו קישור במחולל הקישורים הסודיים החינמי (https://uselinkpilot.com/he/tools/free-secret-link-generator): בלי חשבון, מוצפן בדפדפן שלכם, נמחק אחרי ההצגה הראשונה.

## קריאה נוספת

- שיתוף סיסמאות מאובטח: השוואה בין 5 שיטות: https://uselinkpilot.com/he/secure-password-sharing
- One Time Secret (https://uselinkpilot.com/he/one-time-secret), קישור חד-פעמי (https://uselinkpilot.com/he/one-time-link) וקישור סודי (https://uselinkpilot.com/he/secret-link): העמודים הקצרים עם הכלי בראש העמוד
- האם OneTimeSecret מאובטח?: https://uselinkpilot.com/he/is-onetimesecret-secure
- החלופות הטובות ביותר ל-OneTimeSecret: https://uselinkpilot.com/he/blog/best-onetimesecret-alternatives
- OneTimeSecret מול Privnote מול Password Pusher: https://uselinkpilot.com/he/blog/onetimesecret-vs-privnote-vs-password-pusher
- קישורים עם תפוגה: הסוד מושמד, לא רק מפנה למקום אחר: https://uselinkpilot.com/he/blog/expiring-links-security
- מחולל קישורים סודיים חינמי: https://uselinkpilot.com/he/tools/free-secret-link-generator

## מקורות

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

## כלים למאמר הזה

מחולל קישורים סודיים חד-פעמיים

שתפו סיסמה או פתק בקישור שנפתח פעם אחת.
https://uselinkpilot.com/he/tools/free-secret-link-generator

הודעה שמשמידה את עצמה

שלחו פתק שנעלם אחרי קריאה אחת.
https://uselinkpilot.com/he/tools/burn-after-read-secret

מחולל קישורים עם תוקף

צרו קישורים שמפסיקים לעבוד בזמן שקבעתם.
https://uselinkpilot.com/he/tools/temporary-link

## שאלות נפוצות

### מה קורה אם שני אנשים פותחים את הקישור באותו זמן?

### האם תצוגה מקדימה של הקישור מוחקת את הסוד?

### למה קישורים שנמחקו מחזירים HTTP 410 ולא 404?

### אפשר לשחזר סוד שנמחק?

### האם השרת יכול לקרוא סוד חד-פעמי?

### האם בטוח לשלוח קישור חד-פעמי באימייל?

## LinkPilot שולח קישור סודי שנמחק אחרי שפותחים אותו.

מוצפן בדפדפן שלכם, מוצג פעם אחת ואז מושמד. ללא חשבון.

יצירת קישור סודי (https://uselinkpilot.com/he/tools/free-secret-link-generator)

## לקריאה נוספת

אבטחה

### קישורים עם תפוגה: הסוד מושמד, לא רק מפסיק להפנות

קישור סודי עם תפוגה משמיד את הסוד במועד שנקבע; קישור מקוצר שמת רק מפסיק להפנות. איך בוחרים חלון זמן, ומה קורה במקרי הקצה.
https://uselinkpilot.com/he/blog/expiring-links-security

אבטחה

### הצפנה בצד הלקוח לשיתוף סודות: על מה היא מגינה ועל מה לא

הצפנה בצד הלקוח מגינה על סוד שמור מפני המפעיל ומדליפת מסד נתונים, ותו לא: JavaScript זדוני, תוספים וקישור שדלף עוקפים אותה.
https://uselinkpilot.com/he/blog/client-side-encryption-for-secret-sharing

אבטחה

### שיתוף חד-פעמי של פרטי התחברות בקליטת לקוחות

לסוכנויות ולספקי MSP: שלחו את פרטי ההתחברות הראשונים בקישור חד-פעמי, שתפו כך גם הוראות קליטה חסויות ותעדו את המסירה.
https://uselinkpilot.com/he/blog/one-time-credential-sharing-for-client-onboarding

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "דף הבית",
        "item": "https://uselinkpilot.com/he"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "בלוג",
        "item": "https://uselinkpilot.com/he/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "איך עובדים קישורים סודיים חד-פעמיים",
        "item": "https://uselinkpilot.com/he/blog/how-one-time-secret-links-work"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/he/blog/how-one-time-secret-links-work#article",
    "headline": "איך עובדים קישורים סודיים חד-פעמיים",
    "description": "קישור סודי חד-פעמי מציג את התוכן פעם אחת: הדפדפן מצפין אותו, השרת שומר רק טקסט מוצפן, וההצגה הראשונה מוחקת את העותק השמור.",
    "inLanguage": "he",
    "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/he/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/he/blog/how-one-time-secret-links-work"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "מה קורה אם שני אנשים פותחים את הקישור באותו זמן?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "קישור חד-פעמי שמומש נכון מבצע את הקריאה ואת הסימון כנצרך בפעולת מסד נתונים אחת שאי אפשר לפצל, כך שרק צופה אחד מצליח. השני רואה סטטוס של \"נמחק\". אם הקריאה והסימון נפרדים, שניהם יכולים לקרוא את הסוד, וזה באג TOCTOU קלאסי."
        }
      },
      {
        "@type": "Question",
        "name": "האם תצוגה מקדימה של הקישור מוחקת את הסוד?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "היא לא אמורה. שרתים צריכים למחוק רק בפעולת הצגה מפורשת (POST), לא בבקשת המטא-דאטה (GET) שאפליקציות צ'אט ואימייל שולחות כדי לייצר תצוגה מקדימה. נקודת הקצה של LinkPilot ל-GET מחזירה רק את הסטטוס ואם נדרש ביטוי סיסמה."
        }
      },
      {
        "@type": "Question",
        "name": "למה קישורים שנמחקו מחזירים HTTP 410 ולא 404?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "410 Gone אומר שהמשאב היה קיים ושהוא לא זמין עוד, בכוונה ולצמיתות, וזו בדיוק המשמעות של סוד שנמחק. הקוד אומר ללקוחות ולמטמונים לא לצפות שהתוכן יחזור, וזו תשובה כנה: הקישור היה אמיתי, והוא כבר נוצל."
        }
      },
      {
        "@type": "Question",
        "name": "אפשר לשחזר סוד שנמחק?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "לא, וזו כל המטרה. ב-LinkPilot הטקסט המוצפן השמור נדרס ברגע שהסוד נמחק, פג תוקפו או שהקישור בוטל, כך שאין מה לשחזר. אם אתם צריכים אפשרות שחזור, השתמשו במנהל סיסמאות ושתפו פריט מהכספת."
        }
      },
      {
        "@type": "Question",
        "name": "האם השרת יכול לקרוא סוד חד-פעמי?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "לא ב-LinkPilot. הסוד מוצפן בדפדפן שלכם ב-AES-GCM-256 לפני שהוא נשלח. השרת שומר רק את הטקסט המוצפן, ומפתח הפענוח עובר בחלק של הקישור שאחרי #k=, שדפדפנים אף פעם לא שולחים לשרת. הצגה מחזירה את הטקסט המוצפן, והדפדפן שלכם מפענח אותו. מי שמחזיק בקישור המלא מחזיק במפתח, ולכן תפוגה ומחיקה לאחר קריאה עדיין חשובות."
        }
      },
      {
        "@type": "Question",
        "name": "האם בטוח לשלוח קישור חד-פעמי באימייל?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "במידה סבירה, אם לקישור יש תפוגה והוא מוגן בביטוי סיסמה שנשלח בערוץ אחר. אימיילים נסרקים, מועברים הלאה ונשמרים, אז הניחו שמישהו עלול לראות את ה-URL עצמו. ביטוי הסיסמה והתפוגה הקצרה הם מה שמונע מ-URL שנצפה להפוך לסוד שדלף."
        }
      }
    ],
    "inLanguage": "he"
  },
  {
    "@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"
    }
  }
]
```