7 min czytaniaPoradniki

Masowy skracacz URL: import linków z Arkuszy Google

Skracaj do 100 linków na partię z Arkusza Google: wklejanie lub CSV w panelu albo API masowe z Apps Script. Realne limity i to, co import pomija.

Ana Kowalska
Marketing solutions engineering

Import masowy Elido tworzy do 100 krótkich linków na partię z listy wierszy url, slug, title. Możesz wkleić wiersze z Arkuszy Google do panelu, wgrać je jako CSV albo wywołać API masowe z Apps Script. Tagi UTM nie są osobną kolumną importu: końcowy otagowany adres budujesz w arkuszu, a Elido zapisuje go jako cel.

To węższy zakres, niż obiecują niektóre samouczki (w tym wcześniejsza wersja tego), więc ten wpis trzyma się tego, co kod robi dziś. Jeśli przyszedłeś po tryb dry run, flagi pomijania przy konflikcie albo wgrywanie 10 000 wierszy, tego jeszcze nie ma; są śledzone jako zaplanowane prace i poniżej tak oznaczone.

Szerszy obraz UTM znajdziesz w filarowym wpisie o śledzeniu UTM, który omawia szablony i przekazywanie konwersji po stronie serwera. Ten wpis to wycinek od arkusza do krótkich linków.

TL;DR

  • Jeden arkusz na kampanię. Kolumny: final_url (zbudowana formułą, z UTM), slug, title.
  • Ścieżka w panelu: New link, potem zakładka Bulk (wklejanie) albo CSV (wgrywanie). Obie przyjmują 100 linków na partię.
  • Ścieżka API: POST /v1/links/bulk z treścią JSON zawierającą do 100 elementów. Elementy przyjmują destination_url, slug, title, tags.
  • Każdy wiersz udaje się lub nie niezależnie. Zajęty slug psuje tylko ten wiersz.
  • Na razie bez dry run (zaplanowane). Zamiast tego sprawdź kilka wierszy po pierwszej partii.
Okno Importuj linki w Elido na karcie CSV, w którym przesyła się eksport z arkusza, aby jednorazowo utworzyć do 100 krótkich linków

Zbuduj arkusz

Elido czyta trzy rzeczy na link: cel, slug, tytuł. Trzymaj kolumny robocze po lewej, a jedną kolumnę wyjściową po prawej.

KolumnaUżywana przez ElidoUwagi
base_urlnieCzysty adres strony docelowej
utm_source, utm_medium, utm_campaignnieDane wejściowe formuły, tylko w arkuszu
final_urltak (cel)Zbudowana formułą, zobacz niżej
slugtak (opcjonalnie)Puste oznacza, że Elido wygeneruje slug
titletak (opcjonalnie)Etykieta widoczna na liście linków w panelu
short_linknieWypełniana po imporcie

Formuła final_url wykonuje pracę UTM, której Elido nie wykonuje:

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

Robienie tego w arkuszu ma skutek uboczny na plus: cel, który przeglądasz, jest celem, który trafia do produkcji. Nic nie jest przepisywane po fakcie, a cel, który już ma ?, jest rozszerzany o &, zamiast się psuć.

Wytyczne Google mówią, by zawsze ustawiać utm_source, utm_medium i utm_campaign przy tagowaniu adresu; bez nich raporty pokazują "(not set)" (pomoc Google Analytics, dostęp 2026-10-09). Dodaj kolumnę kontrolną, np. =IF(OR(B2="",C2="",D2=""),"missing UTM","ok"), i przefiltruj po niej przed eksportem. To zastępuje ostrzeżenie dry run, które dają inne narzędzia.

Ścieżka 1: wklejanie do panelu (zakładka Bulk)

Otwórz New link i przełącz na Bulk. Pole tekstowe przyjmuje jeden link na linię:

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

Parser dzieli każdą linię po przecinkach: pierwsza część to adres, druga to slug, wszystko dalej to tytuł. Puste linie i linie zaczynające się od # są ignorowane. Dla arkuszy ma to dwie konsekwencje:

  • Przecinki wewnątrz adresu docelowego psują wiersz. Jeśli wartość UTM zawiera przecinek, zakoduj go jako %2C (ENCODEURL w powyższej formule już to robi).
  • Wklejanie z Arkuszy daje komórki rozdzielone tabulatorami, a nie przecinkami. Zbuduj w kolumnie pomocniczej jedną linię połączoną przecinkami na wiersz, na przykład =E2 & ", " & F2 & ", " & G2, i skopiuj tę jedną kolumnę.

