Elido
10 мин чтенияМиграция
Ключевая

Миграция с Bitly на Elido: техническое руководство

Как перенести инфраструктуру ссылок из Bitly без всплеска ошибок 404: экспорт CSV, массовое создание на Elido, тайминг переключения DNS, сверка истории кликов и пять ловушек, которые проявляются на второй неделе.

Ana Kowalska
Marketing solutions engineering
Миграция с Bitly на Elido: техническое руководство

Миграция инфраструктуры ссылок - дело ответственное. Каждая короткая ссылка, которую вы когда-либо печатали, вставляли в футер письма или превращали в QR-код, теперь является зависимостью. Ошибитесь - и вы получите 404 для значительной части входящего трафика на несколько недель, прежде чем кто-то это заметит.

Это руководство посвящено переходу с Bitly на Elido. Мы предполагаем, что вы уже решили переехать - обычно ради хранения данных в ЕС, чистого бесплатного тарифа, white-label перепродажи или доступа к API, который не требует тарифа Premium ($199/мес при оплате за год или $300/мес ежемесячно по состоянию на май 2026 года). Если вы еще на этапе оценки, страница сравнения /compare/vs-bitly будет лучшей отправной точкой.

Что именно нужно перенести#

Переносятся три вещи; остальное на техническом уровне не имеет значения.

  1. Активные короткие ссылки. Слаг, адрес назначения, опциональные теги и папки, а также пользовательский домен (если есть).
  2. DNS пользовательского домена. Запись CNAME, указывающая на edge-узлы Bitly, должна указывать на Elido.
  3. История кликов. Агрегированные счетчики Bitly - не сырые события (их нельзя экспортировать).

Все остальное - дашборды Bitly Sights, брендированные QR-коды, конфигурации диплинков - настраивается на Elido с нуля, а не мигрирует. Не пытайтесь их переносить; перестройте один раз на новом стеке.

Пайплайн миграции с Bitly на Elido в пять шагов: экспорт ссылок из Bitly, маппинг слагов на адреса назначения, массовый импорт в Elido, перенаправление CNAME пользовательского домена, затем сквозная проверка

Шаг 1: Инвентаризация#

Bitly ограничивает экспорт исторических данных в зависимости от тарифного плана. Экспорт CSV из панели управления работает примерно до 10 тысяч ссылок; дальше он либо отваливается по таймауту, либо плохо пагинируется. Для больших объемов обращайтесь к API напрямую:

curl -H "Authorization: Bearer $BITLY_TOKEN" \
  "https://api-ssl.bitly.com/v4/groups/$GROUP_GUID/bitlinks?size=100"

Пагинируйте через URL pagination.next в каждом ответе. Максимальный размер страницы - 100. Сохраняйте результаты в формате JSONL - по одной ссылке на строку - чтобы можно было возобновить процесс, если экспорт прервется.

