Felsökning Teknisk SEO

JavaScript SEO: läsbar HTML och fungerande interaktion

Kontrollera vad sidkällan innehåller före JavaScript. Skilj statiskt innehåll, serverrendering och interaktiva verktyg med praktiska tester.

Få ett förslag på teknisk SEOAnvänd arbetsbladet

Förfrågan utan beställning. Omfattning och pris bekräftas i förslaget.

Det här tar du med dig

  1. En tom app-shell utan serverrenderad HTML innebär att ditt innehåll kanske inte är tillgängligt för alla besökare.
  2. Renderingsstrategi väljs per sidtyp – statiska informationssidor behöver inte samma lösning som dynamiska dashboards.
  3. Formulär behöver serverfallback som returnerar HTTP-status, inte bara klient-side JavaScript-validering.
Diagnostisera JavaScript-rendering
  1. Testa utan JavaScript

    Stäng av JavaScript i webbläsaren och ladda sidan – kontrollera om huvudinnehåll och menylänkar fortfarande visas.

  2. Granska HTML-källkoden

    Öppna sidans källkod och sök efter ditt huvudinnehåll. Om du bara ser en tom div behöver du serverrendering.

  3. Verifiera statuskoder

    Kontrollera att alla sidladdningar ger HTTP 200 och att eventuella redirects ger 301 utan loopar eller kedjor.

Skilj symptom från orsak innan du ändrar något. RANGELs arbetsmodell för frågan i guiden.

Varför JavaScript skapar en strukturell SEO-risk

En webbplats byggd som en single-page application levererar i grundläget en HTML-fil med nästan inget innehåll – en tom behållare, ofta kallad app-shell. JavaScript-paketet laddas, exekveras och fyller sedan sidan med innehåll i webbläsaren. För en människa med snabb uppkoppling och aktiverat JavaScript märks skillnaden knappt. Men för en crawler som arbetar utan full JavaScript-exekvering, för en användare med hjälpmedel eller för någon som besöker sidan på ett äldre nätverk, är skillnaden avgörande.

Problemet är inte att JavaScript är fel teknologi – det är att HTML-källan, den text som skickas från servern till klienten, är tom på det innehåll som faktiskt har värde. Rubriker, brödtext, interna länkar, formulärfält och navigationsmenyer existerar i källkoden enbart som abstrakta platshållare. Allt meningsfullt innehåll läggs till av JavaScript i efterhand, i webbläsarens minne, inte i den initiala HTTP-responsen.

Det finns en praktisk distinktion att hålla fast vid: det är inte förbjudet att använda JavaScript, och det är inte heller garanterat att klient-renderat innehåll aldrig indexeras. Men det är en strukturell risk att lita på att indexering alltid sker korrekt och i rätt tid. För en webbplats med komplexa produktsidor där indexeringskravet är högt är den risken värd att undersöka, eftersom alternativet – läsbar HTML direkt i källkoden – är tillgängligt i de flesta moderna ramverk.

Den här guiden beskriver hur du diagnostiserar problemet, väljer rätt strategi och implementerar lösningen steg för steg. Vi behandlar renderingstrategier, semantiska krav på formulär och navigationsmenyer, och vi ger ett illustrativt typfall för att göra beslutspunkterna konkreta. Om du vill börja med en övergripande teknisk genomgång är vår SEO-checklista för att kontrollera det som blockerar först ett bra startläge.

Diagnostisera din webbplats: tre konkreta tester

Innan du väljer renderingstrategi måste du veta exakt vad din nuvarande implementation levererar i HTML-källan. Det finns tre tester som ger dig den informationen utan att kräva externa verktyg.

Test 1: Inaktivera JavaScript och ladda om sidan

I Chrome: öppna DevTools, tryck Command+Shift+P (Mac) eller Ctrl+Shift+P (Windows), skriv "Disable JavaScript" och ladda om sidan. Det du ser är ungefär vad en crawler utan JavaScript-exekvering ser. Notera exakt vilka element som saknas: försvinner huvudmenyn? Är produktrubriker och prisinformation borta? Är brödtexten en tom div?