Po imporcie okno pokazuje liczbę utworzonych i liczbę nieudanych, a każda nieudana linia z powodem jest rozwijana poniżej.

Lista linków w panelu Elido pokazująca utworzone krótkie linki wraz z ich celami po imporcie masowym

Ścieżka 2: wgranie CSV (zakładka CSV)

Pobierz arkusz jako CSV (File, Download, Comma-separated values) z kolumnami w kolejności url, slug, title i wgraj go w zakładce CSV. Plik jest odczytywany w twojej przeglądarce i wysyłany tą samą partią po 100 linków co w zakładce wklejania. Jeśli pierwszy wiersz nie zaczyna się od http, jest traktowany jako nagłówek i pomijany.

Czytnik CSV to zwykły podział po przecinkach, a nie pełny parser CSV. Pola w cudzysłowie zawierające przecinki nie są rozumiane, więc trzymaj tytuły bez przecinków, inaczej tytuł zostanie obcięty. Jeśli potrzebujesz więcej niż 100 wierszy, podziel plik na kawałki po 100.

Jeśli brief żyje w Excelu, jak skracać adresy URL w Excelu opisuje tamtejsze drogi.

Ścieżka 3: API z Apps Script

Dla arkusza, który wypełnia się przez cały tydzień, wywołuj API. Punkt końcowy to POST https://api.elido.app/v1/links/bulk. Token to osobisty token dostępu albo klucz API przestrzeni roboczej wysyłany jako Authorization: Bearer ..., a klucz powiązany z przestrzenią roboczą pozwala wywołaniu pominąć workspace_id i domain_id (używana jest domyślna domena przestrzeni roboczej). Uwierzytelnianie opisano w dokumentacji API w sekcji 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"] }
    ]
  }'

Odpowiedź zawiera ok, failed i tablicę items z jednym wpisem na wiersz wejściowy, w kolejności, każdy oznaczony jako ok lub error. Slug, który jest już zajęty, zwraca slug already exists for this domain tylko w tym wierszu. Nagłówek Idempotency-Key jest respektowany przez 24 godziny: ten sam klucz z tą samą treścią odtwarza pierwotną odpowiedź zamiast tworzyć linki dwa razy (zobacz Idempotency w dokumentacji API).

Każdy utworzony link trafia też do kolejki asynchronicznego skanu bezpieczeństwa, więc import masowy nie czeka na skaner.

// 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,
    );
  });
}

Uwagi o skrypcie:

  • Zapisuje z powrotem slug (lub tekst błędu), a nie pełny adres. Dołącz swoją krótką domenę w kolumnie z formułą, jeśli chcesz mieć klikalne linki. Wiersze z tekstem błędu w short_link są pomijane przy następnym uruchomieniu, więc wyczyść komórkę po poprawieniu sluga.
  • Trzymaj token we właściwościach skryptu, a nie w kodzie.
  • Limity Apps Script dla kont konsumenckich to 20 000 wywołań URL Fetch dziennie, 6 minut na wykonanie i 90 minut czasu działania wyzwalaczy dziennie (konta Workspace: 100 000 wywołań, 6 godzin) (limity Apps Script, dostęp 2026-10-09). Cogodzinne zadanie wysyłające 100 linków na wywołanie pozostaje daleko poniżej.
  • Dodatkowo obowiązuje limit szybkości API Elido, na token i na przestrzeń roboczą; zobacz Rate Limits w dokumentacji API.
Strona kampanii Elido, na której linki zaimportowane masowo są pogrupowane według kampanii

Slugi i tagi

Slugi. Dodawaj prefiksy do slugów kampanii (q2-, jun26-), aby nie kolidowały ze starszymi linkami. Kolizja jest zgłaszana per wiersz, a reszta partii przechodzi, więc ponowne uruchomienie tego samego arkusza zwraca błędy dla wierszy, które już istnieją, zamiast je dublować. Puste pole sluga sprawia, że Elido wygeneruje go samo.

