SEO URL rewrite() fix
A startup/seo_url controller rewrite() metódusa nem kezeli a common/home route-ot (és más egyedi route-okat sem) – emiatt a főoldal és más egyéni oldalak URL-je nem kapja meg a SEO-barát alakot, hanem az eredeti /index.php?route=common/home formában marad.
A probléma
A rewrite() metódus csak ezeket a route-okat kezeli:
product/product+product_idparaméterproduct/manufacturer/info+manufacturer_idparaméterinformation/information+information_idparaméterpathparaméter (kategóriák)
Ha a bejövő link egyikre sem illeszkedik – például route=common/home –, a belső $url változó üres marad, és a metódus visszaadja az eredeti, SEO URL nélküli linket. A főoldal így nem a https://garazstechnika.hu/ URL-t, hanem az /index.php?route=common/home alakot kapja.
seo_url táblában, a Teljes javítás ajánlott – ez minden, az adatbázisban nyilvántartott route-ot kezel.
Hogyan működik?
URL parse-olás
A rewrite($link) a kapott linket parse_url()-lal szétbontja, majd a query string-ből parse_str()-gel kinyeri a paramétereket (pl. route, product_id, path).
Route azonosítás és SEO kulcsszó keresés
Az eredeti kód a kinyert paraméterek alapján meghatározza az entitás típusát (termék, gyártó, information, kategória), majd SQL-lel lekérdezi a megfelelő SEO kulcsszót a seo_url táblából. A common/home route erre a logikára nincs ráakasztva.
URL összerakás
Ha megvan a kulcsszó, a metódus visszaad egy tiszta URL-t: scheme://host/kulcsszo. Ha a kulcsszó üres (mint a common/home esetén), az eredmény csak scheme://host/ – azaz a domain gyökere, ami a főoldal helyes URL-je.
Generikus lookup (teljes javítás)
A teljes javítás a seo_url táblát query oszlop szerint keresi – ott a common/home sor keyword értéke üres string, így az összerakott URL https://garazstechnika.hu/ lesz. Minden más, táblában szereplő route ugyanígy kap SEO URL-t. Az adatbázisba fel nem vett route-ok változatlanul az eredeti linket kapják vissza.
Gyors javítás – csak common/home
Ez a megoldás kizárólag a főoldal URL-jét javítja. Nem igényel adatbázis módosítást.
Keresd meg a rewrite() metóduson belül a foreach ($data as $key => $value) sort. Szúrd be az alábbi blokkot közvetlenül elé:
// Homepage SEO URL fix
if (isset($data['route']) && $data['route'] == 'common/home') {
return $url_info['scheme'] . '://' . $url_info['host']
. (isset($url_info['port']) ? ':' . $url_info['port'] : '')
. str_replace('/index.php', '', $url_info['path']);
}
A módosítás után a rewrite() eleje így néz ki:
public function rewrite($link) {
$url_info = parse_url(str_replace('&', '&', $link));
$url = '';
$data = array();
parse_str($url_info['query'], $data);
// Homepage SEO URL fix
if (isset($data['route']) && $data['route'] == 'common/home') {
return $url_info['scheme'] . '://' . $url_info['host']
. (isset($url_info['port']) ? ':' . $url_info['port'] : '')
. str_replace('/index.php', '', $url_info['path']);
}
foreach ($data as $key => $value) {
// ... többi kód változatlan
https://garazstechnika.hu/ lesz.
Teljes javítás – generikus route lookup
Ez a megoldás a common/home-on túl bármely, a seo_url adatbázis táblában rögzített route-ot kezeli. Jövőbeli egyedi oldalakhoz sem kell majd visszatérni a kódhoz – elegendő az adatbázisba felvenni az új route-ot.
Szúrd be az alábbi blokkot a rewrite() metódusban a foreach ($data as $key => $value) sor elé (a gyors javítás helyett vagy helyett):
// Generikus route lookup a seo_url táblából
if (isset($data['route'])) {
$query = $this->db->query(
"SELECT * FROM " . DB_PREFIX . "seo_url"
. " WHERE `query` = '" . $this->db->escape($data['route']) . "'"
. " AND store_id = '" . (int)$this->config->get('config_store_id') . "'"
. " AND language_id = '" . (int)$this->config->get('config_language_id') . "'"
);
if ($query->num_rows) {
$keyword = $query->row['keyword'];
unset($data['route']);
$query_str = '';
if ($data) {
foreach ($data as $k => $v) {
$query_str .= '&' . rawurlencode($k) . '=' . rawurlencode($v);
}
$query_str = '?' . str_replace('&', '&', trim($query_str, '&'));
}
return $url_info['scheme'] . '://' . $url_info['host']
. (isset($url_info['port']) ? ':' . $url_info['port'] : '')
. str_replace('/index.php', '', $url_info['path'])
. ($keyword ? '/' . $keyword : '')
. $query_str;
}
}
seo_url táblában a common/home sorhoz tartozó keyword mező értéke üres string. Ezért a visszaadott URL-ben /keyword rész nem kerül hozzáfűzésre, az eredmény: https://garazstechnika.hu/.
seo_url táblába. A common/home alapból szerepel (üres keyword-del), de egyedi extension route-okhoz manuálisan kell felvenni a sort.
Adatbázis sor ellenőrzése / felvétele
Ellenőrizd, hogy a common/home sor létezik-e (a táblajavaslat előtag telepítésenként eltérhet – alapértelmezetten oc_):
SELECT * FROM oc_seo_url WHERE `query` = 'common/home';
Ha nincs találat, vedd fel:
INSERT INTO oc_seo_url (store_id, language_id, `query`, keyword)
VALUES (0, 1, 'common/home', '');
store_id és language_id értékét az éles bolt beállításaihoz igazítsd (Admin → System → Settings és Admin → Localisation → Languages).
Cache törlése
A kód módosítása után töröld az OpenCart cache-t, különben a régi SEO URL-ek maradnak érvényben.
Admin cache frissítés
Admin → Dashboard → fogaskerék ikon (jobb felső sarok) → Refresh
Böngésző cache törlése
Ctrl+Shift+R (Windows/Linux) vagy Cmd+Shift+R (Mac) – hard reload, amely figyelmen kívül hagyja a böngésző cache-t.
Ellenőrzés
Navigálj a főoldalra. A böngésző URL-sávjában https://garazstechnika.hu/ kell megjelenjen – index.php?route= nélkül.
Fájlszerkezet
Változásnapló
| Verzió | Dátum | Változás |
|---|---|---|
| 1.1 | 2026-03-31 | Generikus route lookup hozzáadva (seo_url tábla alapján) – kezeli a common/home-t és bármely egyéb táblában szereplő route-ot is. A gyors (csak common/home) javítás dokumentálva maradt alternatívaként. |
| 1.0 | 2021-02-11 | Első kiadás. Probléma azonosítva: rewrite() nem kezeli a common/home route-ot, a főoldal URL SEO nélkül marad. |