Nikola Arsić

PrestaShop friendly URL: uklanjanje ID-a, rewrite i canonical

Nikola ArsićPrestaShop

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 Dispatcher i Link koji to isto radi ručno.

Oba rade. Oba nose iste tri cene, i treba da odlučite sa njima na stolu:

  1. Upit na svaki zahtev. Stavljate razrešavanje slug-a u ID ispred rutera. Keširajte ga ili ćete ga osetiti.
  2. 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.
  3. 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

  1. Friendly URL uključen, .htaccess regenerisan, rewrite proveren direktnim zahtevom
  2. Šabloni ruta izabrani tako da jedan proizvod ima jedan URL
  3. Canonical sređen na filterima, paginaciji i multistore-u
  4. Redirekcije postavljene za sve što je već menjano
  5. 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.