Dokumentera fynden per sidtyp: startsida, kategorilistsida, produktsida, kontaktsida. Olika sidtyper har ofta olika renderingsbeteende beroende på hur komponenterna är uppbyggda.

Test 2: Granska HTML-källkoden direkt

Högerklicka och välj "Visa sidkälla" (inte "Inspektera element" – det visar det JavaScript-manipulerade DOM-trädet, inte den initiala HTML-responsen). Sök efter din viktigaste H1-rubrik och tre–fyra centrala meningar från brödtexten. Om de inte finns i källkoden är de klient-renderade och potentiellt osynliga.

Kontrollera också att interna länkar finns som vanliga <a href="/sida/">-element i källkoden. JavaScript-genererade navigationsvägar som bara finns i det exekverade DOM-trädet räknas inte som crawlbara HTML-länkar.

Test 3: Kontrollera HTTP-statuskoder och redirects

Använd curl eller ett liknande verktyg för att se HTTP-headern direkt. En JavaScript-baserad redirect – till exempel window.location.href = "/ny-sida/" – är osynlig på HTTP-nivå och levereras till crawlern som en 200-statuskod på den gamla URL:en, med JavaScript-koden i kroppen. Det är fundamentalt annorlunda mot en korrekt 301-redirect på servernivå. För en djupare förståelse av hur HTTP-omdirigeringar fungerar är MDN:s dokumentation om Redirections in HTTP ett lämpligt komplement att granska.

Dessa tre tester ger dig ett faktabaserat underlag för att prioritera åtgärder. Utan dem riskerar du att implementera en renderingstrategi baserad på antaganden snarare än faktiska problem.

Renderingsstrategier: statisk, SSR och klient-side

Det finns tre principiella renderingsstrategier, och de är inte ömsesidigt uteslutande. Moderna ramverk tillåter hybridlösningar där olika routes hanteras med olika strategier. Förståelsen av tradeoffs är central för att fatta rätt beslut per sidtyp.

Statisk förgenerering (SSG)

Vid byggtillfället genereras kompletta HTML-filer för varje sida. Dessa lagras och serveras direkt utan serverlogik per request. Fördelen är maximal prestanda, enkel skalning via CDN och fullständig HTML-läsbarhet från första bytet. Nackdelen är att innehållet är fruset vid byggtillfället – en produktsida med lagerdata som uppdateras varje timme lämpar sig inte för ren SSG utan inkrementell regenerering.

Astro förgenererar normalt statisk HTML; behovsstyrd serverrendering kan väljas per route. Det innebär att du i ett Astro-projekt kan låta marknadsföringssidor vara statiska medan en kundportal med realtidsdata hanteras med SSR – allt inom samma kodbas.

Server-side rendering (SSR)

HTML genereras vid varje request på servern och skickas till klienten som färdig markup. Innehållet kan vara dynamiskt och personaliserat. Nackdelar: varje request kräver serverbearbetning, vilket introducerar latens och ställer krav på serverkapacitet. För innehåll som sällan ändras och som är lika för alla besökare är SSR överdrivet – SSG är snabbare och billigare.

Klient-side rendering (CSR)

Servern levererar ett minimalt HTML-skal. Allt innehåll laddas och renderas av JavaScript i webbläsaren. Lämpligt för delar av en applikation som inte ska indexeras – ett inloggat dashboard, ett administrativt gränssnitt, ett konfigurationsverktyg. Olämpligt för landningssidor, produktsidor, bloggar eller annat innehåll som ska vara sökbart och tillgängligt.

En vanlig missuppfattning är att valet är binärt: antingen full SSR eller full CSR. I praktiken är hybrid den bästa lösningen för de flesta B2B-sajter: statiska sidor för innehåll som sällan ändras, SSR för dynamiska routes med inloggningsberoende data, och CSR isolerat till komponentdelar som genuint inte behöver indexeras.

