SEO Redirect
Automatikus 404-figyelő és 301-es átirányító bővítmény OpenCart 3.0.x áruházakhoz – admin UI nélkül, nulla core módosítással.
Mi ez a bővítmény?
Az SEO Redirect bővítmény két problémát old meg egyszerre: automatikusan naplózza a 404-es (nem található) hibákat, és lehetővé teszi, hogy ezekhez manuálisan 301-es átirányításokat rendelj phpMyAdmin-ban – anélkül, hogy bármilyen core fájlhoz hozzányúlnál.
A bővítmény az OpenCart natív Event rendszerét használja, így teljes mértékben kompatibilis az áruház jövőbeli frissítéseivel, és egyetlen meglévő fájlt sem módosít.
Az összegyűjtött adatok alapján pontosan látod, melyik régi URL-t keresik a látogatók, és fontossági sorrendben (hits) kezelheted őket.
Funkciók
Automatikus naplózás
Minden emberi 404 kérést ment az adatbázisba első előfordulásakor.
301 Redirect
Ha a to mező ki van töltve, azonnal 301-es átirányítást hajt végre.
Bot szűrés
Ismert botok, crawlerek és rosszindulatú szkennelések nem kerülnek mentésre.
Hit számláló
Nyomon követi, hányszor kérték le az adott hiányzó URL-t.
Zero core mod
Egyetlen core fájlt sem módosít, kizárólag OC Event hook-ot használ.
1 DB query / kérés
Minimális teljesítmény-terhelés – csak egy lekérdezés fut 404-enként.
Követelmények
| Komponens | Verzió / feltétel |
|---|---|
| OpenCart | 3.0.5.0 (más 3.x verzió valószínűleg kompatibilis, de nem tesztelt) |
| PHP | 7.2 vagy újabb |
| MySQL / MariaDB | Bármely, OpenCart-tal kompatibilis verzió |
| FTP hozzáférés | A 4 fájl feltöltéséhez szükséges |
| Admin hozzáférés | Extensions → Modules → Install futtatásához |
| phpMyAdmin | A redirectek kezeléséhez (nincs admin UI) |
Fájlstruktúra
A bővítmény pontosan 4 fájlból áll. Mindegyik új fájl – egyiket sem írja felül.
opencart_root/ ├── admin/ │ ├── controller/extension/module/ │ │ └── seo_redirect.php ← install / uninstall / index │ └── language/en-gb/extension/module/ │ └── seo_redirect.php ← language strings └── catalog/ ├── controller/extension/module/ │ └── seo_redirect.php ← catch404 event handler └── model/extension/module/ └── seo_redirect.php ← DB műveletek
Telepítési lépések
Fájlok feltöltése FTP-vel
Töltsd fel a 4 fájlt a fenti struktúrának megfelelő mappákba az OpenCart gyökérkönyvtárán belül. A célmappák már léteznek az OC alaptelepítésében.
Bővítmény telepítése az adminban
Navigálj: Admin → Extensions → Extensions → Modules, keresd meg a SEO Redirect bejegyzést, és kattints az Install gombra.
Ellenőrzés
Az install gomb megnyomásakor az OC létrehozza az oc_seo_redirect táblát és közvetlen SQL-lel regisztrálja az event hook-ot az oc_event táblába. Ellenőrzés phpMyAdmin-ban: SELECT * FROM oc_event WHERE code = 'seo_redirect'
Teszt
Látogass meg egy nem létező URL-t az áruházban (pl. /teszt-404-oldal). A 404 oldal betölt, majd phpMyAdmin-ban látszik az új sor az oc_seo_redirect táblában.
Nincs szükség cache ürítésre, ocMod-ra vagy ZIP csomagra. Az event regisztráció az install gomb megnyomásakor azonnal érvényes.
Eltávolítás
Az Uninstall gomb csak az event hook regisztrációját törli. Az oc_seo_redirect tábla és a benne lévő adatok megmaradnak – szándékosan.
Ha teljesen el szeretnéd távolítani a táblát is, futtasd phpMyAdmin-ban: DROP TABLE IF EXISTS `oc_seo_redirect`; – de ez az összes összegyűjtött adatot törli.
Manuális telepítés / eltávolítás (ha az Install gomb nem működik)
Ha az admin Install gomb hibát dob, a telepítés elvégezhető közvetlenül phpMyAdmin-ban:
-- Telepítés (mind a három sor szükséges)
CREATE TABLE IF NOT EXISTS `oc_seo_redirect` (
`from` VARCHAR(255) NOT NULL,
`to` VARCHAR(255) DEFAULT NULL,
`hits` INT UNSIGNED NOT NULL DEFAULT 1,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` DATETIME DEFAULT NULL,
`last_ip` VARCHAR(45) DEFAULT NULL,
`user_agent` VARCHAR(255) DEFAULT NULL,
`referer` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`from`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `oc_event` (`code`, `trigger`, `action`, `status`, `sort_order`)
VALUES ('seo_redirect', 'catalog/controller/error/not_found/before', 'extension/module/seo_redirect/catch404', 1, 0);
INSERT INTO `oc_extension` (`type`, `code`) VALUES ('module', 'seo_redirect');
-- Eltávolítás
DELETE FROM `oc_event` WHERE `code` = 'seo_redirect';
DELETE FROM `oc_extension` WHERE `code` = 'seo_redirect';
Tábla struktúra
CREATE TABLE IF NOT EXISTS `oc_seo_redirect` (
`from` VARCHAR(255) NOT NULL,
`to` VARCHAR(255) DEFAULT NULL,
`hits` INT UNSIGNED NOT NULL DEFAULT 1,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` DATETIME DEFAULT NULL,
`last_ip` VARCHAR(45) DEFAULT NULL,
`user_agent` VARCHAR(255) DEFAULT NULL,
`referer` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`from`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| Mező | Típus | Leírás |
|---|---|---|
| from | VARCHAR(255) PK | A 404-et kapott URI (pl. /regi-termek). PRIMARY KEY – duplikátum nem kerülhet be. |
| to | VARCHAR(255) | NULL = még nem kezelt; kitöltve = 301 redirect fut erre az URL-re. |
| hits | INT UNSIGNED | Hányszor kérték le. Prioritizáláshoz használható. |
| created | DATETIME | Az első előfordulás időpontja (automatikus). |
| updated | DATETIME | Mikor rendeltek hozzá cél URL-t (kézzel töltendő). |
| last_ip | VARCHAR(45) | Legutolsó látogató IP-je (IPv4 és IPv6 kompatibilis). |
| user_agent | VARCHAR(255) | Böngésző/kliens azonosítója (max 255 karakter, csonkítva). |
| referer | VARCHAR(255) | Honnan érkezett a látogató (max 255 karakter, csonkítva). |
SQL lekérdezések
Kezelendő redirectek fontossági sorrendben
SELECT `from`, `hits`, `created`, `referer`
FROM `oc_seo_redirect`
WHERE `to` IS NULL
ORDER BY `hits` DESC;
Redirect hozzárendelése egy URL-hez
UPDATE `oc_seo_redirect`
SET `to` = '/uj-termek-url', `updated` = NOW()
WHERE `from` = '/regi-termek-url';
Már kezelt redirectek listája
SELECT `from`, `to`, `hits`, `updated`
FROM `oc_seo_redirect`
WHERE `to` IS NOT NULL
ORDER BY `hits` DESC;
Gyanús / bot bejegyzések törlése
DELETE FROM `oc_seo_redirect`
WHERE `from` LIKE '%wp-%'
OR `from` LIKE '%.env%'
OR `from` LIKE '%.php%'
OR `user_agent` LIKE '%bot%';
Top 10 legtöbbet keresett hiányzó oldal (utolsó 30 nap)
SELECT `from`, `hits`, `created`
FROM `oc_seo_redirect`
WHERE `to` IS NULL
AND `created` >= DATE_SUB(NOW(), INTERVAL 30 DAY)
ORDER BY `hits` DESC
LIMIT 10;
Redirect eltávolítása (pl. ha az oldal visszaállt)
UPDATE `oc_seo_redirect`
SET `to` = NULL, `updated` = NULL
WHERE `from` = '/visszaallitott-oldal';
Folyamatábra – catch404 logika
Bot szűrés
A szűrés mind a User-Agent fejlécre, mind az URI-ra vonatkozik. Ha bármelyik tartalmaz egy ismert szignatúrát, a bővítmény azonnal visszatér és nem ment semmit.
| Kategória | Szűrt minták |
|---|---|
| Keresőmotorok / crawlerek | bot, crawl, spider, slurp, baidu, yandex |
| HTTP kliensek | wget, curl, python, java/, libwww |
| WordPress szkennelők | wp-login, wp-admin, xmlrpc |
| Konfigurációs fájl próbák | .env, .git, config., setup.php, install.php, phpmyadmin |
| Injection / exploit próbák | ../, .php?, eval(, base64 |
Best Practices – Ajánlások
Rendszeres áttekintés
Hetente nézd meg a kezeletlen bejegyzéseket (to IS NULL), és rendeld hozzá a céloldalakat a legtöbb hits értékkel rendelkezőkhöz. Ez közvetlenül javítja a SEO-t és csökkenti a visszafordulási arányt.
Redirect target formátuma
A to mezőbe írj:
- Relatív URL-t ugyanazon a domainen belüli célhoz:
/uj-termek-nev - Abszolút URL-t külső oldalra vagy aldomain célhoz:
https://masik-oldal.hu/termek
Ne redirectelj 404-re
Mielőtt kitöltöd a to mezőt, ellenőrizd, hogy a céloldal tényleg létezik és betölt. Egy 301 → 404 lánc ront a SEO értéken.
Adatbázis karbantartás
Havi rendszerességgel töröld a már kezelt, régi bejegyzéseket, ahol a hits alacsony és az oldal már nem releváns. Az oc_seo_redirect tábla nem nő korlátlanul, mert a PRIMARY KEY megakadályozza a duplikátumokat.
Biztonsági szkennelések
A bot szűrő leveszi a terhet, de időnként érdemes futtatni a gyanús bejegyzések törlése SQL-t, hogy a tábla tiszta maradjon.
Tömeg-redirect importálás
Ha egyszerre sok régi URL-hez szeretnél redirectet felvinni (pl. platfomváltás után), használj CSV importot phpMyAdmin-ban, vagy egy egyszeri INSERT ... ON DUPLICATE KEY UPDATE szkriptet:
INSERT INTO `oc_seo_redirect` (`from`, `to`, `updated`)
VALUES
('/regi-url-1', '/uj-url-1', NOW()),
('/regi-url-2', '/uj-url-2', NOW())
ON DUPLICATE KEY UPDATE
`to` = VALUES(`to`),
`updated` = VALUES(`updated`);
Hibaelhárítás
| Tünet | Lehetséges ok és megoldás |
|---|---|
| Install / Uninstall gomb 500-as hibát dob, az OC error log üres | A szerver PHP error logja tartalmazza a valódi okot (Apache: error.log, cPanel: Errors menü). A bővítmény az event kezeléshez közvetlen SQL-t használ a modell API-k helyett, így OC verzióbeli eltérések nem okozhatnak fatal error-t. Ha mégis előfordul, a tábla és az event manuálisan is létrehozható phpMyAdmin-ból (lásd lent). |
Az oc_seo_redirect tábla nem jött létre |
Az Install gomb nem lett megnyomva, vagy hibás az OC DB prefix. Ellenőrizd a config.php-ban a DB_PREFIX-et, és futtasd az SQL-t kézzel phpMyAdmin-ban. |
| 404 oldalak nem kerülnek a táblába | Az event nem regisztrált. Ellenőrizd az oc_event táblában, hogy létezik-e code = 'seo_redirect' sor. Ha nem, nyomj újra Install-t. |
A redirect nem fut le holott a to ki van töltve |
Ellenőrizd, hogy az oc_event táblában az action mező értéke pontosan extension/module/seo_redirect/catch404. Whitespace vagy elütés megakadályozza a futást. |
| Bot kérések is bekerülnek a táblába | A bot User-Agent nem egyezik az ismert szűrőkkel. Töröld kézzel a sorokat, és szükség esetén bővítsd a $bot_signatures tömböt a catalog controllerben. |
| Redirect loop (végtelen átirányítás) | A to mező visszamutat a from értékre, vagy egy olyan URL-re, ami szintén 404. Ellenőrizd a céloldalt, mielőtt kitöltöd a mezőt. |
Minden kérdés, visszajelzés és hibajelentés a fejlesztőnek küldendő. A bővítmény az oc_seo_redirect táblán kívül semmit sem módosít az áruházban.