left arrowBack to Seo Hub
Seo Hub
- December 02, 2024

Hvordan sørge for at JavaScript-innhold er indekserbart?

Innholdsfortegnelse

  1. Den tre-fase reisen til Googlebot
  2. Server-sidet rendering (SSR) eller forhåndsvisning
  3. Implementering av dynamisk rendering
  4. Optimalisering av renderingsveien
  5. Bruk av polyfills og differensiert servering
  6. Meningsfulle HTTP-statuskoder
  7. Unngåelse av myke 404-feil
  8. Riktig bruk av kanoniske tagger
  9. Effektiv bruk av Robots meta-tagger
  10. Forbedring av titler og meta-beskrivelser

Introduksjon

Forestill deg å investere utallige timer i å utvikle en fantastisk og interaktiv nettside ved hjelp av JavaScript-teknologier, bare for å oppdage at søkemotorer ikke klarer å indeksere innholdet ditt effektivt. Så dynamisk som JavaScript gjør nettleseropplevelsen, skaper det også utfordringer for søkemotoroptimalisering (SEO), noe som kan hindre oppdagelsen og rangeringen av innholdet ditt. Å forstå hvordan du sikrer at JavaScript-innholdet er søkbart er avgjørende hvis du ønsker at nettsiden din skal nå sitt fulle potensial.

JavaScript har forvandlet måten nettsider bygges på, og tilbyr kraftige muligheter som gjør nettet mer interaktivt og engasjerende. Denne fleksibiliteten kommer imidlertid med en pris. Søkemotorer må behandle JavaScript for å forstå innholdet, noe som kan være ressurskrevende og noen ganger problematisk. Derfor er det å sikre at JavaScript-innholdet er søkbart et avgjørende skritt for å opprettholde synligheten til nettstedet ditt og sørge for at et bredere publikum kan få tilgang til tilbudene dine.

Denne bloggen vil veilede deg gjennom labyrinten av å sikre at JavaScript-innholdet ditt forblir tilgjengelig for søkemotorer. Vi vil avdekke prosessene involvert, utforske levedyktige strategier og fremheve beste praksis for å optimalisere applikasjonen din for synlighet i søkemotorer. Ved slutten av dette innlegget vil du ha nyttige innsikter og handlingsdyktige steg for å forbedre SEO-en til din JavaScript-drevne nettside. La oss dykke inn!

Forstå grunnleggende om JavaScript SEO

JavaScript tilbyr uendelige muligheter for å skape dynamiske, engasjerende nettopplevelser. Det presenterer imidlertid unike utfordringer når det gjelder SEO. Å gjøre nettapplikasjoner som er avhengige av JavaScript oppdagbare er avgjørende for å tiltrekke og beholde brukere via søkemotorer som Google. Å forstå hvordan Googlebot interagerer med JavaScript er det første skrittet mot å gjøre JavaScript-innholdet søkbart.

Den tre-fase reisen til Googlebot

  1. Kryping: Googlebot henter siden. Den leser først robots.txt-filen for å bekrefte om den kan krype sidene. Hvis det er tillatt, fortsetter den. Å blokkere kritiske JavaScript-filer via robots.txt kan forhindre Google i å rendre og indeksere innholdet ditt.

  2. Kø for rendering: Etter den innledende krypingen, plasseres siden i en kø for rendering. Denne fasen kan ta alt fra et par sekunder til lenger, avhengig av Googles ressurser.

  3. Rendering og indeksering: Når det er rendret av en evigvarende versjon av Chromium, kjører Googlebot JavaScript, parser HTML, og setter til slutt URL-er fra det rendrete innholdet i kø for videre kryping, og sikrer at alt dynamisk innhold er synlig og indeksert på riktig måte.

Denne forståelsen former grunnlaget for å optimalisere JavaScript for søkesynlighet.

Tips og beste praksis for å sikre søkbarhet

Server-sidet rendering (SSR) eller forhåndsvisning

