Як я автоматизував внутрішню перелінковку на 2000+ статтях і що з цього вийшло
Мене звати Олексій, я розробляю контентні сайти на WordPress і займаюся їх SEO-просуванням. Ця стаття буде корисна тим, хто веде великі інформаційні сайти і стикався з болем ручної внутрішньої перелінковки.
Проблема, яку я вирішував
Коли на сайті 2000+ статей, внутрішня перелінковка стає окремою роботою. Не просто «поставити пару посилань» — а систематично відстежувати які матеріали між собою пов’язані, які статті взагалі без посилань, які посилання вже биті (404), і де є так звані «сторінки-сироти» — матеріали, на які ніхто не посилається.
Я пробував це робити вручну. Результат — кілька годин роботи раз на місяць, і все одно повна картина не складається. Плагіни для масової перелінковки або надто прості (просто замінюють ключові слова посиланнями без будь-якої логіки), або англомовні та не адаптовані під специфіку українського контенту.
Тому я вирішив написати власний плагін Smart Linker
Що технічно всередині
Стек виявився нетривіальним. Основна логіка — PHP з використанням WordPress hooks і wpdb для роботи з базою даних напряму. AJAX для асинхронних запитів з адмінки. Але найцікавіша частина — інтеграція з редакторами.
WordPress зараз живе у двох паралельних світах: Gutenberg і Classic Editor. Це два абсолютно різних API з різними підходами до всього. Gutenberg побудований на React і wp.data/wp.plugins — там ти пишеш компоненти, реагуєш на стан, підписуєшся на store. Classic Editor — це TinyMCE plugin API, зовсім інша парадигма.
Мені треба було щоб один і той самий sidebar з пропозиціями посилань працював в обох редакторах однаково. На практиці це означало написати фактично дві різні реалізації під одним інтерфейсом. Не скажу що це було просто — але врешті-решт вдалося зробити так, щоб поведінка була ідентичною незалежно від редактора.
Ще одна цікава частина — AI-пропозиції через OpenAI embeddings. Плагін аналізує семантичну схожість між статтями і пропонує релевантні посилання, а не просто збіги за ключовими словами. Це працює через власний хмарний endpoint.
Результати після запуску на реальному сайті
Тестую плагін на своїх сайтах вже кілька місяців. Цифри по одному з них:
- 2000+ статей в базі
- 1650 внутрішніх посилань додано автоматично — це та робота, яку я б робив вручну місяцями
- Показник відмов знизився — люди стали більше переходити між матеріалами
- Виявлено і виправлено десятки битих посилань (404), які я б навряд чи знайшов вручну
- Знайдені статті-сироти — матеріали без жодного вхідного посилання
Останнє особливо важливо для SEO: Google погано індексує сторінки, до яких немає внутрішніх посилань. Я навіть не знав скільки таких матеріалів накопичилось.
Що виявилось складніше, ніж очікував
Найбільший головний біль — не технічна частина, а логіка визначення «правильного» посилання. Якщо в статті про здоров’я зустрічається слово «спорт» — чи варто ставити посилання на спортивну статтю? Не завжди. Контекст має значення.
Прості плагіни замінюють кожне входження ключового слова посиланням — це виглядає неприродно і дратує читача. Довелося написати логіку яка враховує щільність посилань, релевантність контексту і не дублює посилання в межах однієї статті.
Також несподіваною виявилась кількість крайніх випадків: статті з нестандартним форматуванням, матеріали з уже вбудованими посиланнями на зовнішні ресурси, дуже короткі пости де перелінковка взагалі не має сенсу.
Чи варто було це робити
Якщо у вас сайт до
Для мене головний результат навіть не в цифрах посилань. Це перший раз коли я маю повну картину внутрішньої структури сайту: що з чим пов’язано, де дірки, де проблеми. Раніше це була чорна скринька.
Якщо є питання по технічній реалізації — пишіть в коментарях, відповім.
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівДякую, питання є. То ви заганяєте усi 2000 статей у векторну базу? Якi критерiї подiбностi? Воно спочатку визначає, яку статтю на яку лiнкувати, а потiм вже шукає фразу для лiнкування?
То робиться будь-яким спайдером
Так, всі статті заганяються у векторну базу (embeddings). Схожість визначається косинусною відстанню між векторами — поріг 0.73. Спочатку плагін знаходить релевантні статті за
змістом, потім шукає підходящу фразу в тексті для анкору.
Якщо фраза не знайдена — GPT пропонує варіант анкору. Биті посилання перевіряються окремим модулем з throttling щоб не навантажувати сервер.
Спайдер не використовується — все працює через WordPress API і базу даних напряму.
Є тріал можете подивитись citykey.com.ua/smart-linker