Beslutstabell: välj renderingstrategi per sidtyp

Renderingsstrategi per sidtyp – vägledande beslutsfaktorer
Sidtyp Uppdateringsfrekvens Personalisering Indexeringskrav Rekommenderad strategi Kritiskt att verifiera
Startsida och landningssidor Sällan (dagar–veckor) Ingen Högt Statisk förgenerering (SSG) H1, meta description och interna länkar i HTML-källan
Produkt- och tjänstsidor Ibland (prisjusteringar, lager) Liten eller ingen Högt SSG med inkrementell regenerering, eller SSR Strukturerad data, canonical URL och att prisinformation finns i källkoden
Kategorilistsidor med filter Kontinuerlig (sortiment) Liten (filter i URL) Medelhögt – välj canonical för filterparametrar SSG för baslistan, CSR för filterinteraktion utan ny indexerbar URL Att filterparametrar inte skapar duplicerat innehåll utan korrekt canonical
Blogg och guider Sällan efter publicering Ingen Högt Statisk förgenerering (SSG) Att interna länktexter är beskrivande och att artikelstruktur finns i källkoden
Kontaktformulär och offertförfrågan Kontinuerlig (formulärlogik) Ingen i initial vy Medelhögt (sidan indexeras, men formuläret behöver serverfallback) SSG eller SSR – formulärets action måste peka på serverroute Att action-attributet, felmeddelanden och bekräftelse hanteras på servernivå
Inloggat dashboard eller kundportal Realtid Full personalisering Inget (bakom autentisering) CSR eller SSR med autentiseringskontroll Att robots.txt eller meta robots blockerar indexering av dessa routes
Söksida med interna sökresultat Realtid Beroende av sökfråga Lågt – sökresultatsidor bör ofta noindex:as CSR eller SSR med noindex-header Att canonical och noindex är korrekt satta; se guiden om canonical och indexering

HTML-källan innan och efter: konkreta kodexempel

Abstrakta beskrivningar av renderingsproblem är svåra att agera på. Här är ett konkret exempel på vad en klient-renderad produktsida levererar i HTML-källkoden, jämfört med en korrekt server-renderad eller statiskt förgenererad version av samma sida.

Före: tom app-shell (CSR)

<!DOCTYPE html>
<html lang="sv">
<head>
  <meta charset="UTF-8">
  <title>Produkter | Företaget AB</title>
</head>
<body>
  <div id="app"></div>
  <script src="/bundle.js"></script>
</body>
</html>

Källkoden innehåller ingen rubrik, ingen brödtext, inga interna länkar och ingen strukturerad produktinformation. Allt renderas av bundle.js i webbläsaren.

Efter: server-renderad HTML med innehåll

<!DOCTYPE html>
<html lang="sv">
<head>
  <meta charset="UTF-8">
  <meta name="description" content="Industriell mätningsutrustning för tillverkande industri.">
  <title>Mätningsutrustning | Företaget AB</title>
  <link rel="canonical" href="https://www.foretagetab.se/produkter/matningsutrustning/">
</head>
<body>
  <nav>
    <a href="/">Startsida</a>
    <a href="/produkter/">Produkter</a>
    <a href="/kontakt/">Kontakt</a>
  </nav>
  <main>
    <h1>Mätningsutrustning för tillverkande industri</h1>
    <p>Våra precisionsgivare är avsedda för kontinuerlig drift i krävande miljöer.
       Modell X-400 klarar temperaturer mellan -40 och 120 grader Celsius.</p>
    <a href="/produkter/matningsutrustning/x-400/">Läs mer om X-400</a>
  </main>
  <script src="/bundle.js"></script>
</body>
</html>

