7 хв читанняТуторіали

Масовий скорочувач URL: імпорт посилань з Google Sheets

Скорочуйте до 100 посилань за партію з Google Sheets: вставка або CSV у дашборді, чи bulk API з Apps Script.

Ana Kowalska
Marketing solutions engineering

Масовий імпорт Elido створює до 100 коротких посилань за партію зі списку рядків url, slug, title. Ви можете вставити рядки з Google Sheets у дашборд, завантажити їх як CSV або викликати bulk API з Apps Script. UTM-теги - не окрема колонка імпорту: ви збираєте остаточний URL із тегами в таблиці, а Elido зберігає його як призначення.

Це вужче, ніж обіцяють деякі посібники (зокрема попередня версія цього), тому ця стаття тримається того, що код робить сьогодні. Якщо ви прийшли по режим dry run, прапорці пропуску при конфлікті чи завантаження на 10 000 рядків - їх ще немає; вони відстежуються як заплановані роботи і так позначені нижче.

Ширшу картину UTM дивіться в ключовій статті про відстеження UTM: там шаблони і серверна передача конверсій. Ця стаття - зріз «від таблиці до коротких посилань».

Коротко

  • Одна таблиця на кампанію. Колонки: final_url (зібрана формулою, з UTM), slug, title.
  • Шлях через дашборд: New link, потім вкладка Bulk (вставка) або CSV (завантаження). Обидві приймають 100 посилань за партію.
  • Шлях через API: POST /v1/links/bulk з JSON-тілом до 100 елементів. Елементи приймають destination_url, slug, title, tags.
  • Кожен рядок успішний чи провальний сам по собі. Зайнятий slug провалює лише свій рядок.
  • Dry run поки немає (заплановано). Натомість перевірте кілька рядків після першої партії.
Діалог 'Імпорт посилань' в Elido на вкладці CSV, де завантажується експорт із таблиці, щоб створити до 100 коротких посилань за одну партію

Зберіть таблицю

Elido читає три речі на посилання: призначення, slug, title. Тримайте робочі колонки ліворуч, а одну вихідну - праворуч.

КолонкаВикористовує ElidoПримітки
base_urlніЧистий URL цільової сторінки
utm_source, utm_medium, utm_campaignніВхідні дані формули, лише для таблиці
final_urlтак (призначення)Збирається формулою, див. нижче
slugтак (необов'язково)Порожній - Elido згенерує свій
titleтак (необов'язково)Мітка у списку посилань у дашборді
short_linkніЗаповнюється після імпорту

Формула final_url виконує UTM-роботу, якої Elido не робить:

=TRIM(A2) & IF(ISNUMBER(FIND("?", A2)), "&", "?")
  & "utm_source=" & ENCODEURL(B2)
  & "&utm_medium=" & ENCODEURL(C2)
  & "&utm_campaign=" & ENCODEURL(D2)

У цього підходу є побічна перевага: призначення, яке ви переглядаєте, і є тим, що виходить у світ. Нічого не переписується постфактум, а призначення, яке вже містить ?, доповнюється через &, а не ламається.

Власна настанова Google - завжди задавати utm_source, utm_medium і utm_campaign, коли ви розмічаєте URL; без них звіт показує «(not set)» (довідка Google Analytics, дата звернення 2026-10-09). Додайте колонку-перевірку, наприклад =IF(OR(B2="",C2="",D2=""),"missing UTM","ok"), і відфільтруйте за нею перед експортом. Це замінює попередження dry run, які дають інші інструменти.

Шлях 1: вставка в дашборд (вкладка Bulk)

Відкрийте New link і перейдіть на Bulk. Текстове поле приймає одне посилання на рядок:

https://shop.example/de?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring, q2-hero-de, Hero DE
https://shop.example/fr?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring, q2-hero-fr, Hero FR

Парсер ділить кожен рядок за комами: перша частина - URL, друга - slug, усе після - title. Порожні рядки та рядки, що починаються з #, ігноруються. Для таблиць з цього випливають два наслідки:

  • Коми всередині URL призначення ламають рядок. Якщо значення UTM містить кому, закодуйте її як %2C (ENCODEURL у формулі вище вже це робить).
  • Вставка з Sheets дає комірки, розділені табуляцією, а не комами. Зберіть по одному рядку, з'єднаному комами, на кожен рядок таблиці в допоміжній колонці, наприклад =E2 & ", " & F2 & ", " & G2, і скопіюйте цю одну колонку.

Після імпорту діалог показує кількість створених і кількість невдалих, а кожен невдалий рядок з причиною розгортається нижче.

Список посилань у дашборді Elido з створеними короткими посиланнями та їхніми призначеннями після масового імпорту

Шлях 2: завантаження CSV (вкладка CSV)

Завантажте таблицю як CSV (File, Download, Comma-separated values) з колонками в порядку url, slug, title і додайте її на вкладці CSV. Файл читається у вашому браузері й надсилається тією ж партією з 100 посилань, що й вкладка вставки. Якщо перший рядок не починається з http, він вважається заголовком і відкидається.

Читач CSV - це проста розбивка за комами, а не повноцінний CSV-парсер. Поля в лапках, що містять коми, не розуміються, тож тримайте title без ком, інакше його буде обрізано. Якщо потрібно більше 100 рядків, розбийте файл на частини по 100.

Якщо бриф живе в Excel, як скоротити URL в Excel описує тамтешні шляхи.

Шлях 3: API з Apps Script

Для таблиці, що наповнюється весь тиждень, викликайте API. Ендпоінт - POST https://api.elido.app/v1/links/bulk. Токен - це персональний токен доступу або API-ключ робочого простору, що надсилається як Authorization: Bearer ..., а ключ, прив'язаний до робочого простору, дозволяє виклику опускати workspace_id і domain_id (використовується типовий домен робочого простору). Автентифікація описана в документації API в розділі Authentication.

curl -X POST https://api.elido.app/v1/links/bulk \
  -H "Authorization: Bearer $ELIDO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "links": [
      { "destination_url": "https://shop.example/de?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring",
        "slug": "q2-hero-de", "title": "Hero DE", "tags": ["q2-spring", "email"] }
    ]
  }'

