Інтернет-магазин Київ Стенд

Кошик інтернет-магазину Київ Стенд

Як не втратити позиції в Google при оновленні інтернет-магазину на стеку Joomla+VirtueMart

Два монітори з GSC - технічний аудит сайту перед оновленням Joomla та virtuemart

Втрата позицій після оновлення інтернет-магазину - це наслідок технічних розривів сигналів Googlebot: коли пошуковик не може зіставити старий і новий стан сайту, він знижує авторитет сторінок. Нижче - 8 причин цього розриву на стеку Joomla+VirtueMart і як кожен з них замкнути перед деплоєм.

Чому інтернет-магазин на Joomla+VirtueMart втрачає позиції після оновлення

GSC Coverage зі статусами Crawled not indexed та Duplicate canonical - діагностика втрати позицій після оновлення сайту

Google не «карає» за оновлення як таке - він переоцінює. При появі нового контенту або зміні URL-структури Googlebot запускає цикл перевірки: чи справді стара сторінка і нова - один і той самий ресурс. Якщо 301-редирект відсутній або canonical суперечить собі - пошуковик не може зіставити авторитет і починає рахувати сторінки заново з нуля.

Стек Joomla+VirtueMart має вроджену вразливість до дублів: один товар може бути доступний за 5-10 різних URL через категорії, меню, пагінацію, сортування і UTM-мітки. При редизайні чи міграції ці дублі або множаться, або частина з них розривається - обидва сценарії негативні для Googlebot.

Є і специфіка архітектури. Префікс /component/virtuemart/ у VirtueMart генерується автоматично і потрапляє в індекс якщо не прив'язати товари до пункту меню «VirtueMart Default Layout». Canonical-баги в шаблонних override виникають при кожній значній зміні шаблону. Hreflang між мовними версіями-версіями рветься якщо перемикач мультимовності налаштований некоректно після міграції.

Найбільш вразливий момент - перехід між мажорними версіями Joomla: 3.x -> 3.10 -> 4.4 -> 5.x. Кожен крок змінює внутрішні роутинг-правила. Без карти редиректів, підготовленої до деплою, навіть технічно коректна міграція дає хвилю 404 і canonical-конфліктів.

Порівняно з більш закритими SaaS-платформами, Joomla дає розробнику повний контроль над URL-архітектурою - але ціна цього контролю: кожне оновлення потребує явної верифікації SEO-стану. Детальніше про те, коли залишатись на Joomla+VirtueMart а коли переходити - у майбутній статті детальне порівняння Joomla+VirtueMart з альтернативами.

EOL-дати Joomla публікуються на офіційному календарі релізів Joomla - перевіряйте їх перед кожним циклом планування оновлення.

8 причин втрати позицій - оглядна таблиця

Більшість з цих причин не очевидні до деплою. Саме тому вони і руйнують позиції.

Причина Чому ламається Як уникнути
#1 Втрата карти 301-редиректів Старі URL повертають 404 або масовий редирект на головну (soft 404) Скласти таблицю старий URL -> новий до деплою; масовий редирект на головну заборонений
#2 Canonical-конфлікт VirtueMart Сторонній плагін або шаблон додає власний canonical поверх canonical VM Перевірити views/productdetails/view.html.php після кожної зміни шаблону
#3 Hreflang-розрив При переключенні плагіна мультимовності губляться alternate-посилання між мовними версіями Перевірити самореферентний canonical + alternate у head або sitemap після міграції
#4 Дублі через Modern Routing / trailing slash URL з і без слешу в кінці - два різних URL в індексі Googlebot Увімкнути Strict Routing в плагіні System - SEF (Joomla 5.2+)
#5 Robots.txt зі staging залишився активним Dev-копія деплоїться на прод з robots.txt що блокує індексацію Перевірити robots.txt відразу після деплою через GSC або curl
#6 Schema.org Product/FAQPage зникла при зміні шаблону При редизайні мікророзмітка в шаблонних файлах не переноситься Перевірити Rich Results Test після деплою нового шаблону
#7 404-імітація VirtueMart при деревовидних URL Видалений товар повертає 200 + контент категорії замість 404 Вимкнути Use full category tree або налаштувати 410 Gone для видалених SKU
#8 Sitemap.xml забруднений VM-дублями Штатні плагіни включають фантомні URL і дублі мовних версій Кастомна генерація sitemap з фільтром HTTP 200 OK, лімітом 50 MB / 50 000 URL