Dessse alternativene lar søkemotorer krype innholdet ditt mer effektivt siden innholdet renderes server-side før det når klienten. Server-sidet rendering sikrer at søkemotorer mottar en fullstendig rendret HTML-fil, noe som gjør det enklere å krype og indeksere. Populære rammeverk som Next.js benytter server-sidet rendering for å forbedre SEO.

Implementering av dynamisk rendering

For nettsteder som må forbli på klientsiden, er dynamisk rendering et alternativ. Dette innebærer å servere statiske HTML-versjoner til krypere mens det gir den dynamiske opplevelsen til brukerne. Selv om Google støtter klient-side rendering, kan tung avhengighet av JavaScript forsinke rendering, noe som påvirker søkbarheten. FlyRanks AI-drevne innholdsmotor kan bidra til å generere optimalisert innhold som kan komplementere renderingstrategien din på en effektiv måte. Lær mer om våre innholdsferdigheter her.

Optimalisering av renderingsveien

Sørg for at nettstedets innledende HTML muliggjør rask gjenkjenning av synlig og tilgjengelig innhold. Dette oppnås ved å bruke en strømlinjeformet renderingsstrategi og holde kritiske ressurser lett tilgjengelig for søkemotorer. Oppgaver som å minimere klient-side JavaScript for kritiske komponenter kan øke renderingstider, noe som gjør innholdet mer tilgjengelig for roboter.

Bruk av polyfills og differensiert servering

JS-rammeverk utvikler seg raskt, men ikke alle funksjoner rendres omfattende av Google. Integrering av polyfills sikrer at funksjoner fungerer på tvers av ulike nettlesermiljøer. Differensiert servering tilpasser funksjoner til spesifikke nettlesere, og sikrer optimal presentasjon og funksjonalitet uten å påvirke søkbarheten.

Meningsfulle HTTP-statuskoder

Gi klare HTTP-statuskoder for å veilede Googlebots indekseringshandlinger, som å bruke 404-feil for ikke-eksisterende sider eller 301-omdirigeringer for flyttede innhold, og sikre smidig navigering og indeksering på tvers av nettstedet ditt.

Unngåelse av myke 404-feil

I Enkelside-applikasjoner (SPA), bruk History API i stedet for fragmenter for navigering mellom visninger for å unngå fallgruver som myke 404-er, og sikre at URL-er forblir tilgjengelige og klare for søkemotorer å indeksere.

Riktig bruk av kanoniske tagger

Sørg for at kanoniske tagger er riktig konfigurert slik at søkemotorer kan identifisere den riktige URL-en for indeksering. Selv om JavaScript kan injisere disse taggene, er det ideelt å bruke server-side metoder der det er mulig for å unngå konfigurasjonsproblemer på klientsiden.

Effektiv bruk av Robots meta-tagger

Bruk robots meta-tagger med omhu for å kontrollere indekseringsoppførsel uten utilsiktet å blokkere viktige sider. Riktig injeksjonsteknikk for JavaScript sikrer at dynamisk innhold forblir tilgjengelig, men likevel håndterbart med hensyn til synlighet for søkemotorer.

Forbedring av titler og meta-beskrivelser

JavaScript kan dynamisk generere meta-beskrivelser og titler som er meningsfulle for konteksten på siden din. Unike, beskrivende

