Regex / regulære udtryk i Shoporama

Denne blog post er skrevet af den erfarne udvikler og webshop-administrator Lars Holmgaard, som er involveret i flere Shoporama shops. Han har lavet de vildeste hacks med Shoporama og fik os overtalt til at lave redirects med regulære udtryk. Det skal et webshop system selvfølgelig have, så det er vi taknemmelige for.
Vi har overtalt ham til at lave en tutorial om emnet og den følger her:

Hvad er regex?

Måske kender du begrebet wildcards, hvor man fx. kan sætte en stjerne ind i stedet for nogle tegn. Jeg synes jeg kan huske fra bibliotekerne i gamle dage at man kunne søge efter “Dennis J*” hvis man ikke lige kunne huske efternavnet på forfatteren Dennis Jürgensen. Så fandt computeren alle de forfattere, der hed Dennis Jensen, Dennis Jørgensen og Dennis Jürgensen. Stjernen erstatter resten af ordet, så man slipper for at gætte på stavemåden. På samme måde kunne man erstatte et enkelt bogstav med et spørgsmålstegn.
Regex fungerer på samme måde. Regex er bare en udvidet nørde-version af stjerne og spørgsmålstegn, så der nu er kommet brede fælge og rævehale på.

Roger. Hvad kan man så bruge regex til?

Regex er ret smart til mange ting, hvor der skal matches et mønster. Det kunne fx. være at du har skiftet shopsystem til Shoporama og gerne vil fortælle Google og dine besøgende at du fremover får nogle lækre og ikke mindst unikke adresser på dine produkter i stedet for de gamle grimme som måske oven i hatten er indekseret med forskellige variabler efter selve url’en. Flere forskellige adresser med samme indhold hedder duplicate content, som du måske har hørt man skal undgå i forbindelse med søgemaskineoptimering.
Lad os sige du har en kategoriside som var indekseret i Google på bl.a. denne adresse fra din gamle shop: /Sprayers.11081/page11081.aspx?recordid11081=788.

Og ja, det er en ægte url fra en webshop – ikke en jeg har fundet på.

Nu skifter du til Shoporama, hvor hver side kun har én url – lige som det skal være. Du laver en ny fin url til din kategori, som du helt enkelt kalder /sprayers.
Alt er godt. Sådan da. I din Google Search Console opdager du efter nogle dage at der er et væld af webadressefejl:
Regulære udtryk i Shoporama

 

 

 

 

 

I praksis har ovenstående 941 fejl den effekt at en bruger fx. søger efter ‘sprayers’, klikker i Googles søgeresultat og lander på en side, der ikke findes mere. En 404-side, som det hedder.

Det er ikke så godt. Det skal fixes. Google skal fortælles, hvor de sider er blevet af. Du skal lave det, der hedder redirects.
Under grafen ser du de url’er som Google har i sit indeks, men som ikke længere findes på din nye shop på samme adresse. Herunder er der vist 10 url’er, der ikke findes mere. Men, der er faktisk 52 i alt, hvilket er helt skandaløst dårligt.

Regex Shoporama

 

 

 

 

 

 

 

 

Kan du se et mønster?

Hvis nu du ikke havde lært om regex (du får detaljerne senere) så ville du måske begynde at lave redirects til hver enkelt af de 52 url’er som hedder noget med ‘sprayers’ og pege dem ind på kategorisiden /sprayers. Men, det er spild af tid. Det kan nemlig gøres med én linies regex.

Sådan gør du

