The template approach in one paragraph
Eight schema types cover ~95% of practical SEO use cases for Canadian sites in 2026: Organization, LocalBusiness, WebSite (with SearchAction), Article, FAQPage, BreadcrumbList, Product, and Service. Each block below is copy-paste ready, with Canadian examples (CAD currency, Canadian address format). Add to <head> as <script type='application/ld+json'>. Validate with Google's Rich Results Test before deploy. Don't over-implement: schema for templates that don't earn SERP features is overhead, not lift.
Organization (sitewide, in head)
Defines who the website belongs to. Goes in every page's <head>, sitewide. Use the same @id everywhere so other schema can reference it.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yourdomain.ca/#organization",
"name": "Your Company Name",
"url": "https://yourdomain.ca/",
"logo": "https://yourdomain.ca/logo.png",
"sameAs": [
"https://www.linkedin.com/company/your-company",
"https://twitter.com/yourhandle",
"https://www.instagram.com/yourhandle"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-416-555-0100",
"contactType": "customer service",
"areaServed": "CA",
"availableLanguage": ["en", "fr"]
}
}LocalBusiness (homepage, contact page)
For businesses with a physical Canadian location or service area. Use the most specific subtype (Dentist, AttorneyLaw, Restaurant, etc.) where applicable.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://yourdomain.ca/#business",
"name": "Your Business Name",
"image": "https://yourdomain.ca/storefront.jpg",
"url": "https://yourdomain.ca/",
"telephone": "+1-416-555-0100",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Yonge St",
"addressLocality": "Toronto",
"addressRegion": "ON",
"postalCode": "M5B 1S5",
"addressCountry": "CA"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 43.6532,
"longitude": -79.3832
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "17:00"
}
]
}WebSite + SearchAction (sitewide)
Lets Google show a sitelinks search box for your brand. Implement once sitewide.
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://yourdomain.ca/#website",
"url": "https://yourdomain.ca/",
"name": "Your Site Name",
"publisher": { "@id": "https://yourdomain.ca/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": "https://yourdomain.ca/?s={search_term_string}",
"query-input": "required name=search_term_string"
}
}Article (blog posts, guides)
For blog posts, long-form guides, news articles. Use Article (or BlogPosting / NewsArticle for stricter subtypes).
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article Title",
"description": "A 150-character meta-description-style summary.",
"image": "https://yourdomain.ca/article-hero.jpg",
"datePublished": "2026-04-30T09:00:00-04:00",
"dateModified": "2026-04-30T09:00:00-04:00",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://yourdomain.ca/about/author/"
},
"publisher": { "@id": "https://yourdomain.ca/#organization" },
"mainEntityOfPage": "https://yourdomain.ca/blog/your-article-slug/"
}FAQPage (any page with Q&A)
Apply only to pages that are genuinely FAQ-driven (not promotional pages with a tacked-on FAQ section). Google has tightened FAQ rich-result eligibility; use sparingly and accurately.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What does SEO cost in Canada in 2026?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Canadian SEO ranges from C$1,500 to C$25,000+/month depending on stage and competition. Typical mid-market: C$3,500–C$8,000/month."
}
},
{
"@type": "Question",
"name": "How long until I see SEO results?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Plan for 6 months to evaluate trajectory. Some technical fixes show in 30–60 days; content programs typically compound from month 4 onward."
}
}
]
}Product (Shopify/WooCommerce/custom)
For ecommerce product pages. Critical for shopping rich results. Always include priceCurrency: 'CAD' for Canadian sites.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Your Product Name",
"image": ["https://yourdomain.ca/product1.jpg"],
"description": "Detailed product description (150–500 chars).",
"sku": "SKU-12345",
"brand": { "@type": "Brand", "name": "Your Brand" },
"offers": {
"@type": "Offer",
"url": "https://yourdomain.ca/products/your-product/",
"priceCurrency": "CAD",
"price": "149.00",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "84"
}
}Service (service-specific landing pages)
For pages selling a specific service (SEO retainer, dental cleaning, legal consult). Pair with Offer for pricing context.
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "SEO Consulting",
"provider": { "@id": "https://yourdomain.ca/#organization" },
"areaServed": { "@type": "Country", "name": "Canada" },
"name": "Mid-Market SEO Retainer",
"description": "Monthly SEO retainer for Canadian mid-market businesses (C$3,500–C$8,000/month range).",
"offers": {
"@type": "Offer",
"priceCurrency": "CAD",
"price": "3500",
"unitText": "MONTH"
}
}Validation and common mistakes
- Validate every block in Rich Results Testhttps://search.google.com/test/rich-results — paste your URL or markup. Fix every error before deploying.
- Schema.org Validator catches structural issueshttps://validator.schema.org/ — covers more types than Google's tool but doesn't tell you about rich-result eligibility.
- Don't repeat schema across types unnecessarilyOrganization on every page is fine; LocalBusiness only on relevant pages (homepage, contact, location pages).
- Don't fake dataAggregateRating with no real reviews, FAQPage with content not visible on the page — both can trigger Google manual actions. Schema must reflect content actually on the page.
- Use @id consistentlySame @id for the same entity across pages lets Google connect them (Organization → LocalBusiness → Service). Different @ids fragment your knowledge graph.
- Watch for plugin schema collisionsIf your CMS plugin auto-injects schema and you also hand-craft it, you can end up with duplicate or conflicting blocks. Audit and consolidate.
Frequently Asked Questions
Implementation questions from Canadian operators.