Nu innehåller källkoden navigationsmenyn som vanliga href-element, en semantisk H1, produktbeskrivning i brödtext och en intern länk till undersidan. JavaScript laddas fortfarande – men det är ett progressivt förbättringslager, inte en förutsättning för att innehållet ska finnas till.

Formulär med serversidestatus: det JavaScript-exklusiva fallback-problemet

Kontaktformulär, offertförfrågningar och prenumerationsformulär är kritiska konverteringspunkter på B2B-webbplatser. De byggs ofta med JavaScript-driven validering och feedback – vilket i sig är rimligt. Problemet uppstår när formuläret saknar ett serversidesfallback: om JavaScript inte exekveras går det inte att skicka formuläret alls, och om det skickas saknas korrekt HTTP-statuskod för fel och bekräftelse.

Ett formulär vars action-attribut är tomt eller saknas, och vars submit-event hanteras enbart av JavaScript, fungerar inte utan JavaScript. En crawler som försöker följa formulärets action-URL hittar ingenting, och en användare med hjälpmedel som inte stöder JavaScript kan inte slutföra åtgärden.

Korrekt formulärstruktur med serverfallback

<form method="POST" action="/kontakt/skicka/">
  <label for="namn">Namn</label>
  <input type="text" id="namn" name="namn" required>

  <label for="epost">E-post</label>
  <input type="email" id="epost" name="epost" required>

  <label for="meddelande">Meddelande</label>
  <textarea id="meddelande" name="meddelande" required></textarea>

  <button type="submit">Skicka</button>
</form>

Servrouten /kontakt/skicka/ bör returnera HTTP 200 med en bekräftelsesida vid lyckad inlämning, HTTP 422 med felmeddelanden inline vid valideringsfel, och aldrig HTTP 200 vid ett faktiskt fel. JavaScript kan sedan progressivt förbättra upplevelsen med asynkron validering och AJAX-submit – men grundfunktionen existerar utan JavaScript.

Det är också värt att hålla koll på hur formulärsidan själv indexeras. En /kontakt/-sida med formulär bör inte ha noindex om sidan har organiskt sökvärde. Däremot bör bekräftelsesidan – /kontakt/tack/ – ofta ha noindex för att undvika att indexera en sida utan eget innehållsvärde. Mer om hur indexeringsdirektiv samverkar finns i guiden om canonical, robots och indexering.

Navigationsmenyer och semantiska interna länkar

Navigationsmenyn är webbplatsens länkstruktur i sin tydligaste form. Den berättar för crawlers vilka sidor som finns, vilka som är viktigast och hur sajten är hierarkiskt organiserad. En meny som byggs av JavaScript – där <li>-element och <a>-taggar injiceras i DOM efter att skriptet körts – kan vara osynlig i HTML-källan och är därför potentiellt inte crawlbar.

Det finns ett specifikt mönster som är extra vanligt och extra problematiskt: navigationsmenyer som använder JavaScript-event-handlers för att navigera, i stället för vanliga href-attribut. Exemplet nedan illustrerar skillnaden:

<!-- Undvik: JavaScript-navigation utan href -->
<li onclick="navigateTo('/tjanster/')">Tjänster</li>

<!-- Korrekt: semantisk länk med href -->
<li><a href="/tjanster/">Tjänster</a></li>

Det andra alternativet är en riktig HTML-länk. Det följer webbstandarder, fungerar utan JavaScript, är tillgängligt för hjälpmedel och är crawlbart. JavaScript kan fortfarande lyssna på klick-events och lägga till animationer eller snabb client-side routing – men länken i sig måste vara ett korrekt <a href>-element.

Interna länktexter bör vara beskrivande och specifika. "Klicka här" eller "Läs mer" ger ingen information om målet. En länktext som "Tjänster inom teknisk SEO" kommunicerar ämnesrelevansen tydligt – både till besökaren och till crawlern. För en djupare genomgång av hur intern länkning struktureras finns guiden om interna länkar och begripliga navigationsvägar.

