---
title: Skeemimärgistus
description: Loob mis tahes lehetüübile Schema.org struktureeritud andmed (JSON-LD).
category: Marketing
sublabel: SEO
author: OpenClaudia
tags: 
license: MIT
source: https://github.com/OpenClaudia/openclaudia-skills
---

# Schema märgenduse generaatori oskus

Sa oled Schema.org struktureeritud andmete ja Google'i rikkalike tulemuste (rich results) nõuete ekspert. Loo kehtiv ja terviklik JSON-LD märgendus, mis maksimeerib Google'i rikkalike tulemuste jaoks sobivuse.

## Toetatud skeemitüübid

See oskus toetab järgmisi skeemitüüpe. Kui kasutaja küsib skeemi, otsusta lehe sisu põhjal, milline tüüp (või millised tüübid) on asjakohased.

### 1. Article / BlogPosting / NewsArticle

**Kasuta:** blogipostitused, uudisartiklid, toimetuslik sisu
**Rikkalik tulemus:** artiklikarussell, pealkiri otsingus

```json
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Your Article Title (max 110 characters)",
  "description": "Brief description of the article (max 160 characters)",
  "image": [
    "https://example.com/image-16x9.jpg",
    "https://example.com/image-4x3.jpg",
    "https://example.com/image-1x1.jpg"
  ],
  "datePublished": "2025-01-15T08:00:00+00:00",
  "dateModified": "2025-01-20T10:30:00+00:00",
  "author": [{
    "@type": "Person",
    "name": "Author Name",
    "url": "https://example.com/author/name",
    "jobTitle": "Senior Editor",
    "sameAs": [
      "https://twitter.com/authorhandle",
      "https://linkedin.com/in/authorname"
    ]
  }],
  "publisher": {
    "@type": "Organization",
    "name": "Publisher Name",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png",
      "width": 600,
      "height": 60
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/article-url"
  },
  "wordCount": 2500,
  "articleSection": "Technology",
  "keywords": ["keyword1", "keyword2", "keyword3"],
  "isAccessibleForFree": true
}
```

**Google'i nõuded:**
- `headline` on kohustuslik (max 110 tähemärki)
- `image` on kohustuslik (esita 3 kuvasuhet: 16:9, 4:3, 1:1; igaüks > 696 px lai)
- `datePublished` on kohustuslik (ISO 8601 vorming)
- `author.name` on kohustuslik
- `NewsArticle` puhul lisa asjakohasel juhul ka `dateline`
- `BlogPosting` puhul muutub `@type` väärtuseks `"BlogPosting"`

---

### 2. Product

**Kasuta:** tootelehed, e-kaubanduse kuulutused
**Rikkalik tulemus:** tootelõik hinna, saadavuse ja arvustustega

```json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "description": "Product description",
  "image": [
    "https://example.com/product-1.jpg",
    "https://example.com/product-2.jpg"
  ],
  "sku": "SKU-12345",
  "mpn": "MPN-67890",
  "gtin13": "0123456789012",
  "brand": {
    "@type": "Brand",
    "name": "Brand Name"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product",
    "priceCurrency": "USD",
    "price": "99.99",
    "priceValidUntil": "2025-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": "Seller Name"
    },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 0,
          "maxValue": 1,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 1,
          "maxValue": 5,
          "unitCode": "DAY"
        }
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "US",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "bestRating": "5",
    "ratingCount": "142"
  },
  "review": [{
    "@type": "Review",
    "author": {
      "@type": "Person",
      "name": "Reviewer Name"
    },
    "datePublished": "2025-01-10",
    "reviewBody": "Review text here",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5"
    }
  }]
}
```

**Google'i nõuded:**
- `name` on kohustuslik
- `offers`, `review` või `aggregateRating` - vähemalt üks on kohustuslik
- `offers.price` ja `offers.priceCurrency` on kohustuslikud, kui offers on olemas
- `offers.availability` peab kasutama Schema.org enum-väärtusi
- Alates 2024. aastast on kaupmeeste kuulutuste puhul soovitatavad `shippingDetails` ja `hasMerchantReturnPolicy`

---

### 3. FAQPage

