Nödsituation

Vid nödsituationer eller driftstörningar kan du skicka ett SMS till vår jourtelefon

Jourtelefon (endast SMS)

+45 29 70 15 95

Skicka ett SMS med följande information:

  • Ditt namn och din webbshop
  • Beskrivning av problemet
  • Ditt telefonnummer för återuppringning

Anteckningar: Denna tjänst är endast avsedd för kritiska situationer där din webbshop ligger nere eller har allvarliga problem. För vanlig support, vänligen använd våra normala supportkanaler.

Implementera strukturerad data (Schema.org) i ditt Shoporama-tema

Komplett guide till JSON-LD-strukturerad data i ett Shoporama-tema. Smarty-exempel för Product, Store, BreadcrumbList och AggregateRating med korrekta säkra metoder.

Lästid: ca {åtta} minuter
Shopejer Utvecklare

Strukturerade data (Schema.org) hjälper Google och andra sökmotorer att förstå innehållet på dina sidor. För en webbutik är det särskilt viktigt att markera produkter, butiksinformation, brödsmulor och produktrecensioner, så att du kan få ”rich snippets” i sökresultaten med till exempel pris, lagerstatus och stjärnbetyg.

Tips: Shoporama lägger automatiskt till grundläggande Schema.org-markup för produkter via våra inbyggda SEO-funktioner. Läs mer om automatisk strukturerad data och SEO i Shoporama. Den här artikeln riktar sig till dig som vill bygga eller utöka markupen själv i ditt tema.

Kodeeditoren i Shoporama-admin med MBN-Delaware-temaets filliste til venstre og after_purchase.html åben i editoren til højre
Kodredigeraren under Tema, där du redigerar temats HTML-filer. Här infogar du dina JSON-LD-block, t.ex. i produktmallen.

Vad är strukturerade data?

Strukturerade data är ett standardiserat sätt att beskriva sidans innehåll i ett format som sökmotorerna förstår. JSON-LD är det rekommenderade formatet och placeras i en <script type="application/ld+json">-tagg. Det påverkar inte sidans utseende, men ger sökmotorerna strukturerad information som kan användas för rich snippets.

De rätta safe-metoderna för SafeProduct, SafeWebshop och SafeCompany

Innan du skapar din egen JSON-LD-markup är det viktigt att känna till de safe-metoder som faktiskt finns på objekten i ett Shoporama-tema. Dessa är de stabila metoderna som du kan använda i Smarty.

$product (SafeProduct):

  • getName(), getDescription(), getOwnId(), getGtin(), getMpn(), getBrandName()
  • getPrice(), getSalePrice(), getRealPrice(), getLowest30DayPrice()
  • getStockCount() och getIsInStock()
  • getImage() och getImages() returnerar SafeImage med getSrc($w, $h, $type)
  • getAvgRating($no_round), getReviewCount(), getProductReviews($limit)
  • getUrl() ger produktens relativa sökväg

$webshop (SafeWebshop):

  • getName(), getDescription(), getCurrency(), getUrl(), getLogo()
  • getCompany() returnerar SafeCompany

$webshop->getCompany() (SafeCompany):

  • getName(), getRegNr(), getEmail(), getPhone()
  • getAddress(), getZipcode(), getCity(), getCountry()

Observera: Använd inte $product->getStock(), $product->getAverageRating(), $webshop->getCurrencyCode(), $webshop->getDomain(), $webshop->getEmail() eller $webshop->getPhone(). De finns inte som säkra metoder, och ditt tema kommer att ge fel. Använd istället getStockCount(), getAvgRating(), getCurrency(), getUrl() och getCompany()->getEmail()/getPhone().

Produktmarkup (Product)

