Hov. Du er ikke logget ind.
DU SKAL VÆRE LOGGET IND, FOR AT INTERAGERE PÅ DENNE SIDE

JavaScript Sucks!

2.045 Visninger
Hvor mange stjerner giver du? :
12 December 2018

I forhold til SEO har JavaScript altid været noget lort. Og på trods af Googles gentagne påstande om, at de godt kan crawle JavaScript baserede websites oplever vi fortsat store problemer. Og der er ingen udsigt, at det bliver væsentligt bedre indenfor den nærmeste fremtid.

Kort sagt – hvis du vil sikre en ordentlig indeksering og optimering af dit website i Google, så skal du holde dig fra JavaScript – sådan lidt forenklet sagt.

I dette indlæg vil jeg se lidt nærmere på, hvorfor JavaScript er så problematisk i forhold til søgemaskinerne, hvorfor jeg ikke tror det vil ændre sig, og hvad du så stiller op, hvis du alligevel har brug for at lave nogle ting i JavaScript.

Jeg elsker JavaScript

Inden jeg kommer for godt i gang med at bitche over de mange problemer med JavaScript vil jeg godt slå fast, at jeg personligt elsker JavaScript.

Med JavaScript er det muligt at lave utrolig lækre webløsninger, dynamiske elementer og elegante designmæssige features. Og i kombination med andre teknologier kan man helt erstatte ”gammeldags” mobile apps og i stedet lavet Progressive Web Apps (PWA). Det er super lækkert, brugervenligt og datalogisk fornuftigt.

Så min kritik af JavaScript handler på ingen måde om, at jeg ikke kan lide JavaScript, men udelukkende om det faktum, at det giver forbandede store problemer i søgemaskiner, altid har gjort det – og forudser jeg, altid vil gøre det.

Hvad er problemet med JavaScript?

Grundlæggende set er problemet med JavaScript, at JavaScript programmer – i modsætning til almindelig HTML, skal eksekveres før man kan se det indhold, som det resulterer i.

Når du besøger et website der benytter JavaScript klarer din browser denne eksekvering helt automatisk for dig. Det sker i baggrunden, og når eksekveringen er færdig vises indholdet.

Når Google crawler et website downloader de i første omgang blot den kode de finder på siden. Herefter trækker de tekst, referencer til billeder og andre objekter ud og bruger det til indeksering – opbygningen af et søgbart indeks.

Er der JavaScript på siden kan Google godt se det, men det vil (som regel) blot bestå af noget kode, som de ikke direkte kan bruge til indeksering. JavaScript programmet skal eksekveres først.

Eksekvering af JavaScript er faktisk en ret tung proces. Det kræver mange gange mere computerkræft at eksekvere JavaScript end at trække simpel tekst ud af et HTML-dokument.

Når det så skal skaleres op til de mange tusind milliarder websider Google crawler, så bliver det i praksis en næsten uoverkommelig opgave. I hvert fald hvis al JavaScript, der findes på samtlige websider i verden skal eksekveres.

Google eksekverer nogle gange JavaScript. Det er ikke fordi de ikke kan. De har jo f.eks. også bygget en glimrende browser – Chrome, som er rigtig god til at eksekvere JavaScript.

Og det er måske netop det som kan forvirre mange. Officielt set har Google ofte sagt, at de skam godt kan eksekvere JavaScript – og at de gør det, når de crawler et website. Men som sagt er det en sandhed med modifikationer.

JavaScript eksekveres ikke med det samme

Da eksekvering af JavaScript er så tung en opgave gør Google det ikke samtidig med, at de crawler websites og trækker tekster og links ud af HTML koden. JavaScript lægges i første omgang i kø til en senere eksekvering.

Mange tror, at Google har uendeligt mange resurser og er derfor uforstående overfor denne resurse-udfordring. Virkeligheden er dog, at Google som alle andre virksomheder har begrænsede resurser, og jeg ved fra mine mange møder med Googles folk, at de internt altid kæmper for at få flere resurser til lige netop deres afdeling og projekt. 

Om lige dit JavaScript så nogensinde bliver eksekveret af Google er langt fra sikkert. Det sker ikke altid. Og i alle fald vil det altid ske kortere eller længere tid efter resten af indholdet på dine websider er crawlet og indekseret. De to ting er således ikke helt i sync.

Det betyder i praksis, at du kan få en side indekseret i Google, hvor JavaScript ikke er medtaget. Måske kommer det så senere med – uger eller måneder efter, måske ikke.

Hvilken JavaScript engine benyttes