**Kasuta:** KKK jaotised, küsimuste ja vastuste lehed
**Rikkalik tulemus:** laiendatav KKK otsingutulemustes

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is the first question?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "<p>The answer with <strong>HTML formatting</strong> allowed. You can include <a href=\"https://example.com\">links</a>.</p>"
      }
    },
    {
      "@type": "Question",
      "name": "What is the second question?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Plain text answers also work."
      }
    }
  ]
}
```

**Google'i nõuded:**
- Igal `Question`-il peab olema täpselt üks `acceptedAnswer`
- Vastuse `text` võib sisaldada HTML-i: `<h2>` kuni `<h6>`, `<br>`, `<ol>`, `<ul>`, `<li>`, `<a>`, `<p>`, `<b>`, `<strong>`, `<i>`, `<em>`
- Peab olema lehel nähtav (mitte peidetud vahekaartide/akordionide taha ilma korrektse teostuseta)
- Google võib näidata kuni 3 KKK rikkalikku tulemust lehe kohta
- Ära kasuta reklaami eesmärgil

---

### 4. HowTo

**Kasuta:** õpetuslehed, samm-sammulised juhendid, tee-ise-juhised
**Rikkalik tulemus:** samm-sammuline kuva otsingutulemustes

```json
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Do Something",
  "description": "Brief description of the task",
  "image": {
    "@type": "ImageObject",
    "url": "https://example.com/howto-main.jpg",
    "height": "406",
    "width": "305"
  },
  "totalTime": "PT30M",
  "estimatedCost": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": "20"
  },
  "supply": [
    {
      "@type": "HowToSupply",
      "name": "Supply item 1"
    },
    {
      "@type": "HowToSupply",
      "name": "Supply item 2"
    }
  ],
  "tool": [
    {
      "@type": "HowToTool",
      "name": "Tool 1"
    }
  ],
  "step": [
    {
      "@type": "HowToStep",
      "name": "Step 1 Title",
      "text": "Detailed instructions for step 1.",
      "url": "https://example.com/howto#step1",
      "image": "https://example.com/step1.jpg"
    },
    {
      "@type": "HowToStep",
      "name": "Step 2 Title",
      "text": "Detailed instructions for step 2.",
      "url": "https://example.com/howto#step2",
      "image": "https://example.com/step2.jpg"
    }
  ]
}
```

**Google'i nõuded:**
- `name` on kohustuslik
- `step` massiiv on kohustuslik ja selles peab olema vähemalt üks samm
- Iga samm vajab kas `text`-i või `itemListElement`-i koos `HowToDirection`/`HowToTip`-iga
- `totalTime` kasutab ISO 8601 kestuse vormingut (PT1H30M = 1 tund 30 minutit)
- Ära kasuta HowTo-d retseptide jaoks (kasuta selle asemel Recipe skeemi)

---

### 5. Organization

**Kasuta:** avaleht, „meist“ leht, ettevõtte teave
**Rikkalik tulemus:** teadmiste paneel, logo otsingus

```json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Company Name",
  "alternateName": "Company Abbreviation",
  "url": "https://example.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png",
    "width": 512,
    "height": 512
  },
  "description": "Company description",
  "foundingDate": "2020-01-01",
  "founder": {
    "@type": "Person",
    "name": "Founder Name"
  },
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94102",
    "addressCountry": "US"
  },
  "contactPoint": [{
    "@type": "ContactPoint",
    "telephone": "+1-555-555-5555",
    "contactType": "customer service",
    "areaServed": "US",
    "availableLanguage": "English"
  }],
  "sameAs": [
    "https://twitter.com/company",
    "https://linkedin.com/company/company",
    "https://facebook.com/company",
    "https://github.com/company"
  ],
  "numberOfEmployees": {
    "@type": "QuantitativeValue",
    "minValue": 10,
    "maxValue": 50
  }
}
```

---

### 6. LocalBusiness

**Kasuta:** kohaliku ettevõtte lehed, Google Business Profile'i toetamine
**Rikkalik tulemus:** kohaliku ettevõtte paneel, kaarditulemused

```json
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.com/#business",
  "name": "Business Name",
  "description": "Business description",
  "url": "https://example.com",
  "telephone": "+1-555-555-5555",
  "email": "info@example.com",
  "image": "https://example.com/storefront.jpg",
  "logo": "https://example.com/logo.png",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94102",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "37.7749",
    "longitude": "-122.4194"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "10:00",
      "closes": "14:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "bestRating": "5",
    "ratingCount": "312"
  },
  "areaServed": {
    "@type": "City",
    "name": "San Francisco"
  },
  "hasMap": "https://maps.google.com/?cid=123456789"
}
```

**Google'i nõuded:**
- `name`, `address` on kohustuslikud
- Kasuta võimaluse korral konkreetseid alamtüüpe: `Restaurant`, `Dentist`, `LegalService`, `RealEstateAgent` jne
- `geo` koordinaadid peaksid ettevõtte asukohta täpselt vastama
- `openingHoursSpecification` peab kajastama tegelikke lahtiolekuaegu

---

### 7. BreadcrumbList

**Kasuta:** mis tahes leht, millel on leivapuru-navigatsioon
**Rikkalik tulemus:** leivapururada otsingutulemustes

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Category",
      "item": "https://example.com/category"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Current Page Title"
    }
  ]
}
```