Что вам нужно из каждой строки:

  • link - полная короткая ссылка (https://bit.ly/abc или https://yourdomain.com/abc)
  • long_url - адрес назначения
  • tags, archived, created_at
  • link_clicks (общее количество за все время) - единственная история кликов, которую вы получите из Bitly

Отфильтруйте архивные ссылки, если у вас нет веских причин их хранить. Большинство команд обнаруживают, что 30–50% их инвентаря - это мусор: старые кампании, разовые шаринги - и миграция - лучшее время, чтобы избавиться от лишнего.

Шаг 2: Предварительная подготовка на Elido#

Прежде чем трогать DNS, зарезервируйте каждую ссылку на Elido под тем же пользовательским доменом и с тем же слагом.

Для больших объемов используйте links.bulkCreate вместо создания по одной ссылке. Вам понадобится ID вашего воркспейса Elido и числовой ID домена (найдите домен с помощью workspaceDomains.list(workspaceId)):

import { ElidoApi } from "@elido/sdk";

const api = new ElidoApi({ apiKey: process.env.ELIDO_API_KEY! });

// Resolve your custom domain's numeric ID once, before the import loop
const { items: domains } = await api.workspaceDomains.list(WORKSPACE_ID);
const domain = domains.find((d) => d.hostname === "links.yourbrand.com");
if (!domain) throw new Error("Domain not registered in workspace");

// Batch the JSONL into chunks of 100 (the bulk endpoint maximum)
async function migrateChunk(rows: BitlyRow[]) {
  return api.links.bulkCreate(
    WORKSPACE_ID,
    {
      domain_id: domain.id,
      links: rows.map((row) => ({
        slug: row.slug,
        destination_url: row.long_url,
        tags: [
          ...row.tags,
          `bitly-migrated`, // tag for filtering in analytics
        ],
        title: row.title ?? undefined,
      })),
    },
    { idempotencyKey: `mig-batch-${rows[0].slug}` },
  );
}

Эндпоинт links.bulkCreate (POST /v1/workspaces/{workspace_id}/links/bulk) принимает до 100 ссылок за вызов и возвращает статус успеха/ошибки для каждого элемента, поэтому частичный сбой не прерывает всю пачку. Для импорта по одной ссылке links.create(workspaceId, input, { idempotencyKey }) принимает те же поля domain_id / slug / destination_url / tags и опциональный ключ идемпотентности, чтобы прерванный скрипт мог безопасно возобновить работу.

Несколько вещей, которые нужно знать перед запуском скрипта:

  • Сначала регистрация домена. Параметр domain_id в теле запроса должен ссылаться на домен, уже зарегистрированный в вашем воркспейсе. Зарегистрируйте и подтвердите домен через интерфейс пользовательских доменов перед началом импорта. Домен не обязательно должен быть активным - вы можете зарегистрировать его в Elido до переключения DNS.
  • Лимиты тарифа. Elido применяет лимиты на количество ссылок на уровне воркспейса в зависимости от тарифа. Для предварительной подготовки 100 тысяч ссылок требуется тариф Business.
  • Ограничения частоты запросов (Rate limits). На массовое создание распространяются те же лимиты воркспейса, что и на создание отдельных ссылок. Миграция 50 тысяч ссылок занимает примерно 10 минут, если вы отправляете их пачками по 100 штук с умеренным параллелизмом. Выполняйте скрипт последовательно или с небольшим количеством одновременных запросов из одного источника, чтобы лог аудита выглядел чисто.

Шаг 3: Перенаправление пользовательского домена#

Это момент переключения. Все до этого момента обратимо; все после - уже в прямом эфире.

Снизьте TTL для существующей CNAME-записи Bitly как минимум за 24 часа до окна переключения:

links.yourbrand.com.  300  IN  CNAME  cname.bitly.com.

Если ваш TTL годами составлял 86400, «снижение TTL» - это 24 часа ожидания, а не пятиминутная задача. Планируйте заранее.

График переключения DNS: снизьте TTL CNAME за 24 часа, замените цель на edge.elido.me в окне изменений, первый запрос инициирует выпуск сертификата Let's Encrypt, затем кэшированные запросы обслуживаются с edge-узла за считанные миллисекунды

Когда откроется окно изменений, замените цель:

links.yourbrand.com.  300  IN  CNAME  edge.elido.me.

Edge-узлы Elido используют автоматический TLS по запросу. Первый запрос после распространения DNS инициирует выпуск сертификата Let's Encrypt - обычно это добавляет 1–3 секунды задержки для этого единственного запроса, затем сертификат кэшируется, и последующие запросы обслуживаются из edge-узла в регионе ЕС за считанные миллисекунды. Сертификат выпускается автоматически; ручной шаг запроса сертификата отсутствует.

Проверьте результат с помощью dig из нескольких сетей перед тем, как объявить переключение завершенным. Распространение DNS происходит неравномерно; проверка только со своего ноутбука означает проверку только через один резолвер.

Шаг 4: Сверка истории кликов#

Bitly не экспортирует сырые события кликов. Не планируйте время на «импорт истории» - это невозможно, и любой инструмент, который это обещает, просто считывает агрегаты и называет их событиями.

Что вы получаете, так это счетчик link_clicks для каждой ссылки из экспорта API Bitly. Сохраните его там, где вы сможете объединить его с вашим инвентарем ссылок в Elido - отдельный столбец в наборе данных Metabase или тег, если вы хотите видеть его в интерфейсе. Elido начинает отсчет с нуля после переключения.

Сверка истории кликов: Bitly экспортирует только общий счетчик кликов для каждой ссылки, Elido считает с нуля с момента переключения, а слой отчетности суммирует оба числа для получения истинного итога по каждой ссылке

Для уровня отчетности формула такова: total_clicks = elido_clicks + bitly_lifetime_clicks. API аналитики предоставляет данные о кликах Elido по адресу /v1/analytics/workspaces/{workspace_id}/timeseries; запрос Metabase или Hex из 20 строк соединит эти два числа, если вы сохранили базу из Bitly.

Если вам нужна детальная историческая аналитика - распределение по географии по месяцам, тренды рефереров - она не вернется. Начинайте собирать данные заново, используя лог сырых событий Elido; миграция - это жесткая граница.

Пять ловушек, которые проявляются на второй неделе#

1. Жестко закодированные ссылки bit.ly в статических ресурсах. PDF-файлы, печатные материалы, фрагменты кода в приветственных письмах. Они указывают на домен Bitly, а не на ваш собственный. Они будут работать до тех пор, пока вы сохраняете аккаунт Bitly; они сломаются в тот момент, когда вы его удалите. Либо сохраните бесплатный аккаунт Bitly как «кладбище редиректов», либо смиритесь с потерей и не удаляйте его как минимум год.

2. Двойной редирект CDN. Если ваш домен работает через Cloudflare в режиме прокси (оранжевое облако), рукопожатие SSL с Elido может конфликтовать с Universal SSL от Cloudflare. Установите режим SSL в Cloudflare на «Full (Strict)» и удалите любые Page Rules, которые ссылались на старую цель Bitly. Или временно отключите проксирование (grey-cloud) для записи на время окна переключения.

3. Усечение UTM в экспорте. Bitly иногда показывает сокращенный URL назначения в панели управления, но хранит полный канонический URL. В экспорте CSV обычно содержится полный URL; в представлении дашборда - нет. Если вы будете собирать данные с дашборда вместо вызова API, вы потеряете UTM-метки. Всегда используйте API.

4. Лимиты API Bitly на чтение. API Bitly агрессивно ограничивает частоту запросов GET /bitlinks для аккаунтов с большим объемом данных. Последовательное чтение 1 миллиона ссылок может занять несколько дней. Выполняйте пагинацию параллельно (4–8 одновременных процессов), но следите за ошибками 429; делайте паузу, если они возникают.

5. Разница между уровнем аккаунта и уровнем группы в Bitly. Группы Bitly - это не воркспейсы. Один аккаунт Bitly может владеть несколькими группами, каждая из которых имеет свою конфигурацию пользовательского домена. Если ваша команда за эти годы добавляла домены в разные группы, экспорт должен перебирать все группы, а не только дефолтную. Пропустите группу - и этот домен не мигрирует.

Комплаенс: почему большинство команд на самом деле переезжают#

Миграция обычно продиктована требованиями соответствия, а не функциональностью. Сценарий следующий:

  • DPO помечает Bitly как американского субпроцессора; опора на Data Privacy Framework вызывает возражения при аудите.
  • Отдел закупок запрашивает список субпроцессоров; у Bitly он насчитывает более 20 вендоров.
  • BAA на тарифе Premium ($300/мес при ежемесячной оплате или $199/мес при годовом контракте по состоянию на май 2026 года - проверьте текущие цены) становится требованием для клиентов, связанных со здравоохранением, и переход на новый уровень становится триггером.

Elido по умолчанию хостится в ЕС - события кликов проходят через регион ЕС, при этом восток США и Азиатско-Тихоокеанский регион доступны как опциональные регионы в тарифе Business+. Список субпроцессоров состоит из пяти вендоров и опубликован по адресу /legal/subprocessors. Сертификат ISO 27001 актуален; SOC 2 Type II находится в процессе аудита. BAA доступно на тарифе Business+. Schrems II не является проблемой при конфигурации по умолчанию, поскольку данные не покидают EEA, если воркспейс явно не привязан к региону за пределами ЕС.

Если драйвером является комплаенс, план миграции должен включать сравнительную диаграмму потоков данных: где события кликов жили раньше, а где они живут сейчас. Именно эта диаграмма понадобится вашему аудитору при следующей проверке.

Self-host как альтернатива#

Для команд, чья политика безопасности исключает использование любого SaaS-сервиса сокращения ссылок - финансовые услуги, государственные органы, здравоохранение - Elido предлагает Helm-чарт под лицензией Apache 2.0. Те же бинарные файлы, что работают в нашем регионе ЕС, развертываются в вашем VPC, со своим KMS для шифрования и без сторонних субпроцессоров. Миграция выглядит идентично, за исключением шага 3 (DNS), где вы указываете на ингресс вашего кластера вместо edge.elido.me.

Инструкция по self-host установке охватывает установку через Helm, настройку секретов и подключение уровня аутентификации; закладывайте полдня на развертывание с нуля в существующем кластере k8s.

Рабочий процесс разработчика после миграции#

После перехода на Elido API становится основным интерфейсом для любой команды, создающей более нескольких ссылок в неделю. Спецификация OpenAPI 3.1 находится в разделе /help; пакет @elido/sdk поддерживает API на TypeScript, а SDK для Go доступен в packages/sdk-go.

Для рабочих процессов на базе агентов сервер MCP с открытым исходным кодом подключает Elido к Claude, Cursor или любому клиенту с поддержкой MCP:

{
  "mcpServers": {
    "elido": {
      "command": "npx",
      "args": ["-y", "@elido/mcp-server"],
      "env": { "ELIDO_API_KEY": "elido_pk_..." }
    }
  }
}

По умолчанию доступ только для чтения - агенты могут запрашивать аналитику и искать ссылки без права записи. Предоставление прав на запись - это осознанная настройка для каждого воркспейса.

Финальный чеклист перед переключением#

  • Токен API Bitly имеет доступ ко всем группам, а не только к дефолтной
  • Инвентарь экспортирован в формате JSONL, архивные ссылки отфильтрованы, количество перепроверено по панели управления Bitly
  • Все слаги предварительно созданы в Elido под правильным пользовательским доменом; скрипт вернул 100% успех при тестовом запуске
  • Пользовательский домен зарегистрирован и верифицирован в воркспейсе Elido до внесения изменений в DNS
  • TTL DNS для существующей CNAME-записи Bitly снижен до 300 секунд как минимум за 24 часа до переключения
  • Режим прокси Cloudflare и настройки SSL проверены на совместимость с edge-узлом Elido
  • Общее количество кликов в Bitly зафиксировано в час переключения и сохранено для отчетности
  • Хотя бы одна тестовая ссылка распечатана и отсканирована для подтверждения работоспособности всей цепочки
  • Аккаунт Bitly запланирован к сохранению в течение 90 дней после переключения как страховка для жестко закодированных ссылок bit.ly

Если все сделано правильно, изменения будут невидимы для пользователей. Если ошибиться - вы потратите две недели на ответы на вопросы «почему bit.ly не работает?» от людей, которые не понимают, что это не их вина.

Техническая работа проста. Дисциплина заключается в подготовке.

Связанные статьи в блоге#

Попробуйте Elido

Вставьте URL - получите короткую ссылку

Без регистрации. Ссылка живёт 30 дней. Зарегистрируйтесь, чтобы оставить её навсегда.

Бесплатно, без регистрации · 2 в день

Попробуйте Elido

URL-сокращатель с хостингом в ЕС: собственные домены, глубокая аналитика, открытый API. Бесплатный тариф - без банковской карты.

Теги
bitly migration
link infrastructure
custom domains
url shortener

Читать дальше