Et andet problem er, at den JavaScript motor Google bruger i deres søgemaskine ikke er den nyeste. P.t. bruger de den der svarer til Chrome 41 – i modsætning til den version 66-70 du sikkert selv sidder med.

Det kan måske lyde som en ligegyldig og lidt nørdet detalje, men det er det bestemt ikke!

Der er nemlig meget stor forskel på hvilke JavaScript funktioner Chrome 41 og Chrome 66 understøtter. Der er derfor stor risiko for, at Google slet ikke forstår dine nyeste, mest avancerede og komplekse JavaScript – hvis de overhovedet eksekverer dem.

Men hvorfor er Google bagud? Hvorfor bruger de ikke bare den nyeste JavaScript motor, når de nu har den i Chrome?

Vi ved det ikke med sikkerhed, men mit bedste gæt er, at jo mere komplekse JavaScript de skal eksekvere, jo tungere bliver processen. Så de er lidt tilbageholdende med at bruge den nyeste version.

En anden forklaring kan være, at det er ret omfattende at tilpasse JavaScript motoren til deres komplekse crawling og indekseringsteknologi, og at de derfor altid vil være nogle versioner bagud i forhold til Chrome browseren.

Muligvis er forklaringen en kombination af begge dele. Men uanset hvad forklaringen er, tror jeg aldrig vi skal regne med at Google – og andre søgemaskiner, nogensinde får en ligeså omfattende JavaScript eksekvering, som du oplever i din browser.

Et andet – og mere generelt problem med indeksering af JavaScript er, at Google aldrig kan være helt sikker på, hvilke JavaScripts lige DU og den browser du sidder med understøtter. Måske understætter din browser ikke helt så meget som Google i princippet kunne.

Og hvorfor er det så et problem?

Det er det fordi, at Google ved fuldt ud at understøtte JavaScript risikerer at indeksere indhold, som du så efterfølgende ikke kan se. Du søger i Google, Google viser dig links til noget de har fundet og mener er relevant, men når du så besøger siden kan du ikke se det. Og det er naturligvis ikke en tilfredsstillende oplevelse som søgebruger.

Det ved Google godt, og det er endnu en af grundende til, at de er tilbageholdende med JavaScript indeksering, og nok aldrig kommer til at understøtte det fuldt ud.

JavaScript caches i Google

Men lad os så sige, at du er så heldig at Google faktisk har eksekveret JavaScript fra dine sider, og at de har indeskeret det sammen med dit øvrige indhold. Hvad sker der så?

Det du så render ind i er det problem, at Google cacher dine JavaScript – eller rettere sagt, eksekveringen af dem, meget længere end de tekster og links der ligger i din HTML-kode. Hvor lang tid det nøjagtigt er kan variere, men ud fra de udmeldinger Google er kommet med i forbindelse med dette ser det ud til at kunne være op til flere måneder.

Når du så opdaterer dit website, så ser Google ikke det opdaterede indhold der ligger i dine JavaScripts. Der kan (i bedste fald) gå måneder før det bliver medtaget.

JavaScript frameworks vinder frem

I de senere år er JavaScript baserede frameworks som React, Vue eller Googles eget Angular blevet mere og mere udbredt. Som udvikler forstår jeg sådan set godt, at mange vælger dette. Det giver nogle spændende muligheder.

Problemet er som sagt bare at lortet ikke virker i Google!

Selv Googles eget JavaScript framework Angular fungerer ikke helt i Google. Ja – paradoksalt nok, har undersøgelser vist, at Google faktisk er dårligere til at indeksere deres eget Angular framework i forhold til f.eks. React fra Facebook. Og hvad endnu værre er, så indekserer Google tilsyneladende Angular 1 bedre end de nyere versioner Angular 2 og 3.

Sidste år skrev jeg en lidt længere gennemgang af nogle af disse resultater, som du kan læse her.

Betyder det så, at du skal holde dig helt væk fra JavaScript frameworks?

Nej, ikke nødvendigvis, men du skal kende konsekvenserne og du skal vide hvad du kan gøre for at kompensere for dem.

Sådan kan du bruge JavaScript på en SEO-venlig måde

Hvis du bygger dit website på et JavaScript framework som Angular, Reach eller Vue og væsentlige dele af dit indhold og links derfor udskrives via JavaScript har du i praksis kun to muligheder:

1)      At acceptere at dit website ikke kan crawles og indekseres i Google – og du derfor ikke vil blive fundet der