Відповідь повідомляє ok, failed і масив items з одним записом на кожен вхідний рядок, по порядку, кожен позначений ok або error. Зайнятий slug повертає slug already exists for this domain лише для цього рядка. Заголовок Idempotency-Key діє 24 години: той самий ключ із тим самим тілом відтворює початкову відповідь замість того, щоб створювати посилання вдруге (див. Idempotency у документації API).

Кожне створене посилання також ставиться в чергу на асинхронне сканування безпеки, тож масовий імпорт не чекає на сканер.

// Google Apps Script: send new sheet rows to Elido's bulk endpoint.
// Trigger: time-driven, hourly. Batches of 100 (the API maximum).
function importNewLinks() {
  const sheet =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Q2 Spring");
  const data = sheet.getDataRange().getValues();
  const h = data[0];
  const urlCol = h.indexOf("final_url");
  const slugCol = h.indexOf("slug");
  const titleCol = h.indexOf("title");
  const doneCol = h.indexOf("short_link");

  const pending = [];
  for (let i = 1; i < data.length && pending.length < 100; i++) {
    if (data[i][urlCol] && !data[i][doneCol]) pending.push(i);
  }
  if (!pending.length) return;

  const links = pending.map((i) => ({
    destination_url: data[i][urlCol],
    slug: data[i][slugCol] || undefined,
    title: data[i][titleCol] || undefined,
  }));

  const resp = UrlFetchApp.fetch("https://api.elido.app/v1/links/bulk", {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization:
        "Bearer " +
        PropertiesService.getScriptProperties().getProperty("ELIDO_TOKEN"),
    },
    payload: JSON.stringify({ links }),
    muteHttpExceptions: true,
  });
  if (resp.getResponseCode() !== 200) {
    console.error(resp.getContentText());
    return;
  }

  JSON.parse(resp.getContentText()).items.forEach((item) => {
    const row = pending[item.index] + 1;
    const cell = sheet.getRange(row, doneCol + 1);
    cell.setValue(
      item.status === "ok" ? item.link.slug : "ERROR: " + item.error,
    );
  });
}

Примітки до скрипта:

  • Він записує назад slug (або текст помилки), а не повний URL. Додайте свій короткий домен у колонці з формулою, якщо хочете клікабельні посилання. Рядки з текстом помилки в short_link пропускаються під час наступного запуску, тож очистьте комірку після виправлення slug.
  • Тримайте токен у властивостях скрипта, а не в коді.
  • Ліміти Apps Script для споживчих акаунтів: 20 000 викликів URL Fetch на добу, 6 хвилин на виконання і 90 хвилин роботи тригерів на добу (акаунти Google Workspace: 100 000 викликів, 6 годин) (квоти Apps Script, дата звернення 2026-10-09). Щогодинне завдання, що надсилає 100 посилань за виклик, залишається далеко нижче цього.
  • Зверху діє ліміт частоти запитів API Elido, на токен і на робочий простір; див. Rate Limits у документації API.
