Миграция инфраструктуры ссылок - дело ответственное. Каждая короткая ссылка, которую вы когда-либо печатали, вставляли в футер письма или превращали в QR-код, теперь является зависимостью. Ошибитесь - и вы получите 404 для значительной части входящего трафика на несколько недель, прежде чем кто-то это заметит.
Это руководство посвящено переходу с Bitly на Elido. Мы предполагаем, что вы уже решили переехать - обычно ради хранения данных в ЕС, чистого бесплатного тарифа, white-label перепродажи или доступа к API, который не требует тарифа Premium ($199/мес при оплате за год или $300/мес ежемесячно по состоянию на май 2026 года). Если вы еще на этапе оценки, страница сравнения /compare/vs-bitly будет лучшей отправной точкой.
Что именно нужно перенести#
Переносятся три вещи; остальное на техническом уровне не имеет значения.
- Активные короткие ссылки. Слаг, адрес назначения, опциональные теги и папки, а также пользовательский домен (если есть).
- DNS пользовательского домена. Запись CNAME, указывающая на edge-узлы Bitly, должна указывать на Elido.
- История кликов. Агрегированные счетчики Bitly - не сырые события (их нельзя экспортировать).
Все остальное - дашборды Bitly Sights, брендированные QR-коды, конфигурации диплинков - настраивается на Elido с нуля, а не мигрирует. Не пытайтесь их переносить; перестройте один раз на новом стеке.
Шаг 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_atlink_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 часа ожидания, а не пятиминутная задача. Планируйте заранее.
Когда откроется окно изменений, замените цель:
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 начинает отсчет с нуля после переключения.
Для уровня отчетности формула такова: 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 в день