PrestaShop friendly URL: uklanjanje ID-a, rewrite i canonical
Svaka PrestaShop prodavnica dođe do istog pitanja posle nekih šest nedelja:
zašto URL proizvoda i dalje izgleda kao /12-plavi-vidzet kad je friendly URL
uključen, i može li broj da se skloni?
Ukratko: broj nosi rutu, moguće ga je skloniti ali skupo, a postoje tri druga problema sa URL-ovima koji vas koštaju više saobraćaja i mnogo su jeftiniji za rešavanje. Ovo je redosled kojim stvarno radim na klijentskim prodavnicama.
Kako PrestaShop sklapa URL
PrestaShop ne traži proizvod po slug-u. Izvuče ID iz putanje i pita bazu po primarnom ključu. Slug pored njega je ukras za ljude i za pretraživače.
Zato podrazumevana ruta proizvoda izgleda ovako:
/{id}-{rewrite}
/{kategorija}/{id}-{rewrite}
Dispečer gleda numerički segment. Promenite slug i URL se i dalje razrešava, jer ID radi posao. To ponašanje vam je ujedno i sigurnosna mreža: preimenovan proizvod ne pada u 404.
1. Uključite friendly URL kako treba
SEO i URL → Podešavanje URL-ova → Friendly URL: Da. Pa onda, na istom
ekranu, regenerišite .htaccess. Preskakanje te regeneracije je najčešći
razlog zašto friendly URL „ne radi" - opcija se prebaci, rewrite pravila se
nikad ne upišu, i svaki lep URL pada u 404.
Na Nginx-u .htaccess uopšte ne postoji, i PrestaShop ne može da vam piše
konfiguraciju. Treba vam rewrite blok u konfiguraciji servera, i mora da se
ponovo učita. Ako vam hosting drži Nginx, to je tiket podršci, a ne opcija.
Proverite tako što ćete direktno zatražiti URL kategorije, a ne kliknuti na link. Klik dokazuje da je link generisan; direktan zahtev dokazuje da se rewrite razrešava.
2. Sredite šablone ruta pre nego ID-jeve
Sekcija „Šema URL-ova" na istoj stranici kontroliše same šablone ruta, a podrazumevane vrednosti su gore nego što većina misli.
Ruta kategorije podrazumevano uključuje celu putanju kategorije, što znači da proizvod dostupan kroz tri kategorije ima tri URL-a. To je duplirani sadržaj napravljen konfiguracijom, a ne sadržajem, i to je najveći problem sa URL-ovima na većini PrestaShop prodavnica.
Dva rešenja koja se drže:
- Svedite rutu proizvoda na
/{rewrite}plus ID, tako da proizvod ima tačno jedan URL bez obzira na kategoriju. To radim na većini prodavnica. - Zadržite kategoriju u putanji, ali onda obavezno obezbedite da canonical pokazuje na jednu izabranu putanju.
Ono što ne smete: ostaviti kategoriju u putanji i pretpostaviti da će PrestaShop sam počistiti duplikate. Neće.
3. Canonical
PrestaShop jeste izbacuje canonical na stranicama proizvoda i kategorija, i za prost slučaj obično je tačan. Za ove obično nije:
- Filteri. Kombinacije filtera prave URL-ove sa query stringovima čiji canonical ili pokazuje na njih same, ili se direktno indeksiraju. I jedno i drugo je loše. Canonical filtrirane stranice treba da pokazuje na nefiltriranu kategoriju, a kombinacije koje stvarno želite u indeksu treba da budu namerna, kratka lista.
- Paginacija. Ako canonical strane 2 pokazuje na stranu 1, sve iza prve strane nestaje iz indeksa. Canonical strane 2 treba da pokazuje na nju samu.
- Multistore. Svakoj prodavnici treba svoj canonical host. To puca tiho i ostaje pokvareno.
Sredite canonical pre nego što dirate ID-jeve. Košta jedno popodne, a tu je pravi duplirani sadržaj.
4. Uklanjanje ID-a
Sad pitanje sa kojim svi počinju.
PrestaShop jezgro to ne može. Dispečeru treba ID da razreši rutu, pa uklanjanje znači jedno od dva:
- Modul koji presretne rutu i sam razreši slug u ID, obično preko dodatne tabele za pretragu.
- Override klasa
DispatcheriLinkkoji to isto radi ručno.
Oba rade. Oba nose iste tri cene, i treba da odlučite sa njima na stolu:
- Upit na svaki zahtev. Stavljate razrešavanje slug-a u ID ispred rutera. Keširajte ga ili ćete ga osetiti.
- Sudari slug-ova postaju 404. Dva proizvoda po imenu „Plavi vidžet" u različitim kategorijama bila su u redu dok ih je ID razlikovao. Sad nisu.
- Teret pri nadogradnji. Override dispečera je među prvim stvarima koje pucaju pri prelasku na veću verziju. Ako ste na PrestaShop 1.7 ili 8 i idete ka 9, radite ovo posle migracije, ne pre.
I onaj pošten deo: dobitak u rangiranju je mali. Google godinama otvoreno kaže da je struktura URL-a slab signal. Čist URL je lepši za deljenje i neznatno bolji za klik u rezultatima. Nije ono što vas drži na drugoj strani.
Ako imate prodavnicu sa stvarnim prihodom i stabilnim kodom, to je razumna sitnica za doterivanje. Ako imate duplirane URL-ove iz filtera i pokvaren canonical, njihovo sređivanje doneće daleko više saobraćaja uz delić rizika.
5. Redirektujte sve što menjate
Svaka promena URL-a traži 301 sa stare putanje. PrestaShop će rado promeniti slug proizvoda čim neko u admin panelu izmeni ime - bez redirekcije, tiho. U prodavnici gde više ljudi uređuje proizvode, to je sporo curenje.
id_product u putanji vas ovde spasava - stari URL se i dalje razrešava - što
je još jedan razlog da budete odmereni, a ne željni, oko uklanjanja ID-a.
Redosled kojim stvarno radim
- Friendly URL uključen,
.htaccessregenerisan, rewrite proveren direktnim zahtevom - Šabloni ruta izabrani tako da jedan proizvod ima jedan URL
- Canonical sređen na filterima, paginaciji i multistore-u
- Redirekcije postavljene za sve što je već menjano
- Tek onda, ako je kod stabilan i prodavnica nije usred migracije, razmisliti o uklanjanju ID-jeva
Većina prodavnica nikad ne stigne do koraka pet. Skoro svima trebaju koraci jedan do četiri, a većina nikad nije uradila korak tri.