Сторінка кампаній Elido, де посилання, імпортовані масово, згруповано за кампаніями

Slug і теги

Slug. Додавайте префікси до slug кампаній (q2-, jun26-), щоб вони не зіткнулися зі старішими посиланнями. Колізія повідомляється для кожного рядка окремо, а решта партії проходить, тож повторний запуск тієї самої таблиці повертає помилки для рядків, що вже існують, а не дублює їх. Порожній slug змушує Elido згенерувати свій.

Теги. Вкладки Bulk і CSV у дашборді не задають теги; API задає їх через масив tags. Теги - це прості рядки, тож конвенція dimension:value (channel:email) - лише звичка іменування, яку ви забезпечуєте в таблиці, наприклад через ="channel:"&C2. Про те, як кампанії групують кліки, дивіться функцію кампаній.

Чого ще не збудовано

Це було описано в попередній версії цієї статті, а в продукті сьогодні цього немає:

  • Dry-run попередній перегляд розв'язаних посилань і конфліктів перед підтвердженням. Заплановано.
  • Режими конфліктів (пропустити, провалити, замінити) для наявних slug. Заплановано; сьогодні зайнятий slug - це помилка окремого рядка.
  • UTM-колонки і UTM-шаблон робочого простору, що застосовується під час імпорту. Заплановано; користуйтеся формулою таблиці вище.
  • Більші партії (10 000 рядків) і асинхронне завантаження зі звітом про статус. Заплановано; ліміт - 100 на запит.
  • Прямі теги у вкладках імпорту в дашборді. Заплановано.

Поки dry run не з'явився, вибірково перевірте перший і останній рядки першої партії в дашборді, перш ніж публікувати посилання.

Куди йти далі

Спершу задайте типовий домен і брендинг за допомогою setup-branded-short-links. Для атрибуції після кліку серверне відстеження конверсій розповідає, як працює передача конверсій у Meta та GA4; сам Elido поки не передає їм покупки. Повний процес для маркетолога - на solutions/marketers та в функції кампаній.

Читайте також у блозі

Поширені запитання

Скільки посилань можна скоротити одночасно в Elido?

100 за партію, і у вкладках Bulk та CSV дашборда, і в API-виклику POST /links/bulk. Більші таблиці розбиваються на партії по 100. Кожен рядок обробляється окремо, тож один поганий рядок не провалює партію.

Які колонки читає масовий імпорт Elido?

У дашборді - один рядок на посилання в порядку url, slug, title. Slug і title необов'язкові. Через API кожен елемент приймає ще й масив tags. UTM-колонок немає: спершу зберіть URL із тегами в таблиці.

Чи є в Elido пробний прогін (dry run) для масового імпорту?

Ні. Режиму попереднього перегляду сьогодні немає, як і опції пропустити чи замінити slug, які вже існують. Зайнятий slug повертається як помилка лише для цього рядка. У беклозі це заплановано.

Що буде, якщо slug уже існує?

Цей рядок повертає статус error з повідомленням slug already exists for this domain, а всі інші рядки все одно створюються. Виправте slug і імпортуйте лише ті рядки, що не пройшли.

Чи може Apps Script викликати bulk API за розкладом?

Так. Тригер за часом може читати рядки без короткого посилання, відправляти їх POST-запитом на bulk-ендпоінт через UrlFetchApp і записувати slug назад. Квота Google - 20 000 викликів URL Fetch на добу для споживчого акаунта, набагато більше, ніж потрібно для щогодинних партій по 100.

Де розміщувати UTM-параметри: у таблиці чи в скорочувачі?

У таблиці. Масовий імпорт Elido зберігає призначення точно як задано, тож формула, що дописує utm_source, utm_medium і utm_campaign до кожного URL, дає призначення, які можна переглянути й перевірити ще до появи будь-якого посилання.

Спробуйте Elido

Вставте URL - отримайте коротке посилання

Без реєстрації. Посилання живе 30 днів. Зареєструйтесь, щоб зберегти назавжди.

Без реєстрації. Зареєструйтеся безкоштовно і отримайте 50 посилань на місяць.

Спробуйте Elido

URL-скорочувач із хостингом у ЄС: власні домени, глибока аналітика, відкритий API. Безкоштовний тариф - без кредитної картки.

Теги
bulk url shortener
csv import short links
sheets to short links
bulk link creation
campaign url shortener
google sheets automation

Читати далі