DEV Community

Cover image for Schema.org for Small Business Sites: Organization, Article, and Product JSON-LD You Can Ship
AumCreate
AumCreate

Posted on

Schema.org for Small Business Sites: Organization, Article, and Product JSON-LD You Can Ship

Search engines and AI answer engines read structured data more reliably when each page has one clear job. For a small business site, the useful starting set is small: Organization for the business, Article for editorial pages, and Product for product pages. Add them in that order, validate, then add extras.

Rule: markup must describe what a visitor can see. Do not mark up a rating, price, author, or address that is not on the page.

1. Organization: the business entity

Use one Organization node sitewide, or at least on the homepage and about page. Keep the same @id so other nodes can reference it.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Example Pte Ltd",
  "url": "https://example.com/",
  "logo": "https://example.com/logo.png",
  "email": "hello@example.com",
  "telephone": "+65-0000-0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1 Example Road",
    "addressLocality": "Singapore",
    "postalCode": "000000",
    "addressCountry": "SG"
  },
  "sameAs": [
    "https://www.linkedin.com/company/example",
    "https://github.com/example"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Use sameAs only for profiles you control. Leave out aggregateRating unless real reviews exist on the page.

2. Article: editorial pages

Use Article on blog posts, guides, and news posts. The visible headline, author, and dates must match the markup.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "@id": "https://example.com/blog/example-post/#article",
  "headline": "A clear headline under 110 characters",
  "description": "One sentence that matches the visible summary.",
  "image": ["https://example.com/img/example.jpg"],
  "datePublished": "2026-10-21T09:00:00+08:00",
  "dateModified": "2026-10-21T09:00:00+08:00",
  "author": {
    "@type": "Person",
    "name": "Author Name",
    "url": "https://example.com/about/author/"
  },
  "publisher": {
    "@id": "https://example.com/#organization"
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/blog/example-post/"
  }
}
Enter fullscreen mode Exit fullscreen mode

If you do not output a sitewide Organization node, replace the publisher reference with a full Organization object.

3. Product: product pages

Use Product on pages that sell one product. Product needs offers or review/aggregateRating. For a small shop, start with offers and skip ratings unless they are real.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://example.com/products/example/#product",
  "name": "Example Product",
  "image": ["https://example.com/img/example-product.jpg"],
  "description": "What the product is and who it is for.",
  "sku": "EX-001",
  "brand": {
    "@type": "Brand",
    "name": "Example"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/example/",
    "priceCurrency": "SGD",
    "price": "49.00",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2026-12-31"
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Add Organization with a small WordPress snippet

If you are not using a schema plugin, this prints an Organization node on the front page. Replace the sameAs URL with your own profile.

add_action('wp_head', function () {
    if (!is_front_page()) {
        return;
    }

    $data = [
        '@context' => 'https://schema.org',
        '@type' => 'Organization',
        '@id' => home_url('/#organization'),
        'name' => get_bloginfo('name'),
        'url' => home_url('/'),
        'logo' => get_site_icon_url(),
        'sameAs' => [
            'https://www.linkedin.com/company/example',
        ],
    ];

    echo '<script type="application/ld+json">';
    echo wp_json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    echo '</script>';
});
Enter fullscreen mode Exit fullscreen mode

5. Validate before you ship

Check one Organization page, one Article page, and one Product page. Fix errors before adding more types. Common mistakes:

  • @id values that change on every request
  • price as a number with a currency symbol
  • image URLs that 404
  • author set to the company when the visible byline is a person
  • Product markup on category pages that list many products

If you use WordPress and want these nodes emitted from one place, AumViso is a free plugin that handles schema structured data, sitemap, meta, and internal links: AumViso.

Top comments (0)