← Resources

Technical SEO

Schema.org
for marketing sites:
a minimum viable graph.

Apr 20267 min readNous Frame

For a professional services or marketing site, the minimum viable Schema.org implementation is four JSON-LD blocks: Organization, WebSite, BreadcrumbList, and either Article or Service depending on page type. That's it. Everything else is additive and context-dependent.

The purpose of structured data is threefold: it enables rich results in Google Search (sitelinks search box, breadcrumb trails, review stars); it provides explicit entity signals that reinforce E-E-A-T for AI systems; and it gives knowledge graph crawlers (Google's and others) a machine-readable identity graph for your brand. Skipping it doesn't immediately hurt rankings, but it leaves signal on the table that your competitors may be using.

According to Google's Structured Data documentation, JSON-LD (JavaScript Object Notation for Linked Data) is the preferred format over Microdata and RDFa because it can be injected into the <head> independently of the HTML content — easier to maintain, easier to validate, and cleaner to update without touching template markup.

1. Organization — your brand entity

The Organization type establishes your company as a named entity in Google's knowledge graph. It should appear in the <head> of every page (typically in the root layout). Key fields: name, url, logo, sameAs (your social profiles — this is how Google links the website entity to your LinkedIn, Twitter/X, and Crunchbase profiles), and contactPoint.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Nous Frame",
  "url": "https://nousframe.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://nousframe.com/logo.png",
    "width": 512,
    "height": 512
  },
  "description": "Independent web design studio specialising in
    conversion-focused websites, SEO, and GEO optimisation.",
  "foundingDate": "2023",
  "sameAs": [
    "https://linkedin.com/company/nousframe",
    "https://twitter.com/nousframe",
    "https://github.com/nousframe"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "sales",
    "email": "contact@nousframe.com",
    "availableLanguage": ["English", "Russian"]
  }
}

2. WebSite — enables sitelinks search box

The WebSite type is required for Google to display the sitelinks search box on branded queries. Without it, the search box may appear anyway (Google infers it), but with it, you can specify the search action URL template precisely. Include it once on the homepage.

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Nous Frame",
  "url": "https://nousframe.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://nousframe.com/search?q={search_term_string}"
    },
    "query-input": "required name=search_term_string"
  }
}

3. BreadcrumbList — navigation hierarchy

BreadcrumbList enables breadcrumb rich results — the path display that appears below your page title in search results ("Home > Resources > Article Title"). It also helps Google understand your site hierarchy, which influences how pages are grouped and ranked for navigational queries. Add it to every page except the homepage.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://nousframe.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Resources",
      "item": "https://nousframe.com/resources"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Schema.org for marketing sites",
      "item": "https://nousframe.com/resources/schema-org-marketing"
    }
  ]
}

4. Article — for editorial and blog content

The Article type (or its subtypes BlogPosting and TechArticle) unlocks article rich results and, more importantly, provides AI systems with author attribution, publish date, and a structured description they can use for citation context. The datePublished and dateModified fields are especially important for content freshness signals.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Schema.org for marketing sites: a minimum viable graph",
  "description": "The four Schema.org types every marketing site needs.",
  "author": {
    "@type": "Organization",
    "name": "Nous Frame",
    "url": "https://nousframe.com"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Nous Frame",
    "logo": {
      "@type": "ImageObject",
      "url": "https://nousframe.com/logo.png"
    }
  },
  "datePublished": "2026-04-15",
  "dateModified": "2026-04-15",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://nousframe.com/resources/schema-org-marketing"
  },
  "keywords": ["Schema.org", "structured data", "JSON-LD", "SEO"]
}

For service pages: use Service schema

Service pages benefit from Service schema rather than Article. Use it to declare service type, provider, area served, and offer details. This is particularly useful for local service businesses and B2B firms with defined service offerings.

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Custom Web Design & Development",
  "description": "Bespoke marketing sites built with editorial craft
    and technical precision. No page builders.",
  "provider": {
    "@type": "Organization",
    "name": "Nous Frame",
    "url": "https://nousframe.com"
  },
  "serviceType": "Web Design",
  "areaServed": "Worldwide",
  "url": "https://nousframe.com/services"
}

Validation and monitoring

Use Google's Rich Results Test to validate each JSON-LD block after implementation. It shows which rich result types are eligible for the page and flags field-level errors. For ongoing monitoring, Google Search Console's "Enhancements" section reports structured data errors and rich result status across the full site — check it monthly and after any significant template change.

Common mistakes: using relative URLs instead of absolute in "url" and "item" fields (Schema.org requires absolute); mismatching datePublished with the visible date on the page; and adding schema types to pages where the content doesn't actually match (Google penalises schema that misleads).