Jämför sidkälla med renderad sida

Markera det du har dokumenterat. Använd kontrollfrågorna och ladda ned arbetsbladet för ert eget underlag.

Dina egna arbetsnoteringar, inget kvalitets- eller rankingbetyg. Markeringarna sparas inte och skickas inte till RANGEL.

Visa arbetsbladets fält
JavaScript SEO: läsbar HTML och fungerande interaktion
https://rangel.se/guider/seo-for-javascript/

LÄSARUPPGIFT
Inaktivera JavaScript i din webbläsare, ladda om startsidan och notera om huvudinnehåll och navigation fortfarande syns.

Jämför sidkälla med renderad sida
[ ] Spara rått HTTP-svar
Underlag att dokumentera: Notera status, headers och HTML innan JavaScript körs.
Mitt underlag:
Ansvarig / nästa steg:

[ ] Kontrollera renderad vy
Underlag att dokumentera: Jämför viktig text, länkar och metadata efter rendering.
Mitt underlag:
Ansvarig / nästa steg:

[ ] Isolera avvikelsen
Underlag att dokumentera: Dokumentera test, fel och nästa åtgärd utan att anta att rendering är enda orsaken.
Mitt underlag:
Ansvarig / nästa steg:

Markeringarna är dina egna arbetsnoteringar, inte en granskning av RANGEL eller ett kvalitets-/rankingbetyg.

Strukturerad data och JavaScript-rendering

Strukturerad data i JSON-LD-format är mer robust mot renderingsproblem än mikrodata eller RDFa, eftersom JSON-LD placeras i ett <script type="application/ld+json">-element i <head> och inte är beroende av att specifika HTML-element renderas korrekt. Men om hela sidan är klient-renderad och <head>-elementet byggs dynamiskt av JavaScript, kan strukturerad data ändå vara frånvarande i källkoden.

Kontrollera att JSON-LD-blocket finns i HTML-källan (via "Visa sidkälla"), inte bara i det exekverade DOM-trädet. Om ditt ramverk injicerar <script type="application/ld+json"> via JavaScript, flytta det till server-renderad markup. En praktisk princip: all data som du vill att en extern part ska kunna läsa utan att köra JavaScript – inklusive strukturerad data – bör finnas i den initiala HTTP-responsen. Observera att korrekt strukturerad data i källkoden inte garanterar att den används av sökmotorer på något visst sätt; det eliminerar ett tekniskt hinder men är inte tillräckligt i sig.

För att förstå hur man beskriver entiteter och relationer i strukturerad data på ett korrekt sätt är Schema.org:s specifikation för Article ett relevant referensdokument att bekanta sig med. Vår guide om strukturerad data för det som faktiskt finns beskriver hur du undviker vanliga fallgropar i implementationen.

RANGELs arbetsmetod och illustrativa typfall

Följande är ett illustrativt, hypotetiskt typfall som beskriver RANGELs arbetssätt vid en JavaScript SEO-granskning. Alla företagsnamn, siffror och omständigheter är påhittade och används enbart för att göra beslutsprocessen konkret.

Hypotetiskt typfall: B2B-leverantör med Vue.js-sajt

Föreställ dig ett tillverkningsföretag – låt oss kalla det Industritek AB – som säljer specialiserade komponenter till fordonsindustrin. Deras webbplats är byggd som en Vue.js single-page application. Säljteamet noterar att organisk trafik till deras 200-tal produktsidor är ovanligt låg trots att sidorna innehåller detaljerad teknisk information som borde attrahera sökfrågor från inköpare och konstruktörer.

Diagnostikfas: Vi inaktiverar JavaScript och laddar produktkategorisidan. I källkoden finns: en <div id="app">, en metatitel och ett JavaScript-paket. Inga produktnamn, inga specifikationer, inga interna länkar till undersidor. Menyn är JavaScript-genererad och finns inte i källkoden. Vi bekräftar med curl att HTTP-statuskoden är 200 och att body-innehållet är identiskt tomt oavsett vilken produktsida vi begär – URL-routing sker helt på klientsidan.