Tagi. Zakładki Bulk i CSV w panelu nie ustawiają tagów; API robi to przez tablicę tags. Tagi to zwykłe ciągi znaków, więc konwencja dimension:value (channel:email) to tylko nawyk nazewniczy, który egzekwujesz w arkuszu, na przykład przez ="channel:"&C2. O tym, jak kampanie grupują kliknięcia, przeczytasz w funkcji kampanii.

Czego jeszcze nie zbudowano

Te rzeczy opisano we wcześniejszej wersji tego wpisu i nie istnieją dziś w produkcie:

  • Podgląd dry run rozwiązanych linków i konfliktów przed zatwierdzeniem. Zaplanowane.
  • Tryby konfliktu (pomiń, przerwij, zastąp) dla istniejących slugów. Zaplanowane; dziś zajęty slug to błąd per wiersz.
  • Kolumny UTM i szablon UTM przestrzeni roboczej stosowany podczas importu. Zaplanowane; użyj formuły z arkusza podanej wyżej.
  • Większe partie (10 000 wierszy) i asynchroniczne wgrywanie z raportowaniem statusu. Zaplanowane; limit to 100 na żądanie.
  • Bezpośrednie tagi w zakładkach importu w panelu. Zaplanowane.

Dopóki dry run nie istnieje, sprawdź w panelu pierwszy i ostatni wiersz pierwszej partii, zanim opublikujesz linki.

Co dalej

Najpierw ustaw domyślną domenę i branding za pomocą setup-branded-short-links. Atrybucję po kliknięciu opisuje śledzenie konwersji po stronie serwera, które omawia, jak działa przekazywanie konwersji do Meta i GA4; samo Elido nie przekazuje jeszcze do nich zakupów. Cały proces marketera od początku do końca jest na solutions/marketers i w funkcji kampanii.

Powiązane na blogu

Najczęściej zadawane pytania

Ile linków mogę skrócić naraz w Elido?

100 na partię, zarówno w zakładkach Bulk i CSV w panelu, jak i w wywołaniu API POST /links/bulk. Większe arkusze dzieli się na partie po 100. Każdy wiersz jest przetwarzany osobno, więc jeden zły wiersz nie przerywa partii.

Jakie kolumny czyta masowy import Elido?

W panelu jedna linia na link w kolejności url, slug, title. Slug i title są opcjonalne. Przez API każdy element przyjmuje też tablicę tags. Nie ma kolumn UTM: najpierw zbuduj otagowany adres w arkuszu.

Czy Elido ma tryb próbny (dry run) dla importów masowych?

Nie. Dziś nie ma trybu podglądu ani opcji pominięcia lub zastąpienia dla slugów, które już istnieją. Zajęty slug wraca jako błąd tylko w tym wierszu. Jest to w backlogu jako zaplanowane.

Co się dzieje, gdy slug już istnieje?

Ten wiersz zwraca status error z komunikatem slug already exists for this domain, a każdy inny wiersz jest nadal tworzony. Popraw slug i zaimportuj ponownie tylko te wiersze, które się nie powiodły.

Czy Apps Script może wywoływać API masowe według harmonogramu?

Tak. Wyzwalacz czasowy może odczytać wiersze bez krótkiego linku, wysłać je POST-em do punktu końcowego masowego przez UrlFetchApp i zapisać slugi z powrotem. Limit Google to 20 000 wywołań URL Fetch dziennie na koncie konsumenckim, znacznie więcej, niż potrzebują cogodzinne partie po 100.

Czy parametry UTM powinny być w arkuszu, czy w skracaczu?

W arkuszu. Import masowy Elido zapisuje adres docelowy dokładnie tak, jak został podany, więc formuła dopisująca utm_source, utm_medium i utm_campaign do każdego adresu daje cele, które można przejrzeć i skontrolować, zanim powstanie jakikolwiek link.

Wypróbuj Elido

Wklej URL, otrzymaj krótki link

Bez rejestracji. Link działa 30 dni. Zarejestruj się, aby zachować go na zawsze.

Bez rejestracji. Załóż darmowe konto i korzystaj z 50 linków miesięcznie.

Wypróbuj Elido

Skracarka URL hostowana w UE: własne domeny, głęboka analityka i otwarte API. Darmowy plan - bez karty kredytowej.

Tagi
bulk url shortener
csv import short links
sheets to short links
bulk link creation
campaign url shortener
google sheets automation

Czytaj dalej