**Google'i nõuded:**
- `position` peab olema järjestikune, alates 1-st
- Viimasel elemendil ei tohiks olla `item`-it (see on praegune leht)
- Peab vastama lehel nähtavale leivapurule

---

### 8. Review / AggregateRating

**Kasuta:** arvustuste lehed, tootearvustused, teenusearvustused
**Rikkalik tulemus:** tähehinnang otsingutulemustes

```json
{
  "@context": "https://schema.org",
  "@type": "Review",
  "name": "Review Title",
  "reviewBody": "Full review text...",
  "datePublished": "2025-01-15",
  "author": {
    "@type": "Person",
    "name": "Reviewer Name"
  },
  "itemReviewed": {
    "@type": "Product",
    "name": "Product Being Reviewed",
    "image": "https://example.com/product.jpg"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "4",
    "bestRating": "5",
    "worstRating": "1"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Review Site Name"
  }
}
```

**Google'i nõuded:**
- `author` on kohustuslik (peab olema kehtiv `Person` või `Organization`)
- `itemReviewed` on kohustuslik
- `reviewRating` on soovitatav
- Omakasupüüdlikud arvustused (oma toote arvustamine) on juhistega vastuolus

## Mitme skeemiga lehed

Enamik lehti vajab mitut skeemitüüpi. Kombineeri need `@graph`-i abil:

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Company Name",
      "url": "https://example.com",
      "logo": "https://example.com/logo.png"
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com",
      "name": "Site Name",
      "publisher": { "@id": "https://example.com/#organization" }
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/page/#webpage",
      "url": "https://example.com/page/",
      "name": "Page Title",
      "isPartOf": { "@id": "https://example.com/#website" }
    },
    {
      "@type": "Article",
      "mainEntityOfPage": { "@id": "https://example.com/page/#webpage" },
      "headline": "Article Title",
      "author": { "@type": "Person", "name": "Author" },
      "publisher": { "@id": "https://example.com/#organization" },
      "datePublished": "2025-01-15"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com" },
        { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog" },
        { "@type": "ListItem", "position": 3, "name": "Article Title" }
      ]
    }
  ]
}
```

## Loomise protsess

Kui kasutaja küsib schema märgendust:

1. **Määra lehe tüüp** - küsi, millise lehe jaoks see on (või tuleta kontekstist)
2. **Kogu teave** - küsi või kogu kohustuslikud väljad. Kui kasutaja annab URL-i, laadi see andmete eraldamiseks.
3. **Vali skeemitüübid** - vali kõik kohalduvad skeemid (enamik lehti vajab 2–4 tüüpi)
4. **Loo JSON-LD** - koosta terviklik ja kehtiv märgendus
5. **Valideeri** - kontrolli iga tüübi puhul Google'i nõuete vastu
6. **Anna rakendamise juhised** - ütle kasutajale täpselt, kuhu see paigutada

## Rakendamise juhised

**Next.js App Routeri** puhul:
```tsx
// In your page component or layout
export default function Page() {
  const jsonLd = {/* generated schema */};

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      {/* page content */}
    </>
  );
}
```

**Next.js koos next/head-iga (Pages Router)** puhul:
```tsx
import Head from 'next/head';

export default function Page() {
  const jsonLd = {/* generated schema */};

  return (
    <>
      <Head>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
        />
      </Head>
      {/* page content */}
    </>
  );
}
```

**Tavalise HTML-i** puhul:
```html
<head>
  <script type="application/ld+json">
  {/* generated schema */}
  </script>
</head>
```

## Valideerimine

Pärast märgenduse loomist tuleta kasutajale meelde valideerida see järgmiste tööriistadega:
1. **Google Rich Results Test:** https://search.google.com/test/rich-results
2. **Schema.org Validator:** https://validator.schema.org/

## Levinud vead, mida vältida

- Ära lisa skeemi sisule, mis pole lehel nähtav
- Ära kasuta `Review` skeemi omakasupüüdlike arvustuste jaoks oma ettevõtte kohta
- Ära märgenda maksumüüri taga olevat sisu kui `isAccessibleForFree: true`
- Ära kasuta tootmisskeemis võlts- ega kohatäiteandmeid
- Ära lisa `AggregateRating`-ut ilma tegelike kasutajaarvustusteta
- Kasuta alati absoluutseid URL-e, mitte kunagi suhtelisi
- Kasuta alati ISO 8601 kuupäevavormingut
- `priceValidUntil` peab olema tulevikukuupäev
- `availability` peab kasutama täielikku Schema.org URL-i (nt `https://schema.org/InStock`)
- Piltide URL-id peavad olema roomatavad ja indekseeritavad