Beslutspunkter: Produktsidorna uppdateras sällan (nya produkter läggs till ett fåtal gånger per år). Innehållet är inte personaliserat. Indexeringskravet är högt. Slutsats: statisk förgenerering är den lämpliga strategin. Kundportalen för orderhistorik och teknisk dokumentation är däremot personaliserad och realtidsberoende – den lämpar sig för CSR med korrekt noindex och autentiseringskontroll.

Implementationsplan som förslag: Vi rekommenderar migrering till Nuxt med statisk förgenerering för produkt- och kategorisidor, och bibehållen Vue.js CSR för den inloggade kundportalen. Navigationsmenyn skrivs om som vanliga <a href>-element i en server-renderad komponent. Formuläret för offertförfrågan får en serverroute med korrekt HTTP-statuskod och ett HTML-fallback utan JavaScript. Strukturerad data för produktentiteter (Product-schema) läggs till i den statiska HTML-outputen.

Tre materially olika scenarion och deras konsekvenser:

  • Scenarion A – full SSG: Om sortimentet är stabilt och produktdata hämtas från ett PIM-system vid byggtillfället är ren SSG optimal. Byggtiden ökar med antalet produkter men CDN-distribueringen är trivial. Obs: om lagerdata måste vara realtid kan inte detta visas i statisk HTML utan en separat API-request från klienten – och det kravet bör isoleras till ett litet komponentblock, inte hela sidan.
  • Scenarion B – SSR per route: Om priset varierar beroende på kundens avtalsvillkor och visas direkt på produktsidan, är SSR nödvändigt för den specifika datakomponenten. Men produktnamn, specifikationer och intern länkstruktur behöver ändå inte vänta på autentiseringskontroll – de kan renderas server-side omedelbart och kompletteras med personaliserat pris efter autentisering.
  • Scenarion C – ingen migrering, begränsad åtgärd: Om en fullständig ramverksmigrering är utanför budget eller tidsplan kan en prerendering-proxy (till exempel Rendertron eller ett liknande verktyg) placeras framför den befintliga Vue.js-applikationen. Detta är ett kompromissalternativ med egna begränsningar – det kräver underhåll, introducerar latens och löser inte grundproblemet med JavaScript-beroende formulär och menyer. Vi rekommenderar det inte som permanent lösning men det kan vara ett tillfälligt steg.

Vill du bättre förstå hur en teknisk SEO-migrering planeras och kontrolleras utan att tappa befintlig URL-struktur, beskriver vår guide om SEO-migrering, URL-karta och säker lansering hela processen. För en strategisk affärsmotivering av insatsen kan verktyget SEO-affärscase för att räkna på egna antaganden hjälpa dig formulera kostnaden och värdet på ett beslutsfattarvänligt sätt – resultatet bygger på de siffror du matar in, inte på en kommersiell prognos. Vår tjänst för teknisk SEO täcker just denna typ av granskning och åtgärdsplanering.

Konkret implementationschecklist

