AlfaLinks
AlfaLinksЗареєструватися

Посібник з налаштування

Лічильник зворотних посилань для дашборду SaaS: покрокова інструкція

Для роботи лічильника потрібен один серверний маршрут і невеликий компонент. Цей посібник показує, як створити обидва, включаючи стани помилок, які часто забувають у перших версіях.

Майстер, що збирає п’ять механічних шестерень на дерев’яному верстаку, що символізує кроки налаштування дашборду
Обсяг цього посібника

Ми припускаємо наявність бекенду на Node або Python та будь-якого фреймворку для фронтенду. Кожен із наведених нижче запитів звертається до документації API, а базовий URL належить вашому бренду: alfalinks.net/api.php.

П’ять кроків у порядку, у якому ми б їх впровадили

01

1. Створіть ключ і збережіть його як секрет

Увійдіть через Google на /auth/google.php, скопіюйте ключ sk_ зі сторінки облікового запису та помістіть його в середовище вашого сервера. Фронтенд його не бачить.

02

2. Додайте один проксі-маршрут

Відкрийте доступ до чогось на кшталт /internal/links?domain=..., що валідує домен, надсилає запит до нашого API та повертає лише ті поля, які використовує ваш інтерфейс. Валідація важлива, оскільки користувачі можуть вводити будь-що.

03

3. Почніть з безкоштовної дії

Дія overview коштує нічого, тому перша версія лічильника взагалі не має ризиків щодо оплати. Переходьте до платних дій, коли екрану вони дійсно потрібні.

04

4. Відображайте три стани

Завантаження, дані та недоступність. Стан «недоступно» охоплює HTTP 401, HTTP 402 та збій мережі, і він ніколи не повинен показувати нуль.

05

5. Додайте мітку свіжості

Наш індекс оновлюється приблизно щомісяця. Сіра лінія з текстом «дані про посилання оновлюються щомісяця» запобігає створенню тикета в підтримку з фразою «Я додав посилання вчора».

Проксі-маршрут на Node

Короткий, щоб вміститися на одному екрані. Кеш тут — це звичайний Map; замініть його на Redis, коли запустите більше одного процесу.

js
const cache = new Map();
const MONTH = 30 * 24 * 3600 * 1000;

app.get('/internal/links', async (req, res) => {
  const domain = String(req.query.domain || '').toLowerCase().trim();
  if (!/^[a-z0-9.-]+\.[a-z]{2,}$/.test(domain)) return res.status(400).json({ok:false});
  const hit = cache.get(domain);
  if (hit && Date.now() - hit.t < MONTH) return res.json(hit.v);
  const r = await fetch(`https://alfalinks.net/api.php?action=overview&q=${domain}`);
  if (!r.ok) return res.status(502).json({ok:false});
  const v = await r.json();
  cache.set(domain, {t: Date.now(), v});
  res.json(v);
});
Садовий робітник, що використовує широку сітку для ловлі зграї птахів, що символізує масові запити доменів

Додавання бейджа DR після того, як лічильник запрацює

Лічильник — це легка половина. Бейджу потрібен один додатковий запит.

Для таблиці доменів клієнтів надішліть один запит bulk_dr до 2000 доменів замість окремого запиту для кожного рядка. Він коштує 1 кредит незалежно від кількості рядків, а відповідь містить мапу кожного домену до його значення 0-100, яке ви зберігаєте поруч із кешованим оглядом.

Зіставляйте домени за нормалізованим іменем хоста. Видаліть схему, шлях та префікс www, інакше половина ваших рядків не знайде відповідності та покаже порожні значення.

Прочитайте примітки до оцінки щодо формулювань міток та рецепт кешування щодо TTL для цих запитів.

Спочатку покажіть значення, а потім запропонуйте налаштування

Нові користувачі рідко читають сторінку налаштування. Вони хочуть побачити, чи варта функція зусиль, а лічильник зворотних посилань, що показує реальну цифру, відповідає на це швидше за будь-яку форму. Покладіть значення на перше місце. Конфігурація — на друге.

Оскільки для безкоштовної дії overview не потрібен ключ, ваш перший екран може показувати цифру ще до того, як користувач щось налаштує.

Що потрібно для першого рендеру?

Лише один домен і один безкоштовний запит. Уявіть нового користувача, який вводить свій сайт у онбординг і бачить, як лічильник з’являється в межах того ж перегляду сторінки. Ця одна цифра робить більше для запуску налаштування, ніж список кроків, тому залиште решту налаштувань за нею.

Користувач бачить, що він отримає, перш ніж хтось попросить картку, ключ або другу форму. Нічого на першому рендері не повинно виглядати як бар’єр.

Де має знаходитися підказка щодо налаштування?

Відразу після цифри, а не перед нею. Короткий рядок на кшталт «Підключіть домен, щоб відстежувати його щомісяця» іде під лічильником. Якщо та сама підказка знаходиться над цифрою, користувачі сприймають її як бар’єр і йдуть.

Відстежуйте, які користувачі завершують кожен крок налаштування. Невеликий воронка показує, де люди зупиняються, а зміна формулювань часто зсуває цей показник більше, ніж нова функція.

Тестування перед запуском

Спочатку протестуйте сценарії з помилками. Успішні сценарії тестують самі себе.

Відкликати ключ у staging-середовищі та підтвердити, що картка показує «недоступно», а не нуль. Потім змусьте тестовий баланс вичерпатися, щоб викликати 402, і вставте некоректний вхід, наприклад домен зі схемою та кінцевим шляхом, щоб довести, що валідатор відхиляє його до витрати будь-якого кредиту.

