Накратко за проекта
В онлайн магазин на OpenCart 2.3.0.2, който продава хранителни добавки, клиентът се сблъска със странен бъг: всеки път когато в SEO URL се използваше буквата „л“, линкът се чупеше. Например /масло се записваше като /мас?о и водеше до 404 грешка.
Това е все едно на табелата пред магазина да пише „МАС?О“ вместо „МАСЛО“ – никой клиент не е сигурен дали е на правилното място. За SEO това е катастрофа, защото търсачките виждат счупени адреси, а за потребителите – лошо изживяване.
Ключови подобрения
- Поправяне на кода на OpenCart, така че нови URL-и с „л“ да се записват правилно и да не се чупят.
- SQL автоматизация за поправяне на вече счупените SEO ключове в базата данни.
- Подобряване на UX и SEO, като се премахват грешните 404 и URL-ите стават разбираеми и работещи.
Използвани технологии
- OpenCart 2.3.0.2 – платформата, в която се появи проблемът.
- OCMOD – за корекция на библиотеката
utf8.php, без да се пипа ядрото на OpenCart. - MySQL – за директна подмяна на грешно записаните символи в таблицата
oc_url_alias.
Предизвикателства
Проблемът се криеше в това, че OpenCart използваше strtolower() вместо mb_strtolower() за работа с UTF-8 символи. Буквата „л“ не се разпознаваше и се записваше като „?“. В резултат новите продукти и категории със „л“ в SEO keyword автоматично ставаха недостъпни.
Това е все едно да напишеш адрес на кирилица и пощальонът да не разпознава буквата „л“ – писмото никога няма да стигне до получателя.
Решение с OCMOD
Създадох OCMOD файл, който замества дефиницията на utf8_strtolower в system/library/utf8.php, така че винаги да използва mb_strtolower при работа с кирилица:
След качване през админ панела (Extensions → Modifications → Upload) и натискане на Refresh, всички нови SEO URL-и с „л“ започнаха да се записват правилно.
SQL заявка за поправяне на старите
Старите записи обаче вече бяха счупени (мас?о вместо масло). За да ги поправя наведнъж, използвах SQL заявка:
С тази заявка всички „?“ бяха заменени с правилната буква „л“. Това е бързо решение, което пести часове ръчна работа.
Стъпки за репродуциране
- Създайте OCMOD файл с горния код и го качете през админ панела.
- Рефрешнете модификациите и изчистете кеша.
- Стартирайте SQL заявката в phpMyAdmin, за да оправите вече счупените записи.
- Тествайте с нов продукт с име „масло“ – URL-ът вече ще е
/масло, без да се чупи.
Резултат
След промяната сайтът вече не генерираше счупени линкове. SEO URL-ите на кирилица, включително тези с „л“, се показваха правилно. Потребителите виждаха чисти и работещи адреси, а Google започна да индексира съдържанието без 404 грешки.
Извод
Понякога дори една буква може да счупи цял сайт. В OpenCart 2.3.0.2 липсата на правилна обработка на UTF-8 доведе до масови 404 грешки. Решението беше комбинация от OCMOD за новите URL-и и SQL заявка за старите. Резултатът: стабилен магазин, доволни клиенти и SEO без загуби.