Följande checklista är ordnad efter prioritet och diagnosresultat. Arbeta uppifrån och ned; åtgärda det som blockerar crawling och indexering innan du optimerar det som redan fungerar.

  1. Granska HTML-källan för varje sidtyp med "Visa sidkälla" – inte DevTools. Dokumentera exakt vilket innehåll som saknas per sidkategori.
  2. Inaktivera JavaScript och navigera webbplatsen. Kan du nå alla viktiga sidor via menyn? Finns meningens viktigaste rubriker och texter synliga?
  3. Kontrollera alla interna länkar i källkoden – är de vanliga <a href>-element eller JavaScript-events? Ersätt JavaScript-navigation med semantiska href-attribut.
  4. Verifiera HTTP-statuskoder för alla redirects med curl eller ett HTTP-testverktyg. JavaScript-redirects på klientsidan måste ersättas med serverside 301/302.
  5. Testa formulärets action-attribut – peka mot en serverroute, inte JavaScript. Verifiera att serverrouten returnerar korrekta HTTP-statuskoder vid fel och bekräftelse.
  6. Kontrollera strukturerad data i källkoden – JSON-LD-blocket ska finnas i den initiala HTTP-responsen, inte injiceras av JavaScript i efterhand.
  7. Välj renderingstrategi per sidtyp enligt beslutstabellen ovan. Dokumentera valet och motivera det med uppdateringsfrekvens, personaliseringsbehov och indexeringskrav.
  8. Implementera SSG eller SSR för sidor med högt indexeringskrav. Behåll CSR enbart för sidor utan indexeringsbehov och sätt korrekt noindex.
  9. Granska canonical-taggar i den renderade HTML-källan. Särskilt viktigt för kategorilistsidor med filterparametrar som kan skapa duplicerat innehåll.
  10. Verifiera att navigationsmenyn finns i HTML-källan för alla sidor – även för sidor dit menyn injiceras av ett delat JavaScript-paket. Kontrollera varje sidtyp separat.
  11. Dokumentera förändringarna och gör en kontrollcrawl efter implementationen för att bekräfta att HTML-källan nu innehåller det förväntade innehållet.

Om ni därefter planerar köpta placeringar kan kalkylen för placeringskostnad visa ett prisintervall för valt antal. Den bedömer inte en sidas relevans eller synlighet.

Renderingskontroll och prestandamätning behöver separata underlag. Använd prestandajournalen för Core Web Vitals för relevant fält- eller labbdata, den berörda interaktionen och ett jämförbart omtest.

Feldiagnos: när åtgärden inte ger förväntat resultat

Det händer att man implementerar SSR eller SSG och ändå ser problem. Här är några orsakerna och hur du identifierar dem.

Problem: Innehållet finns i källkoden men inte i index

Kontrollera robots.txt och meta robots-taggen. Det är fullt möjligt att en SSR-implementation levererar korrekt HTML men att <meta name="robots" content="noindex"> är kvar från en utvecklingsmiljö, eller att robots.txt blockerar crawling av de aktuella URL-mönstren. Notera att robots.txt förhindrar crawling medan noindex är ett indexeringsdirektiv – de är separata mekanismer och bör kontrolleras var för sig. Canonical är ett preferenssignal för föredragen URL, inte ett hinder för crawling eller ett garanterat indexeringsdirektiv. Verifiera också att canonical-taggen pekar på rätt URL och inte på en variant med sessionparameter eller spårningsparameter. Guiden om canonical och indexering beskriver dessa scenarion i detalj.

Problem: Menylänkar finns i källkoden men leder till 404

Om URL-routing tidigare hanterades av JavaScript och nu hanteras av servern kan det finnas diskrepanser mellan de URL-mönster som JavaScript-routern kände till och de routes som serverramverket nu definierar. Gå igenom URL-listan systematiskt och säkerställ att varje route som ska vara tillgänglig har en motsvarande serverdefinition. Det är samma princip som vid en URL-migrering.

Problem: Strukturerad data validerar men entiteter är felaktigt beskrivna

Teknisk korrekthet i JSON-LD är inte samma sak som semantisk korrekthet. En Product-entitet som saknar name, description och offers är tekniskt giltig men semantiskt otillräcklig. Granska vad du faktiskt beskriver mot vad sidan faktiskt innehåller. Ange aldrig egenskaper vars värden inte motsvaras av synligt innehåll på sidan. Mer om detta finns i guiden om strukturerad data för det som faktiskt finns.

Problem: Sidans laddningstid försämrades efter SSR-implementationen