Деякі з цих помилок виправляються за 10 хвилин. Інші - за тижні після деплою, коли позиції вже просіли.

Причини #1-#4 - структурні розриви URL

Spreadsheet з картою 301-редиректів Старий URL та Новий URL - підготовка до міграції сайту на Joomla

Причина #1 - Втрата карти 301-редиректів

Карта 301-редиректів - найважливіший SEO-артефакт будь-якої міграції Joomla. Без неї кожен змінений URL - це сторінка з обнуленим авторитетом у Google. Алгоритм підготовки карти: 1) сканування поточного сайту через Screaming Frog або XML-карту; 2) таблиця відповідності старий URL -> новий; 3) директиви в .htaccess або в SEF-розширенні; 4) тестування зразку URL до деплою на прод.

Масовий редирект всього каталогу на головну сторінку - заборонений. Google класифікує його як soft 404 і не переносить авторитет.

Кожна сторінка з реальним контентом і трафіком повинна мати точковий редирект на відповідний новий URL.

sh404SEF, який роками використовувався для управління SEF-URL і редиректами в Joomla, більше не підтримується на сучасних версіях. Перехід на 4SEF + 4SEO потрібно планувати заздалегідь: встановлювати розширення на Joomla 3 ДО початку оновлення ядра, щоб зберегти накопичені redirect-правила при переході між версіями.

Детальна покрокова інструкція по SEO-чеклісту міграції - у статті детальний SEO-чек-лист міграції Joomla. Офіційна документація по роутингу в Joomla 5 - в документації Joomla 5.

Причина #2 - Canonical-конфлікт VirtueMart

VirtueMart 4 автоматично формує canonical для товарів, що входять до кількох категорій, зводячи їх до єдиного абсолютного URL. Це правильна поведінка - але вона ламається коли в шаблоні або стороньому плагіні є власна логіка canonical.

Типовий сценарій: розробник встановлює SEO-плагін або змінює шаблон VM, і в результаті на сторінці товару з'являються два canonical теги - один від VirtueMart, другий від плагіна. Googlebot у такому випадку ігнорує обидва і самостійно вибирає що вважати каноніком - зазвичай не той URL, який потрібен.

Місце для перевірки: файл views/productdetails/view.html.php. Там повинен бути блок, що очищує стандартний canonical Joomla перед додаванням canonical VirtueMart. Якщо цього блоку немає або він закоментований - ризик конфлікту.

Причина #3 - Hreflang-розрив

Для мультимовних магазинів hreflang реалізується двома методами: теги в <head> кожної сторінки або посилання в XML-карті сайту. Обидва методи вразливі при міграції: зміна плагіна мультимовності або перебудова sitemap може зруйнувати alternate-зв'язки між мовними версіями.

Правильна структура: кожна мовна версія містить самореферентний canonical + посилання на всі альтернативні мовні версії. Відсутність самореферентного canonical - окрема помилка, яку часто пропускають при перевірці hreflang.

Причина #4 - Дублі через Modern Routing / trailing slash

Joomla 5.2+ ввела функцію Strict Routing у системному плагіні System - SEF. При увімкненій опції «Enforce a Suffix by Redirect» система автоматично склеює дублюючі URL і робить 301 на канонічну версію. Але якщо ця опція вимкнена - URL з і без trailing slash, URL з index.php і без нього, URL через component/virtuemart і через прямий alias існують одночасно в індексі.

