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"
]
}
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/"
}
}
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"
}
}
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>';
});
5. Validate before you ship
Check one Organization page, one Article page, and one Product page. Fix errors before adding more types. Common mistakes:
-
@idvalues that change on every request -
priceas a number with a currency symbol -
imageURLs that 404 -
authorset 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)