Den viktigaste typen för en webbshop är produktmarkup. Infoga blocket i din produktmall (vanligtvis product/view.html):

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "<{$product->getName()|escape:'javascript'}>",
  "description": "<{$product->getDescription()|strip_tags|escape:'javascript'}>",
  "sku": "<{$product->getOwnId()|escape:'javascript'}>",
  <{if $product->getGtin()}>
  "gtin": "<{$product->getGtin()|escape:'javascript'}>",
  <{/if}>
  <{if $product->getMpn()}>
  "mpn": "<{$product->getMpn()|escape:'javascript'}>",
  <{/if}>
  <{if $product->getBrandName()}>
  "brand": {
    "@type": "Brand",
    "name": "<{$product->getBrandName()|escape:'javascript'}>"
  },
  <{/if}>
  <{if $product->getImage()}>
  "image": "<{$product->getImage()->getSrc(800, 800, 'fit')}>",
  <{/if}>
  "offers": {
    "@type": "Offer",
    "url": "<{$webshop->getUrl()}><{$product->getUrl()}>",
    "price": "<{$product->getRealPrice()|string_format:"%.2f"}>",
    "priceCurrency": "<{$webshop->getCurrency()}>",
    "availability": "<{if $product->getStockCount() > 0}>https://schema.org/InStock<{else}>https://schema.org/OutOfStock<{/if}>"
  }
}
</script>

Tre viktiga punkter i exemplet:

  • Priset hämtas med getRealPrice(), så att eventuella rea-priser och rabatter inkluderas och momsen läggs till.
  • Valuta hämtas med getCurrency()$webshop (returnerar t.ex. "DKK" eller "EUR").
  • Lagerstatus avgörs med getStockCount(). Du kan också använda getIsInStock() om du vill tillåta försäljning av lagerförda produkter med 0 i lager.

Tidigare pris (Omnibusdirektivet)

Om produkten är på rea rekommenderar Google att du visar det lägsta priset under de senaste 30 dagarna som referenspris. Använd getLowest30DayPrice() för att hämta det. Funktionen returnerar null om det inte finns tillräckligt med prishistorik.

Produktrecensioner (AggregateRating)

Om du använder Shoporamas inbyggda recensionssystem kan du lägga till ett genomsnittsbetyg direkt i Product-markupen. Det kan ge stjärnor i Googles sökresultat. Infoga blocket inuti Product-objektet:

<{if $product->getReviewCount() > 0}>
,
"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "<{$product->getAvgRating(true)|string_format:"%.1f"}>",
  "reviewCount": "<{$product->getReviewCount()}>"
}
<{/if}>

Parametern true till getAvgRating() ger ett icke-avrundat genomsnitt, vilket Google föredrar (t.ex. 4,3 istället för bara 4).

Butiksinformation (Store / LocalBusiness)

Du kan också markera själva webbutiken, t.ex. i din sidfotsmall. Hämta kontaktuppgifter från $webshop->getCompany(), så att de uppgifter du redan har angett under Företag, Företagsinformation, inkluderas automatiskt:

<{$company = $webshop->getCompany()}>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Store",
  "name": "<{$webshop->getName()|escape:'javascript'}>",
  "url": "<{$webshop->getUrl()}>"
  <{if $company}>
  ,
  <{if $company->getEmail()}>
  "email": "<{$company->getEmail()|escape:'javascript'}>",
  <{/if}>
  <{if $company->getPhone()}>
  "telephone": "<{$company->getPhone()|escape:'javascript'}>",
  <{/if}>
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "<{$company->getAddress()|escape:'javascript'}>",
    "postalCode": "<{$company->getZipcode()|escape:'javascript'}>",
    "addressLocality": "<{$company->getCity()|escape:'javascript'}>",
    "addressCountry": "<{$company->getCountry()|escape:'javascript'}>"
  }
  <{/if}>
  <{if $webshop->getLogo()}>
  ,
  "logo": "<{$webshop->getLogo()->getSrc(400, 400, 'fit')}>"
  <{/if}>
}
</script>

Se till att företagsuppgifterna är korrekt ifyllda i admin under Företag, Företagsuppgifter. Om du har en fysisk butik kan du använda LocalBusiness eller en mer specifik undertyp (t.ex. ClothingStore) som @type.

Brödsmulor (BreadcrumbList)

På produkt- och kategorisidor är det god SEO-praxis att markera brödsmulor. Exempel för en produkt med huvudkategori:

<{if $product->getMainCategory()}>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "<{$webshop->getName()|escape:'javascript'}>",
      "item": "<{$webshop->getUrl()}>"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "<{$product->getMainCategory()->getName()|escape:'javascript'}>",
      "item": "<{$webshop->getUrl()}><{$product->getMainCategory()->getUrl()}>"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "<{$product->getName()|escape:'javascript'}>",
      "item": "<{$webshop->getUrl()}><{$product->getUrl()}>"
    }
  ]
}
</script>
<{/if}>

Testa dina strukturerade data

Använd Googles och Schema.org:s verktyg för att validera din markering innan du går live:

  • Rich Results Test kontrollerar om din markering ger rich snippets i Google
  • Schema Markup Validator validerar JSON-LD-syntaxen
  • I Google Search Console kan du se rapporter om dina produkter och rich results efter att sidorna har indexerats

Tips: Om du redan har aktiverat automatisk strukturerad data i Shoporama, var noga med att undvika dubbletter. Kontrollera vad som redan finns på sidan innan du lägger till din egen markering.

Vanliga frågor

Måste jag överhuvudtaget koda JSON-LD själv?

Nej, inte nödvändigtvis. Shoporama har inbyggda automatiska strukturerade data för produkter, och det täcker det mesta. Att koda själv är främst relevant om du vill lägga till ytterligare fält eller använda en mer specifik @type, t.ex. för hotell, restauranger eller evenemang.

Vilka schematyper kan jag använda utöver Product?

I ett Shoporama-tema kan du bygga alla Schema.org-typer som finns som JSON-LD. De vanligaste för webbutiker är Product, Offer, AggregateRating, Review, BreadcrumbList, Store, LocalBusiness, Organization, WebSite med SearchAction och FAQPage för fasta FAQ-sidor.

Varför får jag felmeddelanden i Rich Results Test?

De vanligaste felen är saknade fält (t.ex. price utan priceCurrency), felaktig formatering av siffror eller citattecken som förstör JSON-syntaxen. Använd alltid |escape:'javascript' på alla textvärden i Smarty.

Hur lång tid tar det innan jag ser stjärnorna i Google?

Google måste först genindexera sidan innan din nya markering tas i bruk. Det kan ta från några dagar till ett par veckor. I Search Console kan du begära snabb genindexering av enskilda sidor.

Påverkar det mina placeringar på Google?

Strukturerade data är inte en direkt rankningsfaktor, men rich snippets med t.ex. pris och stjärnor gör ditt sökresultat mer synligt och kan öka klickfrekvensen. På sikt bidrar det till att förbättra din totala SEO.

Hur hanterar jag moms i prisfältet?

Använd getRealPrice(), som returnerar priset inklusive moms. Det är det pris som kunden möter i butiken, och det som Google förväntar sig i produktmarkupen på en B2C-butik. Om du ska visa pris exklusive moms (B2B), använd istället getPriceExVat().

Måste jag ha recensioner innan jag visar AggregateRating?

Ja. Lägg endast till AggregateRating om produkten faktiskt har recensioner. I exemplet ovan kontrolleras att getReviewCount() > 0, så att markup inte läggs till för produkter utan recensioner. Falska eller tomma betyg kan leda till en påföljd från Google.

Var hittar jag mina företagsuppgifter för Store-markup?

Gå till admin under Företag, Företagsinformation. De uppgifter du fyller i här blir tillgängliga via $webshop->getCompany() i ditt tema, så att Store-blocket fylls i automatiskt.

Var ska JSON-LD placeras på sidan?

Du kan placera den antingen i <head> eller i <body>. Båda alternativen är giltiga enligt Google. På produktsidor är det vanligt att placera den längst ner i produktmallen.

Min webbshop säljer på flera språk. Behöver jag markup för varje språk?

Ja, namn och beskrivningar i markeringen ska spegla den sida som kunden ser. Eftersom $product->getName() och $product->getDescription() automatiskt returnerar den översatta texten för det aktiva språket sker detta helt automatiskt när du använder exemplen här.

Behöver du hjälp med strukturerade data? Kontakta oss på support@shoporama.dk.