Trailing slash - одна з п'яти типових помилок, що фіксуються після міграцій Joomla. Особливо актуально якщо стара конфігурація формувала URL без слешу, а нова - зі слешем.

Безкоштовний аудит проекту модернізації - перевіримо canonical і trailing slash у вашій конфігурації до деплою.

Причини #5-#6 - втрата сигналів якості

Причина #5 - Robots.txt зі staging залишився активним

Це один з найчастіших і найнепомітніших збоїв при деплої: dev-копія сайту розгортається на прод разом з robots.txt, що містить директиву Disallow: / або подібне блокування для захисту staging від індексації. Googlebot відходить з порожніми руками - видимість падає до нуля за тижень.

Як перевірити: одразу після деплою запит curl -s https://yourdomain.ua/robots.txt і перевірка GSC Coverage на вкладці «Excluded» - якщо там раптово з'явилась велика кількість URL зі статусом «Blocked by robots.txt» - причина саме тут.

Robots.txt зі staging - проблема процесу, а не коду. Рішення: в CI/CD або в чек-листі деплою robots.txt стоїть першою позицією обов'язкової перевірки. Якщо стейдж-файл зберігається у репозиторії - він повинен мати назву robots.staging.txt і підмінятись автоматично при деплої на прод.

Причина #6 - Schema.org Product/FAQPage зникла при зміні шаблону VirtueMart

Мікророзмітка в шаблонах VirtueMart знаходиться в файлах шаблону - не в базі даних. При зміні шаблону або переході на новий override розмітка не переноситься автоматично. Це головний ризик редизайну без технічного SEO-аудиту.

Які схеми повинні залишитися після зміни шаблону: Product + Offer (ціна, валюта, наявність) + AggregateRating. Відсутність будь-якого з цих типів у сторінці товару - втрата rich snippets у видачі і зниження CTR.

Перевірка через Rich Results Test після кожної значної зміни шаблону - обов'язкова. Якщо розмітка реалізована через JSON-LD плагін а не напряму в шаблоні - перевірити чи плагін залишився активним після оновлення ядра Joomla.

Причини #7-#8 - приховані пастки VirtueMart

Налаштування Use full category tree в адмін-панелі e-commerce - вимкнення опції для усунення 404-помилок VirtueMart

Причина #7 - 404-імітація VirtueMart при деревовидних URL

Це найменш задокументована і від цього найнебезпечніша поведінка VirtueMart. При увімкненій опції «Use full category tree for product links» URL товару містить повний шлях категорійних вузлів. Проблема: коли товар видаляється з адмінки, старий URL не повертає 404 - VirtueMart перенаправляє Googlebot на батьківську категорію з HTTP-кодом 200.

Нам потрапляло на ревізії магазинів: видаляєш товар через адмінку, заходиш по старому URL - отримуєш 200 і сторінку категорії. Googlebot бачить це як живий URL з дублюючим контентом категорії, лишає в індексі. Так накопичуються «фантомні» URL - сторінки яких немає, але які технічно «живі» і займають краулінговий бюджет.

Ще небезпечніше: будь-який довільний текст на місці slug товару при деревовидному URL дає той самий 200 + контент категорії. Це означає що атакуючий може генерувати нескінченну кількість «валідних» URL вашого магазину - і всі вони потрапляють в індекс.

Як уникнути: вимкнути «Use full category tree for product links» - URL будуватиметься від кореня з product suffix, без деревовидного шляху. При реструктуризації категорій ця опція не впливає на URL товарів - вони залишаються стабільними. Альтернатива якщо деревовидні URL потрібні за архітектурними причинами: налаштувати 410 Gone для видалених SKU через .htaccess або Joomla Redirect Manager.

Причина #8 - Sitemap.xml забруднений VM-дублями