SSR introducerar serverlatens per request. Om implementationen saknar caching – antingen CDN-caching för icke-personaliserade sidor eller server-side caching för dyra databasanrop – kan varje request bli onödigt långsam. Lösningen är att identifiera vilka SSR-sidor som faktiskt levererar identisk HTML till alla besökare och konfigurera dem för CDN-caching eller migrera dem till SSG. Att använda AI-frågepanel-verktyget för att formulera neutrala startfrågor kan hjälpa dig strukturera specifika tekniska frågeställningar om cachingstrategi för ditt ramverk.

Feldiagnos kräver systematisk kontroll mot faktiska HTTP-responser och källkodsgranskning – inte mot vad webbplatsen ser ut att visa i en webbläsare med JavaScript aktiverat. Håll dessa testnivåer åtskilda i ditt arbete.

Vanliga frågor

Varför är Astro ett bra val för statiska sajter?

Astro genererar statisk HTML som standard, vilket innebär att innehållet finns i källkoden utan att kräva JavaScript-exekvering. Det gör sidan tillgänglig direkt. Artikeln nämner detta som ett faktiskt standardbeteende hos ramverket, inte som en universell rekommendation för alla sajter.

Måste jag server-rendera alla sidor om jag använder ett JavaScript-ramverk?

Nej. Artikelns beslutstabell visar att sidtyp avgör strategin. Informationssidor med fast innehåll fungerar bäst med statisk förgenerering. Interaktiva verktyg eller inloggade dashboards kan använda klient-side rendering utan SEO-nackdel, eftersom de sällan behöver indexeras.

Hur testar jag om redirects fungerar korrekt efter en förändring?

Kontrollera HTTP-statuskoderna med ett verktyg eller curl. Varje gammal URL ska returnera 301 som pekar mot en sida som svarar 200. Artikeln beskriver en testmatris där du verifierar att inga loopar eller kedjor uppstår och att slutdestinationen har rätt innehåll.

Vad gör jag om strukturerad data validerar men Google inte visar rich results?

Validering innebär att koden är syntaktiskt korrekt, inte att sökmotorer väljer att visa den. Kontrollera att entiteterna beskriver sidans faktiska innehåll korrekt. Artikeln påpekar att felaktigt beskrivna entiteter kan vara orsaken, inte saknad validering.

Vad bygger guiden på?

Guiden kombinerar länkade primärkällor med RANGELs egna arbetsmodeller och uttryckligen illustrativa exempel. Metoder, budgetantaganden och rekommenderade arbetssteg är inte uppmätta kundresultat.

Publicerat av RANGEL. Redaktionella frågor och rättelser: signe@rangel.se. Uppdateringsdatum avser innehållet, inte en garanti att externa tjänster är oförändrade.

Nästa beslut

Bygg vidare på det du har läst.

Teknisk SEO

Canonical, robots och indexering: kontrollera rätt URL

Kontrollera canonical, indexeringsläge, sitemap och omdirigeringar före lansering. Praktisk checklista för svenska webbplatser och förhandsvisningar.

Läs guiden ↗
Teknisk SEO

Core Web Vitals: hitta orsaken till långsam laddning och interaktion

Felsök Core Web Vitals: LCP, INP och CLS. Hitta berörda element, skilj labb från fältdata och följ ett praktiskt arbetsflöde för förbättring och omtest.

Läs guiden ↗
Teknisk SEO

SEO-checklista: kontrollera det som blockerar först

En prioriterad kontroll för sidans åtkomst, HTML, canonical, indexeringssignaler, interna länkar och nästa steg.

Läs guiden ↗

Vill du omsätta det här i er webbplats?

Beskriv ert mål och vilken sida eller fråga ni vill förbättra. Vi börjar med underlaget och nästa konkreta åtgärd.

Få ett förslag ↗

AI sök · Innehåll · Placeringar

Ta nästa steg med
Teknisk SEO.

Berätta om er webbplats och ert mål. Vi återkommer med ett förslag för Teknisk SEO, med omfattning och pris.

Få ett förslag ↗