- Создай свой URL-сократитель за день — без кода, без серверов, на Firebase
- Почему именно Firebase?
- Что тебе понадобится
- Пошагово: как собрать свой URL-сократитель
- Подключи свой домен
- Что можно улучшить — и что делать, если ты не новичок
- Частые ошибки — и как их избежать
- Когда это подходит — а когда нет
- Как лучше сделать — практические рекомендации
- Что делать дальше
Создай свой URL-сократитель за день — без кода, без серверов, на Firebase
Ты хочешь сокращать ссылки — но не хочешь платить за Bit.ly или TinyURL. Или тебе нужно, чтобы ссылки вели на твой домен, а не на чужой. Или ты хочешь видеть, кто кликает, и иметь полный контроль. Хочешь — и не хочешь разбираться в Node.js, Docker и nginx. Я знаю, как это сделать: за пару часов, без серверов, без деплоя, с бесплатным хостингом и автоматическим масштабированием — на Firebase.
Это не теория. Я сделал это сам — для своего стартапа, потом для клиента, потом для личного блога. С тех пор ни разу не возвращался к другим сервисам. Firebase — это не просто «облако». Это набор инструментов, которые работают вместе как конвейер: хранение, функции, домены, аутентификация. И для URL-сократителя — идеально.
Почему именно Firebase?
Потому что ты не управляешь сервером. Ты не настраиваешь Nginx. Ты не думаешь о том, как перезагрузить процесс, когда он упал. Firebase берёт всё это на себя. Ты пишешь одну функцию — и она работает на миллионах запросов. Бесплатно до определённого лимита. И да — ты можешь использовать свой домен: go.yourdomain.com.
Сравни с альтернативами:
| Вариант | Сложность | Стоимость | Контроль | Масштабируемость | Свой домен |
|---|---|---|---|---|---|
| Bit.ly / TinyURL | Нет | Бесплатно (ограниченно) | Нет | Они решают | Только в платных тарифах |
| Свой сервер (Node.js + Nginx) | Высокая | От $5/мес | Полный | Ты сам | Да |
| Firebase Hosting + Functions | Низкая | Бесплатно до 2M вызовов/мес | Полный | Автоматически | Да |
Если ты хочешь контролировать всё — но не хочешь тратить время на инфраструктуру — Firebase единственный разумный выбор.
Что тебе понадобится
- Аккаунт Google (да, он нужен — Firebase от Google)
- Домен (можно купить за $10/год на Namecheap, Reg.ru, или использовать бесплатный поддомен от Firebase)
- Немного времени — 1–2 часа
- Навыки копирования и вставки кода (ничего сложнее не потребуется)
Не нужно знать JavaScript глубоко. Ты будешь копировать готовый код. Главное — следовать шагам.
Пошагово: как собрать свой URL-сократитель
- Зарегистрируйся в Firebase
Перейди на firebase.google.com → нажми «Перейти к консоли» → создай новый проект. Назови его, например, myurlshortener. Не вводи ничего лишнего — просто создай. - Включи Firestore
В левом меню выбери «Firestore Database» → «Создать базу данных». Выбери режим «Тестовый» (он временный, но хватит для старта). Разреши доступ для всех — пока. Позже мы его ограничим. Нажми «Готово». - Настрой Firebase Hosting
Установи Firebase CLI — это нужно только один раз. Открой терминал и введи:npm install -g firebase-tools
Затем зайди в свой проект и авторизуйся:
firebase login
Создай папку для проекта:
mkdir url-shortener && cd url-shortener
Инициализируй проект:
firebase init
Выбери: Hosting и Functions. Для Hosting выбери public как директорию. Для Functions — JavaScript. Не трогай другие настройки.
- Создай файл для функции сокращения
В папкеfunctionsоткрой файлindex.js. Замени его содержимое на:const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); const db = admin.firestore(); exports.createShortUrl = functions.https.onRequest(async (req, res) => { if (req.method !== 'POST') { return res.status(405).send('Method not allowed'); } const { longUrl } = req.body; if (!longUrl || !longUrl.startsWith('http')) { return res.status(400).send('Invalid URL'); } const shortCode = Math.random().toString(36).substring(2, 8); await db.collection('urls').doc(shortCode).set({ longUrl, createdAt: new Date(), clicks: 0 }); res.json({ shortCode }); });Это создаст короткий код (например,
a7b9c2) и запишет его в базу. - Создай файл для перенаправления
В той же папкеfunctionsдобавь ещё одну функцию:exports.redirectUrl = functions.https.onRequest(async (req, res) => { const shortCode = req.params.shortCode; if (!shortCode) { return res.status(404).send('Not found'); } const doc = await db.collection('urls').doc(shortCode).get(); if (!doc.exists) { return res.status(404).send('Short URL not found'); } const data = doc.data(); await db.collection('urls').doc(shortCode).update({ clicks: data.clicks + 1 }); res.redirect(301, data.longUrl); });Эта функция будет перенаправлять с
go.yourdomain.com/a7b9c2на настоящую ссылку и считать клики. - Настрой маршруты в Firebase Hosting
Открой файлfirebase.jsonв корне проекта. Замени его содержимое на:{ "hosting": { "public": "public", "rewrites": [ { "source": "/{shortCode}", "function": "redirectUrl" }, { "source": "", "destination": "/index.html" } ] }, "functions": { "source": "functions" } }Это говорит Firebase: «Если кто-то перейдёт по
go.yourdomain.com/abc123— вызови функциюredirectUrl». - Создай простую страницу для создания ссылок
В папкеpublicсоздай файлindex.html:<!DOCTYPE html> <html> <head> <title>Мой URL-сократитель</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { font-family: sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; } input, button { width: 100%; padding: 12px; margin: 10px 0; } button { background: #007bff; color: white; border: none; cursor: pointer; } .result { margin-top: 20px; padding: 15px; background: #f8f9fa; } </style> </head> <body> <h1>Сократи свою ссылку</h1> <input type="url" id="longUrl" placeholder="Вставь длинную ссылку..."> <button onclick="createShort()">Сократить</button> <div id="result" class="result" style="display: none;"></div> <script> async function createShort() { const url = document.getElementById('longUrl').value; if (!url) return alert('Введите ссылку'); const response = await fetch('https://your-region-yourproject.cloudfunctions.net/createShortUrl', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ longUrl: url }) }); const data = await response.json(); const shortUrl = `https://go.yourdomain.com/${data.shortCode}`; document.getElementById('result').innerHTML = '<strong>Сокращённая ссылка:</strong> <a href="' + shortUrl + '" target="_blank">' + shortUrl + '</a>'; document.getElementById('result').style.display = 'block'; } </script> </body> </html>Замени
your-region-yourprojectна имя твоей функции (оно появится в Firebase Console после деплоя) иgo.yourdomain.comна свой домен. - Запусти всё
В терминале, в папке проекта:firebase deploy
Это займёт 30–60 секунд. После завершения ты увидишь два URL: один для Hosting (твой сайт), другой — для функций.
Подключи свой домен
Теперь ты хочешь, чтобы ссылки выглядели как go.yourdomain.com/abc123, а не как yourproject.web.app/abc123.
В Firebase Console перейди в «Hosting» → «Подключить домен». Введи свой домен (например, go.yourdomain.com). Firebase сгенерирует DNS-записи — скопируй их и вставь в панель управления твоего регистратора домена (Namecheap, Reg.ru, и т.д.). Обычно это 2–4 записи типа A и CNAME. Подожди 1–24 часа — DNS обновляется.
Когда домен подключится — твой сайт и сокращатели будут работать на твоём домене. Без рекламы, без ограничений, без «Powered by».
Что можно улучшить — и что делать, если ты не новичок
Если ты уже немного знаком с кодом — вот как сделать лучше:
- Ограничить доступ — вместо «разрешить всем» в Firestore, настрой правила доступа:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /urls/{shortCode} { allow read: if true; allow write: if request.auth != null; } } }Теперь только авторизованные пользователи могут создавать ссылки — можно добавить вход через Google.
- Добавить аналитику — в Firebase Analytics можно отслеживать, какие ссылки кликают чаще. Или просто вывести статистику на отдельной странице.
- Сделать кастомные коды — вместо случайных
a7b9c2— позволить пользователю ввести свой код:go.yourdomain.com/myoffer. Нужно проверить, не занят ли он — и если нет — записать. - Добавить экспирацию — автоматически удалять ссылки, которые не кликали 6 месяцев. Добавь поле
expiresAtи фоновую функцию, которая раз в сутки чистит старые записи.
Частые ошибки — и как их избежать
- Забыл подключить домен — функция работает, но ссылки ведут на
yourproject.web.app. Решение: не пропускай шаг с DNS. - Неправильно указал регион функции — в коде на странице ты указал
your-region-yourproject.cloudfunctions.net, но регион не совпадает с тем, где ты развернул функцию. Проверь в Firebase Console — там написано точное имя. - Firestore в режиме «тестовый» — и всё сломалось — когда ты захочешь добавить аутентификацию, «тестовый» режим перестанет работать. Решение: сразу перейди в «продакшн» режим, если планируешь использовать это долго. Правила безопасности — не опциональны.
- Не проверил, что URL начинается с http — если пользователь введёт
google.comбезhttp://, функция упадёт. В коде выше это учтено — но если ты меняешь его — не забудь проверить. - Забыл про CORS — если ты делаешь запрос с сайта, а не с локального сервера, браузер может заблокировать запрос. В функции
createShortUrlдобавь заголовки:res.set('Access-Control-Allow-Origin', '*');Перед
res.json().
Когда это подходит — а когда нет
Если твоя ситуация:
- Ты хочешь сокращать ссылки для соцсетей, email-рассылок, QR-кодов — и хочешь, чтобы они были на твоём домене — идеально. Firebase — твой выбор.
- Ты запускаешь стартап и хочешь, чтобы ссылки выглядели профессионально — да. Это дешевле, чем аренда сервера, и надёжнее, чем Bit.ly.
- Ты ведёшь блог и хочешь отслеживать, какие материалы кликают чаще — отлично. Ты можешь добавить метки в коды:
go.yourdomain.com/blog1,go.yourdomain.com/newsletter— и видеть статистику. - Ты хочешь сокращать миллионы ссылок в день — Firebase бесплатный лимит — 2 млн вызовов функций в месяц. Если ты превысишь — платишь $0.40 за 1 млн вызовов. Это дешевле, чем любой хостинг. Но если ты планируешь 100 млн кликов — подумай о AWS или Google Cloud.
- Тебе нужна сложная аналитика: геолокация, устройства, UTM-метки — Firebase не справляется. Используй Bit.ly Pro или специализированные сервисы вроде Rebrandly.
Как лучше сделать — практические рекомендации
- Сразу используй свой домен — даже если он бесплатный поддомен от Firebase (
yourname.web.app). Это не так важно, как контроль. - Делай короткие коды длиной 6–8 символов — это баланс между уникальностью и удобством. Меньше — больше коллизий. Больше — неудобно вводить вручную.
- Сделай простую страницу с кнопкой «Сократить» — пользователь не должен лезть в DevTools, чтобы получить ссылку.
- Добавь копирование в буфер — когда ссылка сгенерирована, добавь кнопку «Копировать» рядом с ней. Это повысит конверсию.
- Запусти функцию «очистки старых ссылок» — через 6 месяцев. Это сэкономит место в базе и уменьшит риск утечки данных.
- Не забудь включить HTTPS — Firebase делает это автоматически. Но проверь, что все ссылки ведут на
https://, а неhttp://.
Что делать дальше
Ты уже сделал всё. Теперь:
- Проверь, что
https://go.yourdomain.com/abc123ведёт на нужную ссылку. - Проверь, что статистика кликов растёт — открой Firestore в Firebase Console, найди запись с кодом
abc123— полеclicksдолжно увеличиваться. - Отправь ссылку другу — попроси кликнуть.
- После этого — используй её в email-рассылке, в твиттере, в QR-коде на визитке.
Ты больше не зависишь от сторонних сервисов. У тебя есть свой инструмент. Он работает. Он бесплатный. Он масштабируется. И ты его сделал сам — без команды разработчиков.
Если через полгода ты захочешь добавить логин, аналитику, экспирацию — ты уже знаешь, где искать. Firebase — это не «инструмент для стартапов». Это инструмент для тех, кто хочет делать быстро, надёжно и без лишней головной боли.
Информация в этой статье носит ознакомительный характер. При использовании собственного URL-сократителя убедись, что он не используется для распространения вредоносных ссылок, спама или обхода ограничений. Ответственность за содержание сокращённых ссылок несёт владелец домена.