Короткий димовий тест має належати CI. Один безкоштовний запит overview на nytimes.com, що виконується щоніці, покаже, що маршрут і ключ досі працюють.

Три залізні ключі, що висять на важкій дубовій двері, що символізує правила доступу та обмеження доменів

Хто може шукати який домен і за якою ціною

Лічильник, що приймає будь-який рядок, — це відкриті двері до вашого балансу. Вирішіть, хто може запитувати що, до того, як маршрут піде в продакшн, і запишіть відповідь у код, а не на сторінку в вікі, яку ніхто не відкриває.

Три питання виникають щоразу: які домени, яка ліміт та де знаходиться ключ.

Які домени користувач повинен мати право вводити?

Лише ті, до яких робочий простір має права, плюс будь-які публічні пошуки, які ви вирішили запропонувати. Скажімо, робочий простір володіє двома сайтами. Маршрут може приймати ці два та відхиляти все інше з чітким повідомленням, що запобігає витрачанню кредитів одним орендарем на домени, які йому не належать.

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

Як зупинити одного користувача, який вичерпує баланс?

Встановіть квоту на робочий простір у своєму сховищі та рахуйте запити там. Баланс на нашій стороні — це єдиний передоплачений пул, тому він не може повідомити, який клієнт скільки витратив. Примітки до сторінки пошуку охоплюють публічну сторону тієї ж проблеми. Коли робочий простір досягає свого ліміту, повертайте звичайне повідомлення і дозволяйте кешу продовжувати відповідати тим, що він вже зберігає.

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

Чи повинен браузер коли-небудь зберігати ключ?

Ні. Ключ живе на вашому сервері, а браузер викликає ваш маршрут. Цей поділ також робить можливою квоту, оскільки кожен оплачуваний запит проходить через код, яким ви керуєте. Якщо ключ коли-небудь з’явиться у зібраному пакеті, оберніть його того ж дня та перевірте журнал балансу на предмет запитів, яких ви не робили. Деякі команди зберігають ключ у файлі конфігурації, який фронтенд читає під час збірки, і цей файл потрапляє в пакет. Тримайте ключ подалі від усього, що бачить етап збірки, і перевіряйте зібрані файли один раз перед кожним релізом.

Безкоштовні дії можна викликати з публічної сторінки без ключа, і це єдиний випадок, коли браузер може звертатися до API напряму.

Що має казати лічильник, а чого не повинен

Кажіть менше, ніж знаєте. Лічильник з міткою «зворотні посилання» провокує питання «чому Ahrefs показує іншу цифру?», а чесна відповідь полягає в тому, що два краулери бачать два шматки мережі.

Позначте цифру її джерелом і місяцем. Щось на кшталт «Посилаючі домени, індекс AlfaLinks, жовтень 2026» довшє, але воно припиняє суперечку до її початку, і це добре читається в маленькій картці.

Округлюйте для відображення. Користувач, який бачить 12 481 у понеділок і 12 481 у п’ятницю, довіряє інструменту більше, ніж той, хто бачить коливання, а наше щомісячне оновлення дає вам цю стабільність безкоштовно.

Якщо ви хочете бачити поруч значення 0-100, спочатку прочитайте примітки до оцінки зворотних посилань. Це наш власний показник, тому назва має значення.

Стани невдачі та те, що робить інтерфейс

Коди HTTP — це ті, що повертає API; колонка UI — наша пропозиція.
СигналЗначенняЩо бачить користувачЩо робите ви
HTTP 401Відсутній або неправильний ключ«Дані про посилання недоступні»Сторінка сама себе: виправлення багів
HTTP 402Кредити закінчилися«Дані про посилання недоступні»Поповнення через USDT (TRC-20)
ok: falseЗапит відхиленоПосилання для повторної спроби в рядкуЗапишіть домен і дію
Тайм-аутПроблеми з мережеюКешоване значення, якщо воно єСпробуйте ще раз, потім зменшіть частоту

Збереження чесності лічильника в підтримці та журналах

Лічильник частіше ламається тихо, ніж гучно. Записуйте достатньо даних, щоб відповісти на наступне питання клієнта, і повністю виключіть особисті дані з журналу. Короткі рядки перемагають. Рядок, який відповідає на питання підтримки, економить більше часу, ніж будь-яке сповіщення, яке ви можете написати.

Більшість потоків підтримки щодо лічильника містять одне з трьох питань, тому плануйте журнал навколо них. Тримайте ці три питання у своєму посібнику з експлуатації поруч із кроками для обертання ключа.

Що має записувати кожен рядок журналу?

Дію, домен, код стану, вік кешу та баланс кредитів, який повернувся. Ці п’ять полів відповідають на більшість питань підтримки. Скажімо, користувач запитує, чому його лічильник показує застарілу цифру. Вік кешу та місяць індексу скажуть вам, чи проблема в кеші, чи в мітці.

Залишайте API-ключ поза межами кожного рядка, включаючи трасування помилок. Маскуйте його в логері, оскільки один протіклий рядок може вичерпати весь обліковий запис.

Як дізнатися, що лічильник здоровий щотижня?

Спостерігайте за трьома цифрами: часткою станів «недоступно», трендом балансу кредитів та часткою попадань у кеш. різкий стрибок станів «недоступно» зазвичай вказує на проблему з ключем або балансом. Повільне падіння балансу зазвичай вказує на занадто специфічний ключ кешу.

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