2)      At benytte Dynamic Rendering – en teknik hvor JavaScript indhold pre-renderes inden de sendes til søgemaskinernes crawlere. Du kan læse lidt mere om Dynamic Rendering her. 

Den første løsning kan de færreste nok acceptere.

Den anden løsning vil dine udviklere og server administratorer muligvis ikke være lykkelige for. Dels kræver den naturligvis noget ekstra udvikling og vedligehooldelse og dels kræver det en del ekstra resurser på serveren.

For, som sagt, JavaScript kræver mange flere resurser at eksekvere end HTML, og hvis du så flytter (dele af) eksekveringen til din server, så så vil det naturligvis kræve at den skal have tildelt nogle flere resurser for at kunne håndtere det.

En anden udfordring med denne løsning er hastighed. Du risikerer meget let, at Google kommer til at opfatte dine sider som langsommere, hvis den server baserede rendering tager for lang tid – og det kan have alvorlige konsekvenser for deres vurdering af dine sider og dermed hvor godt de ranker.

Hvis du ikke benytter et JavaScript framework, men derimod blot vil have nogle funktioner på dit website som er baseret på JavaScript, så er problemet langt mindre.

I det tilfælde skal du, for at være på den sikre side, betragte JavaScript som et ”sort hul” – et element på dine sider som Google ikke kan se.

Du skal sørge for, at den vigtige tekst på dine sider, som Google skal læse for at forstå hvad de handler om, og links som de skal kunne følge, fortsat bliver udskrevet som almindelig HTML.

At der så er nogle ”sorte huller” på siden, som Google ikke kan forstå, betyder ikke så meget. De bliver bare ignoreret.

Hvis du er i tvivl om hvad Google ser – hvad der udskrives med JavaScript og HTML, så prøv at slå JavaScript eksekvering fra i din browser.

I Google Chrome kan jeg anbefale, at du installerer udvidelsen Web Developer, der gør det let bl.a. slå JavaScript fra.

Uden JavaScript skal dine sider stadig vise alt det væsentlige indhold, overskrifter på siden og alle links. Mangler der noget så har du et problem der bør rettes.

Er Dynamic Rendering cloaking?

Cloaking er en teknik, der tidligere blev brugt meget i SEO, hvor man viser forskelligt indhold til Google og brugerne.

På den måde kan man lave nogle tekst-tunge sider med masser af de rigtige keywords til Google og så vise brugerne nogle mere kompakte, salgsorienterede og måske grafiske sider.

Både Google og Bing har altid betragtet cloaking som ”spam” og hvis de opdager at et website gør det, så kan det få negative konsekvenser.

Google har tidligere påstået, at de har automatiske systemer, der kan identificere cloaking. Jeg har altid tvivlet lidt på det. I hvert fald må jeg konstatere, at de i så fald ikke helt virker efter hensigten. Så enten lyver de, eller er inkompetente :-)

Men nogle gange opdager Google – på den ene eller den anden måde cloaking, og der har gennem tiden været masser af eksempler på de negative konsekvenser det kan have.

Men er Dynamic Rendering så cloaking?

Ja, teknisk set er det. Man viser noget til Google og noget andet til de almindelige besøgende.

Google der selv har været med til at introducere Dynamic Rendering siger at de bestemt ikke vil opfatte det som cloaking. Problemet er bare, at der ikke følger garantier med. Du får ikke ”pengene igen” hvis du p.g.a. Dynamic Rendering pludselig står tilbage med et website der er smidt ud af deres indeks.

Jeg tror risikoen reelt set er meget lav, men jeg må være ærlig at sige at den bestemt eksisterer.

Bliver det aldrig bedre med JavaScript og SEO?

Det korte svar er: Nej.

Det lidt længere svar er, jo det bliver hele tiden bedre. Google kan i dag håndtere meget mere JavaScript end de kunne for bare få år siden. Men af de grunde jeg nævner ovenfor, er jeg ret sikker på at JavaScript eksekveringen aldrig bliver perfekt, de vil fortsat cache JavaScripts længe, nogle vil aldrig blive eksekveret og konsekvensen er derfor, at du ikke kan stole på det virker.

Jeg er meget fortaler for sikre og stabile løsninger hvor de både kort- og langsigtede resultater er til at forudse. Også når det gælder SEO.

Faktum er, at selvom du måske nogle gange kan være heldig at det går OK med JavaScript på dine sider i forhold til Google, så kan du ikke altid regne med det. Det er i bedste fald ustabilt og usikkert og derfor ikke værd at satse på.

Hvor mange stjerner giver du? :
Vær den første til af få Mikkel blogindlæg Skriv dig op