При стеку Joomla+VirtueMart важко згенерувати чистий sitemap.xml. Штатні sitemap-плагіни цепляють дублі мовних версій, «фантомні» URL з причини #7, категорії з порожнім каталогом. Ми бачили sitemap де 40% URL - це сміття, яке тільки розмиває сигнал Googlebot.

Наслідок прямо пов'язаний з причиною #7: реальна категорія товарів плюс 5-10 «фантомних» URL з тим самим контентом категорії. Google не розуміє який канонічний, знижує авторитет усім. Ми регулярно бачимо в GSC Coverage: статус «Duplicate, submitted URL not selected as canonical» для реальних категорій поруч з «фантомами».

Як правильно: кастомна генерація sitemap через CLI-скрипт під VM-логіку. Вимоги: ліміт 50 MB / 50 000 URL на файл - при перевищенні Sitemap Index. Обов'язковий фільтр: перевірка HTTP 200 OK перед додаванням URL до sitemap. Окремі файли для категорій і товарів - дає змогу ізолювати забруднення і перевіряти частинами. Sitemap подається в GSC для пришвидшення переіндексації після деплою.

Замовити консультацію - розберемо стан sitemap і canonical у вашому магазині.

Чек-лист - як замкнути 8 розривів перед деплоєм

Crawler tool зі статусами 200 301 404 у таблиці URL - перевірка сайту перед деплоєм оновлення Joomla

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

  1. 301-карта редиректів - сканування Screaming Frog або XML старого sitemap, таблиця старий URL -> новий, тест зразку 20-30 URL після деплою. Масовий редирект на головну - заборонений.
  2. Canonical VirtueMart - перевірити views/productdetails/view.html.php на конкуруючі canonical від плагінів або шаблону. View Source на 3-5 товарних сторінках після деплою.
  3. Hreflang UA/RU - перевірити самореферентний canonical + alternate на обох мовних версіях. Метод: head або sitemap - обрати один і дотримуватись послідовно.
  4. Strict Routing і trailing slash - увімкнути в System - SEF (Joomla 5.2+), перевірити URL з і без слешу через curl.
  5. Robots.txt - перша перевірка одразу після деплою. curl -s yourdomain.ua/robots.txt. Якщо є Disallow: / - сайт закритий від індексації.
  6. Schema.org - Rich Results Test на 2-3 товарних сторінках після зміни шаблону. Перевірити Product, Offer, AggregateRating, FAQPage.
  7. 404-імітація VirtueMart - вимкнути «Use full category tree for product links» або налаштувати 410 для видалених SKU. Тест: curl -I по URL видаленого тестового товару.
  8. Sitemap.xml - кастомна генерація з фільтром HTTP 200 OK. Виключити фантомні URL, дублі мовних версій, порожні категорії. Подати в GSC після деплою.

Детальніша покрокова інструкція з прикладами команд і скриптів - у статті детальний SEO-чек-лист міграції Joomla.

Часті питання

Чи можна оновити Joomla 3 до Joomla 5 без втрати ЧПУ?

Прямого шляху Joomla 3 -> 5 не існує. Послідовний ланцюг: 3.x -> 3.10.x -> 4.4.x -> 5.x. Кожен крок - окремий цикл тестування на staging. Alias статей, категорій і menu items переносяться разом з контентом - вони зберігаються в базі даних. Для URL де структура змінилась (наприклад стаття переїхала в іншу категорію або alias відредагований) - потрібен 301-редирект в .htaccess або через Joomla Redirect Manager. Усі редиректи складають до деплою на прод, не після.

Як перевірити що VirtueMart не віддає код 200 на видалені товари?

