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.

OpenCart 3.0.5.0 OC Event hook Zero core mod Admin UI nélkül

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

1

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.

2

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.

3

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'

4

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

404 kérés érkezik │ ▼ URI kinyerése + normalizálás │ ▼ Bot szűrés ── BOT ──▶ return (OC rendereli a 404-et)NEM BOT │ ▼ DB lekérdezés: van-e `from` bejegyzés? │ ├── VAN + `to` ki van töltve ──▶ header Location 301 + exit │ ├── VAN + `to` NULL ──────────▶ hits++ → return (404 oldal) │ └── NINCS ────────────────────▶ INSERT → return (404 oldal)

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:

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.