og meta-beskrivelser hjelper både brukere og søkemotorer med å forstå innholdet ditt bedre.</p> <h2>Virkelige eksempler og casestudier</h2> <p>Illustrering av vellykket anvendelse av disse prinsippene, har FlyRanks samarbeid med forskjellige bedrifter resultert i bemerkelsesverdige forbedringer i SEO-resultater.</p> <ul> <li><p>I <a href="https://flyrank.com/blogs/case-studies/hulkapps">HulkApps casestudie</a>, hjalp FlyRank med å oppnå en 10x økning i organisk trafikk gjennom strategier som inkluderte renderingoptimaliseringer og strukturerte innholdsimplementeringer.</p> </li> <li><p>Tilsvarende, for <a href="https://flyrank.com/blogs/case-studies/releasit">Releasit</a>, forfinede FlyRank deres nettverksopplevelse, noe som betydelig økte engasjementet og synligheten.</p> </li> </ul> <p>Dessa eksempler understreker effektiviteten av å bruke banebrytende taktikker for håndtering av synligheten til JavaScript-innhold, og forbedre indeksering og ytelse deretter.</p> <h2>Rollen av tilgjengelighet</h2> <p>En nettside bør være navigerbar og brukervennlig for alle brukere, selv de som bruker nettlesere som ikke utfører JavaScript. Sørg for at viktig innhold blir tilgjengelig uten tung avhengighet av JavaScript. Testing ved hjelp av verktøy eller rendering av visninger i tekstmodus er praktiske strategier for å sikre at innholdet vises som forventet.</p> <h2>Konklusjon</h2> <p>Søkbarheten av JavaScript-innhold er en avgjørende faktor i å diktere en nettsides suksess i søkemotorrangeringer. Selv om renderingsteknikker og strategisk bruk av SEO-prinsipper spiller kraftige roller, er det også viktig å kontinuerlig tilpasse seg den utviklende naturen til SEO.</p> <p>Ved å forstå kjerneinteraksjoner mellom JavaScript og søkemotorer og bruke beviste SEO-praksiser som server-side rendering eller meningsfulle meta-implementeringer, kan nettstedet ditt forbli synlig, relevant, og konkurransedyktig. Utnytt FlyRanks datadrevne strategier <a href="https://flyrank.com/pages/our-approach">Vår Tilnærming</a> for effektivt å forbedre ditt nettsides digitale fotavtrykk, og sikre at ditt dynamiske innhold når et bredere, engasjert publikum.</p> <p>For ytterligere å forbedre SEO-en til nettapplikasjonene dine, utnytt FlyRanks lokaliserte innholdsprodukter <a href="https://flyrank.com/pages/localization">Lokaliseringstjenester</a> for naturlig skalerering og bærekraftig internasjonal markedsinngang.</p> <h2>Ofte stilte spørsmål</h2> <p><strong>Q1: Kan jeg bruke JavaScript for å sette meta-tagger som beskrivelser eller kanoniske URL-er?</strong><br>Ja, JavaScript kan dynamisk sette meta-tagger inkludert kanoniske URL-er og beskrivelser. Imidlertid, for robust SEO, vurder å plassere disse på serversiden der det er mulig, ettersom noen søkemotorer kanskje ikke utfører JavaScript omfattende.</p> <p><strong>Q2: Hvordan forbedrer server-side rendering SEO for JavaScript-tunge nettsteder?</strong><br>Server-side rendering (SSR) leverer forhåndsrenderte HTML-sider til søkemotor-boter, noe som forenkler deres krypings- og indekseringsprosess ved å gi dem direkte tilgang til innholdet uten å utføre tillegg JavaScript.</p> <p><strong>Q3: Er det nødvendig å teste JavaScript-funksjoner for kompatibilitet med eldre nettlesere?</strong><br>Ja, bruk polyfills for å sikre at JavaScript-funksjoner fungerer korrekt på eldre nettlesere som mangler støtte, noe som forbedrer både brukeropplevelsen og SEO-søkbarheten.</p> <p><strong>Q4: Hvordan kan FlyRank forbedre global innholdsrekkevidde?</strong><br>FlyRanks <a href="https://flyrank.com/pages/localization">Lokaliseringstjenester</a> tilpasser nettstedet ditt for forskjellige språk og kulturer, noe som sikrer optimal levering og kontekstrelevans for internasjonale publikum, og konsekvent utvider din rekkevidde og engasjement.</p> <p>Å kontinuerlig utvikle seg i takt med ledende SEO-strategier, som de som tilbys av FlyRank, garanterer både nåværende overholdelse og beredskap for fremtidige fremskritt innen søkemotorteknologi.</p> </div> <div class="lg:w-1/3 text-gray mt-16 sticky top-[112px] lg:h-screen"> <div class="bg-white text-center p-5 rounded-lg mb-8"> <img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/envelope-icon.svg?v=1732181353" alt="Envelope Icon" class="mx-auto" > <div class="text-dark font-extrabold mb-5 uppercase text-xl">Enjoy content like this?</div> <div class="text-dark text-xl mb-3">Join our newsletter and 20,000 enthusiasts</div> <div class="sidebar-newsletter opacity-0 transition-opacity duration-500 h-[129px]"> <div id="shopify-block-AOFJqZjlUdWtqOXZib__forms_inline_9wMQFJ" class="shopify-block shopify-app-block"><div id='AOFJqZjlUdWtqOXZib__forms_inline_9wMQFJ' data-form-root='true' data-forms-id='forms-root-254557' data-forms-text-color='#0f1217' data-forms-button-background-color='#0f1217' data-forms-button-label-color='#ffffff' data-forms-links-color='#1878b9' data-forms-errors-color='#e02229' data-forms-text-alignment='center' data-forms-alignment='center' data-forms-padding-top='5' data-forms-padding-right='0' data-forms-padding-bottom='0' data-forms-padding-left='0' ></div> <script> window['ShopifyForms'] = { ...window['ShopifyForms'], currentPageType: "article" }; </script> </div> </div> </div> <div class="bg-dark-800 text-center p-5 rounded-lg"> <img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/download-icon.svg?v=1732109891" alt="Download Icon" class="mx-auto mb-3" > <div class="text-xl mb-8"> <span class="font-bold">DOWNLOAD FREE</span><br> BACKLINK DIRECTORY </div> <a href="/cart/41940050214979:1?checkout&attributes[first_visit]=%2Fno%2Fblogs%2Fseo-hub%2Fhow-to-ensure-javascript-content-is-crawlable" class="btn btn-green w-full" > Download </a> </div> </div> </div> </div> </div> <style> table tr:first-child { background-color: #86628d; } table th:first-child, table td:first-child { font-weight: bold; } th, td { border: 1px solid #ccc; padding: 10px; text-align: left; } </style> </section><div id="shopify-section-template--16867507732547__demo_promo_K9myJY" class="shopify-section demo"><div class=" px-6 md:px-8 py-12 lg:py-32 bg-green"> <div class="container text-dark text-center"> <div class="w-full md:w-8/12 mx-auto"> <h2 class="mb-8 text-4xl sm:text-5xl">LA OSS DRIVE MERKET DITT TIL NYE HØYDER</h2> <div class="mb-5"><p>Hvis du er klar til å bryte gjennom støyen og gjøre et varig inntrykk på nettet, er det på tide å samarbeide med FlyRank. Kontakt oss i dag, så setter vi merket ditt på en vei mot digitalt dominans.</p></div> <div class="flex flex-col"> <div> <a class="btn btn-dark text-gray mt-8" href="/no/pages/kontakt-2"> Be om en demo </a> </div> </div> </div> </div> </div> </div> </main> <footer id="shopify-section-footer" class="shopify-section footer"><div class="footer-container px-6 md:px-8 py-16 md:py-24 overflow-hidden relative"> <img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/footer-background.png?v=1730813000" alt="Image Background" class="object-contain absolute w-full z-0 bottom-0 2xl:bottom-auto 2xl:top-1/3" > <div class="container flex flex-col-reverse md:flex-row z-10 relative flex-wrap"> <div class="w-full md:w-1/2 text-gray mt-16 md:mt-0"> <div> <img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/flyrank-logo-large.svg?v=1730983842" alt="logo" > </div> <div class="w-full md:w-2/3 my-12"><p>Hvis du er klar til å bryte gjennom støyen og gjøre en varig innvirkning på nettet, er det på høy tid å slå seg sammen med FlyRank.</p></div> <div class="flex"> <a href="https://x.com/flyrank_ai" target="_blank" class="bg-green w-[50px] h-[50px] inline-block flex justify-center items-center mr-3 rounded-full hover:opacity-[0.8] transition-all" ><img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/icon-twitter.svg?v=1729166778" alt="twitter" ></a> <a href="https://www.facebook.com/people/FlyRank/61566930002846/" target="_blank" class="bg-green w-[50px] h-[50px] inline-block flex justify-center items-center mr-3 rounded-full hover:opacity-[0.8] transition-all" ><img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/icon-facebook.svg?v=1729166777" alt="facebook" ></a> <a href="https://www.instagram.com/flyrank.ai/" target="_blank" class="bg-green w-[50px] h-[50px] inline-block flex justify-center items-center mr-3 rounded-full hover:opacity-[0.8] transition-all" ><img src="https://cdn.shopify.com/s/files/1/0609/8023/2259/files/icon-instagram.svg?v=1729166777" alt="instagram" ></a> </div> </div> <div class="w-full md:w-1/2 grid gap-4 grid-cols-2 sm:grid-cols-3"> <div class=""> <div class="text-dark-100 mb-5 sm:mb-12 uppercase font-medium">Selskap</div> <ul> <li class="mb-3"> <a href="/no/pages/om-1" class="text-gray-50 capitalize"> Om oss </a> </li> <li class="mb-3"> <a href="/no/pages/var-tilnaerming" class="text-gray-50 capitalize"> Vår tilnærming </a> </li> <li class="mb-3"> <a href="/no/pages/henvisninger-1" class="text-gray-50 capitalize"> Henvisninger </a> </li> <li class="mb-3"> <a href="https://www.flyrank.com/pages/contact?utm_source=website&utm_medium=footer" class="text-gray-50 capitalize"> Kontakt oss </a> </li> </ul> </div> <div class=""> <div class="text-dark-100 mb-5 sm:mb-12 uppercase font-medium">Utforsk</div> <ul> <li class="mb-3"> <a href="/no/pages/innhold" class="text-gray-50 capitalize"> Artikler </a> </li> <li class="mb-3"> <a href="/no/blogs/case-studier-1" class="text-gray-50 capitalize"> Case Studies </a> </li> <li class="mb-3"> <a href="/no/pages/priser" class="text-gray-50 capitalize"> Priser </a> </li> <li class="mb-3"> <a href="/no/pages/ofte-stilte-sporsmal" class="text-gray-50 capitalize"> Ofte stilte spørsmål </a> </li> </ul> </div> <div class="mt-5 sm:mt-0"> <div class="text-dark-100 mb-5 sm:mb-12 uppercase font-medium">Juridisk</div> <ul> <li class="mb-3"> <a href="/no/policies/terms-of-service" class="text-gray-50 capitalize"> Vilkår for tjeneste </a> </li> <li class="mb-3"> <a href="/no/policies/privacy-policy" class="text-gray-50 capitalize"> Personvernerklæring </a> </li> <li class="mb-3"> <a href="/no/policies/refund-policy" class="text-gray-50 capitalize"> Penger-tilbake-garanti </a> </li> <li class="mb-3"> <a href="https://calendly.com/flyrank/30min?utm_source=website&utm_medium=footer" class="text-gray-50 capitalize"> Be om en demo </a> </li> </ul> </div> </div> </div> <div class="container"> <div class="text-gray w-full mt-24 text-sm">© 2025 FlyRank - All Rights Reserved</div> </div> </div> </footer> <div class="minicart-wrapper" x-data x-show="$store.global.isMinicartVisible" x-on:click.outside="$store.global.isMinicartVisible = false" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="off-screen-right" x-transition:enter-end="right-50" x-transition:leave="transition ease-in duration-300" x-transition:leave-start="right-50" x-transition:leave-end="off-screen-right" x-cloak :aria-hidden="$store.global.isMinicartVisible ? 'false' : 'true'" aria-modal="true" role="dialog" > <div id="shopify-section-minicart" class="shopify-section"><div class="minicart" data-ajax-cart-section x-cloak> <div class="title-row"> <h2 id="minicart-label" class="text-cloud-burst-500"> Cart </h2> <button @click="$store.global.isMinicartVisible = false"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> <path d="M24 20.188l-8.315-8.209 8.2-8.282-3.697-3.697-8.212 8.318-8.31-8.203-3.666 3.666 8.321 8.24-8.206 8.313 3.666 3.666 8.237-8.318 8.285 8.203z"/> </svg> </button> </div> <div class="item-count-message"> You have <span class="count" style="font-weight: 600" x-data>0 </span> <span x-data></span> in your cart! </div> <hr/> <ul class="items-list" data-ajax-cart-section-scroll> </ul> <hr/> <div class="subtotal"> <p class="title">Subtotal </p> <p class="amount">$0.00 </p> </div> <a class="view-cart-details-link" href="/no/cart"> View Cart Details </a> </div> <style> /* Animation classes */ .transition { transition-property: all; } .duration-300 { transition-duration: 300ms; } .ease-out { transition-timing-function: ease-out; } .ease-in { transition-timing-function: ease-in; } .off-screen-right { right: -100px; transform: translateX(120%); } .right-50 { right: 50px; transform: translateX(0%); } @media(max-width: 576px) { .right-50 { right: 20px; transform: translateX(0%); } } /* Main styles */ .minicart-wrapper { position: fixed; top: 50px; right: 50px; z-index: 100; } @media(max-width: 576px) { .minicart-wrapper { right: 20px; } } .minicart { width: 288px; height: auto; padding: 20px; background: #fff; border-radius: 6px; box-shadow: 0 30px 130px -8px rgba(0, 0, 0, 0.25); } .minicart .view-cart-details-link { display: flex; justify-content: center; align-items: center; margin-top: 20px; width: 100%; height: 43px; font-weight: 600; background: white; border: 2px solid black; outline: none; text-decoration: none; } .minicart .view-cart-details-link:hover { cursor: pointer; color: white; background: black; } .minicart hr { margin-bottom: 20px; } .minicart .title-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .minicart .title-row h2 { margin: 0; } .minicart .title-row button { border: none; background: transparent; cursor: pointer; } .minicart .title-row button svg { display: block; height: 16px; } .minicart .items-list { list-style: none; padding-left: 0; max-height: 300px; overflow: auto; } .minicart .item-count-message { margin-bottom: 10px; font-size: 0.8em; } .minicart .item-count-message .minicart--item-count { font-weight: 600; } .minicart .item { display: flex; margin-bottom: 10px; width: 100%; } .minicart .item .product-thumb-wrapper { width: 100px; height: 120px; position: relative; flex: 0 0 100px; } .minicart .item .product-thumb-wrapper img { position: absolute; top: 0; right: 0; left: 0; bottom: 0; height: 100%; width: 100%; object-fit: cover; object-position: center; } .minicart .item .item-details { margin-left: 10px; display: flex; flex-direction: column; justify-content: flex-start; } .minicart .item .item-details p { margin: 0; } .minicart .item .item-details .option-label { font-weight: 600; } .minicart .item .item-details .title { font-size: 0.9em; font-weight: 600; margin-top: 0; margin-bottom: 6px; } .minicart .item .item-details .options { margin-bottom: 2px 0; } .minicart .item .item-details .option { margin: 0 0 2px; font-size: 0.8rem; } .minicart .item .item-details .quantity-row { margin: 2px 0; } .minicart .item .item-details .quantity-row span { margin: 0 0 2px; font-size: 0.8rem; } .minicart .item .item-details .option:last-of-type { margin-bottom: 0; } .minicart .item .item-details .price { margin-top: auto; } .minicart .item .item-details .remove { font-size: 0.6em; margin-top: auto; } .minicart .subtotal { margin: 20px 0; display: flex; align-items: center; justify-content: space-between; } .minicart .subtotal .title { height: 16px; margin: 0; } .minicart .subtotal .amount { font-weight: 600; font-size: 1.2em; margin: 0; } .minicart a { color: black; text-decoration: none; } .minicart a:hover { text-decoration: underline; } </style></div> </div> <div id="shopify-section-predictive-search-main" class="shopify-section site-header w-full shadow-md p-shell fixed top-0 z-30 bg-white"> <script src="//www.flyrank.com/cdn/shop/t/34/assets/predictive-search.js?v=82854867885586265471741865223" defer="defer"></script> <predictive-search x-data x-cloak id="predictive-search" x-show="$store.global.isPredictiveSearchVisible" x-trap.inert="$store.global.isPredictiveSearchVisible" x-transition.opacity aria-modal="true" @keyup.escape="$store.global.isPredictiveSearchVisible = false" > <div id="predictive-search-form-wrapper" class="w-full bg-white fixed inset-x-0 top-0 z-40 pt-8 pb-14 shadow-md" > <h2 class="text-base !font-normal max-w-max mx-auto font-palatino mb-3"> Hva kan vi hjelpe deg med å finne? </h2> <form action="/no/search" method="get" role="search" class="w-full max-w-[422px] mx-auto" @click.outside="$store.global.isPredictiveSearchVisible = false" > <div class="flex gap-x-3 w-full relative"> <input id="predictive-search-input" class="slayed-input w-full" type="search" name="q" value="" role="combobox" aria-expanded="false" aria-owns="predictive-search-results" aria-controls="predictive-search-results" aria-haspopup="listbox" aria-autocomplete="list" > <label for="predictive-search-input" class="sr-only"> Search </label> <button for="predictive-search-input" class="pill-button" > Search </button> <button type="button" class="absolute -right-[15px] top-1/2 -translate-y-1/2 translate-x-full" @click="$store.global.isPredictiveSearchVisible = false" > <span class="sr-only">Close</span> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> <path d="M24 20.188l-8.315-8.209 8.2-8.282-3.697-3.697-8.212 8.318-8.31-8.203-3.666 3.666 8.321 8.24-8.206 8.313 3.666 3.666 8.237-8.318 8.285 8.203z"/> </svg> </button> </div> <input name="options[prefix]" type="hidden" value="last"> <div id="predictive-search-target" tabindex="-1"></div> </form> </div> </predictive-search> </div> <div id="shopify-section-modal" class="shopify-section section-modal"> <dialog id="dialog-modal-example" x-data="modal" x-init="init($el)" class="max-w-md rounded-md" @click="close($event)" > <form action="" class="p-12"> <div class="prose"> <h1>Modal Tittel</h1> <p><p>Modalbeskrivelse. Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque totam cum cupiditate officia et quaerat blanditiis culpa? Hic, nesciunt id.</p></p> <button type="button" @click="open = false" class="btn rounded-none"> Close </button> </div> </form> </dialog> <script> document.addEventListener('alpine:init', () => { Alpine.data('modal', () => ({ componentElement: document.querySelector('#dialog-modal-example'), open: false, init(dialog) { if (!dialog) { return } Alpine.effect(() => { if (this.open) { dialog.showModal() document.querySelectorAll('body > *:not(#shopify-section-modal)').forEach((element) => { element.setAttribute('aria-hidden', 'true') element.setAttribute('inert', '') }) document.querySelector('body').classList.add('overflow-hidden') } else { dialog.close() document.querySelectorAll('body > *:not(#shopify-section-modal)').forEach((element) => { element.removeAttribute('aria-hidden') element.removeAttribute('inert') }) document.querySelector('body').classList.remove('overflow-hidden') } }) document.addEventListener('show-modal', () => { this.open = true }) document.addEventListener('close-modal', () => { this.open = false }) }, toggle() { this.open = !this.open }, close(event) { if (event.target === this.componentElement) { if (this.open) { this.open = false } } } })) }) </script> <style> #dialog-modal-example::backdrop { background-color: rgba(0, 0, 0, 0.5); } </style></div> <script type="application/json" data-ajax-cart-initial-state> {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0} </script> <div id="shopify-block-AZFd6aGFnS21FS1hVa__13768625480086291342" class="shopify-block shopify-app-block"><script> window['ShopifyForms'] = { ...window['ShopifyForms'], currentPageType: "article" }; </script> </div><div id="shopify-block-Aajk0TllTV2lJZTdoT__15683396631634586217" class="shopify-block shopify-app-block"><script id="chat-button-container" data-horizontal-position=bottom_right data-vertical-position=lowest data-icon=chat_bubble data-text=no_text data-color=#89608e data-secondary-color=#ffffff data-ternary-color=#6a6a6a data-domain=www.flyrank.com data-shop-domain=www.flyrank.com data-external-identifier=5QqDPyGbw2L4LPYPH2LFgD67SjacIZkJCvvcz866Sws > </script> </div></body> </html>