Крок 1: в адмінці VM видаліть тестовий товар (або запам'ятайте URL нещодавно видаленого). Крок 2: curl -I https://yourdomain.ua/category/test-product-1234. Якщо відповідь 200 а не 404 - увімкнено «Use full category tree for product links». Крок 3: GSC Coverage -> вкладка «Crawled - currently not indexed» - перевірити чи є там старі URL товарів з великою кількістю показів до видалення. Це «фантомні» URL що залишились в індексі.

Чому категорії VirtueMart погано індексуються після оновлення?

Найчастіше це накопичення «фантомних» URL через причину #7: видалені товари повертають 200 + контент категорії, Googlebot фіксує їх як живі сторінки з дублюючим контентом. Google не розуміє який URL канонічний для категорії і знижує авторитет усім варіантам. Паралельно забруднений sitemap.xml з фантомними URL посилює плутанину. Діагностика: GSC Coverage -> статус «Duplicate, submitted URL not selected as canonical» для категорійних URL. Рішення: вимкнути деревовидні URL або 410 Gone для видалених SKU + кастомна генерація sitemap.

Який підхід до sitemap рекомендуєте для Joomla+VirtueMart?

Кастомна генерація через CLI-скрипт під VM-логіку - єдиний надійний варіант. Штатні sitemap-плагіни не розуміють специфіку VirtueMart: вони включають дублі мовних версій, «фантомні» URL з видалених товарів, порожні категорії. Вимоги до кастомного скрипта: ліміт 50 MB / 50 000 URL на файл (при перевищенні - Sitemap Index), фільтр тільки HTTP 200 OK URL перед додаванням, окремі файли для категорій і товарів. Після кожного деплою - подавати оновлений sitemap в GSC.

Як подати Change of Address у GSC при зміні домену?

Тільки ПІСЛЯ того як 301-редиректи вже налаштовані і працюють на серверному рівні. Послідовність критична: спочатку налаштовуєте 301 на сервері і перевіряєте через curl що вони спрацьовують - і тільки потім відкриваєте GSC, верифікуєте новий домен і запускаєте Change of Address. Change of Address без серверних 301 не дає ефекту: Google не може перевірити що переїзд реальний.

Чи нормально що impressions просіли на 20-30% в перші тижні?

Так, це нормальна реакція Googlebot при переоцінці нових адрес. Перші 2-4 тижні після деплою Google перевіряє 301-редиректи і перераховує авторитет сторінок. Це не сигнал до відкату. При коректній redirect-map, без soft-404 і без canonical-конфліктів - показники повертаються за 4-8 тижнів. Що відстежувати: GSC Coverage на 3-й, 7-й і 30-й день після деплою. Тривожний сигнал - зростання статусу «Excluded: Blocked by robots.txt» або масова поява «404 Not Found» у Coverage.

Чи зберігається canonical VirtueMart при зміні шаблону?

Залежить від наявності override у views/productdetails/view.html.php. VirtueMart 4 автоматично формує canonical для товарів у кількох категоріях. Але якщо в новому шаблоні або стороньому SEO-плагіні є власна логіка canonical - виникає дублюючий тег. Googlebot у такому випадку ігнорує обидва і вибирає «найпопулярніший» URL за власними критеріями - зазвичай не той що потрібен. Перевіряти через View Source на 3-5 товарних сторінках після кожної зміни шаблону.

sh404SEF чи 4SEF - що використовувати у 2026?

sh404SEF більше не підтримується на сучасних Joomla. Перехід: 4SEF + 4SEO. Важливий нюанс: встановлювати 4SEF потрібно на Joomla 3 ДО початку оновлення ядра. Якщо зробити навпаки - спочатку оновити Joomla до 4 або 5, а потім встановлювати 4SEF - втрачаються накопичені redirect-правила і URL-структура що була на sh404SEF. Порядок дій: аудит поточних URL і redirect-правил sh404SEF -> встановлення 4SEF -> перенесення правил -> оновлення Joomla.

Понад 15 років ведемо власні інтернет-магазини на Joomla і VirtueMart - пройшли всі ризики цього стеку особисто. Допоможемо оновити ваш магазин без втрати позицій у Google.

Безкоштовний аудит проекту модернізації