Jeg vil kort beskrive de mest populære ‘koder’ i regex, så du hurtigt kan komme i gang. Du kan altid undersøge nærmere om der skulle være en kortere og smartere måde at skrive dine regex på, men bare med disse koder kan du komme ret langt.

  • [0-9]+ angiver at her er der en sektion, hvor der kan være cifre fra 0 til 9. Plusset bag de kantede paranteser angiver at der kan være et eller flere cifre.
  • [a-z]* angiver at her er der en sektion, hvor der kan være bogstaver fra a-z. Stjernen bag parantesen angiver at der kan være 0 eller flere bogstaver i modsætning til plusset, hvor der skulle være mindst ét tilfælde af et match.
  • (fisk|lam|rådyr) angiver en gruppe, hvor der enten skal stå fisk, lam eller rådyr.
  • . angiver et hvilket som helst tegn. Punktum kan altså både stå for et tal, et bogstav eller et specialtegn.

For at angive over for regex fortolkeren, hvad der er en kommando og hvad der bare er et tegn, så skal du escape et specialtegn ved at skrive \ foran tegnet. Det skal du fx gøre foran et punktum.

Ovenstående kan du nemt kombinere så du fx. laver et match, der ser sådan her ud:

[a-z0-9.-_]+@[a-z0-9]+\.(com|dk|de|org)

Kan du regne ud, hvad ovenstående regex kan lave et match på? I første kantede parantes kan der stå et eller flere bogstaver, tal eller punktum, bindestreg og underscore. Derefter skal der stå et snabela. Så kommer der et eller flere bogstaver eller tal, derefter et punktum og til sidst skal der enten stå com, dk, de eller org. Denne regex kan dermed bruges til at checke om en tekst ligner en email, hvor afsenderen har en .com, .dk, .de eller .org email adresse. Der findes formentligt email adresser, der ikke passer i netop det regex filter, men så kan man justere det og lave det smartere.

Prøv at sætte regex’en ind på denne side og skriv din email adresse i det store felt nedenunder: http://www.regexr.com/ - bliver teksten blå, så har du lavet et match.

Godt. Du er med nu.

Hvis jeg skulle redirecte alle de fejl-url’er med sprayers over til den nye fine /sprayers url, så ville jeg ganske enkelt klikke her https://www.shoporama.dk/admin/da/redirect/new og skrive sådan:

Smarte redirects i Shoporama

 

 

 

 

 

Husk at sætte kryds i at det er et regular expression du har lavet. Ellers bliver dit redirect tolket som et ganske almindeligt redirect.

Men, der er jo ikke vilde koder i? Nej. Det er slet ikke sikkert det er nødvendigt. Jeg kan se på de url’er der mangler at de alle starter med sprayers.11081 og at det tal nok er ret unikt bundet sammen med den kategori. Derfor kan jeg tillade mig at antage at hvis min regex matcher på sprayers.11081 så matcher den højst sandsynligt korrekt og tager ikke forkerte url’er med.

Ovenstående enkle regex kan løse 52 ud af de 941 fejl, som Google Search Console er stødt på. Hvis resten er noget i samme stil så kan man hurtigt komme de fejl til livs og resten kan man altid redirecte manuelt.

Læg mærke til at du ikke behøver at matche hele udtrykket. Det kommer helt an på, hvor sikker du er i din sag mht de url’er du gerne vil matche. Jeg har på samme shop oplevet tusindevis af url’er, hvor en tilfældig kategori stod forrest og derefter fulgt af et varenummer inde i midten og til sidst en masse parametre. Det eneste unikke var varenummeret – alt andet fulgte et mønster, hvor det kunne være forskellige tal og bogstaver, men på samme pladser. Derfor matchede jeg grupperne med tal og bogstaver op med varenummeret og lavede et redirect over til produktets nye og endelige url på den nye shop.

Som nævnt tidligere, så brug endelig www.regexr.com og test dine udtryk før du implementerer dem. Skriv url’erne i det nederste store felt og øv dig på at skrive korrekte regex inden du implementerer dem i Shoporama. Jeg har fx. brugt regex på http://shop.dandrone.dk og flere andre shops.

Sigt efter at udrydde alle 404-fejl i GSC.

God fornøjelse med det!

2 thoughts on “Regex / regulære udtryk i Shoporama”

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>