MAISON CODE .
/ SEO · Schema · JSON-LD · Growth · Architecture

Company Schemas: The SEO Language of Robots

Googlebot doesn't read English. It reads JSON-LD. A technical guide to dominating the Knowledge Graph with Organization, Product, and Breadcrumb Schemas.

AB
Alex B.
Company Schemas: The SEO Language of Robots

When a human looks at your product page, they see “$120.00”. They know it’s a price because it’s bold and near a “Buy” button. When Googlebot looks at your page, it sees <div>$120.00</div>. Is that the price? Is that the shipping cost? Is that the savings amount? Is that the model number “120”? Google uses Machine Learning to guess. But guessing is expensive and error-prone.

Structured Data (Schema.org) removes the guesswork. It is a standardized vocabulary (founded by Google, Microsoft, Yahoo, and Yandex) to explicitly tag data. You are whispering to the crawler: “This string ‘120.00’ is the Price. This string ‘USD’ is the Currency.”

If you implement this correctly, Google rewards you with Rich Snippets.

  • Stars: 5-star rating shown in search results.
  • Price: “120.00 USD” shown in search.
  • Availability: Green “In Stock” text.

These visual enhancers increase Click Through Rate (CTR) by an average of 30%. It is the highest ROI technical SEO task you can do.

Why Maison Code Discusses This

At Maison Code Paris, we act as the architectural conscience for our clients. We often inherit “modern” stacks that were built without a foundational understanding of scale. We see simple APIs that take 4 seconds to respond because of N+1 query problems, and “Microservices” that cost $5,000/month in idle cloud fees.

We discuss this topic because it represents a critical pivot point in engineering maturity. Implementing this correctly differentiates a fragile MVP from a resilient, enterprise-grade platform that can handle Black Friday traffic without breaking a sweat.

1. JSON-LD: The Modern Standard

In 2015, we used Microdata (cluttering HTML tags with itemprop="price"). It was messy and broke the layout. In 2025, we use JSON-LD (JavaScript Object Notation for Linked Data). It acts as a separate data layer. It lives in a <script> tag in the <head>. It does not affect the visual rendering at all.

2. The Organization Schema (Knowledge Graph)

This tells Google who you are. It helps you get that massive “Knowledge Panel” on the right side of desktop search results.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Maison Code Paris",
  "url": "https://maisoncode.paris",
  "logo": "https://maisoncode.paris/assets/logo-512.png",
  "description": "Luxury software engineering studio specialized in Headless Commerce.",
  "foundingDate": "2020-01-01",
  "founders": [
    {
      "@type": "Person",
      "name": "Alex B."
    }
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+33-1-00-00-00-00",
    "contactType": "sales",
    "areaServed": ["FR", "US", "AE"],
    "availableLanguage": ["English", "French"]
  },
  "sameAs": [
    "https://twitter.com/maisoncode",
    "https://linkedin.com/company/maisoncode",
    "https://github.com/maisoncode"
  ]
}

Key Strategy: The sameAs array is critical. It explicitly tells Google: “That LinkedIn page belongs to us.” This aggregates your authority signals.

3. The Product Schema (The Money Maker)

If you run an e-commerce store, this is non-negotiable. Without valid Product Schema, Google Merchant Center (Shopping) will reject your feed.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "The Developer Shirt",
  "image": [
    "https://example.com/photos/1x1/photo.jpg",
    "https://example.com/photos/16x9/photo.jpg"
  ],
  "description": "A shirt designed for deep work. 100% Cotton.",
  "sku": "DEV-SHIRT-001",
  "mpn": "925872",
  "brand": {
    "@type": "Brand",
    "name": "Maison Code"
  },
  "review": {
    "@type": "Review",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5"
    },
    "author": {
      "@type": "Person",
      "name": "John Doe"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "89"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/shirt",
    "priceCurrency": "USD",
    "price": "119.99",
    "priceValidUntil": "2026-11-20",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock",
    "shippingDetails": { 
       "@type": "OfferShippingDetails",
       "shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "USD" }
    }
  }
}

Critical Detail: The aggregateRating property is what generates the Stars in search results. You must aggregate reviews dynamically from your database (or Yotpo/Judge.me).

4. Dynamic Implementation in Next.js

Do not hardcode these. They must match the page content dynamically. If your price updates to $99 on the UI, the Schema MUST update to $99 instantly. If Schema says $99 and the visible page says $119, Google applies a Manual Action (Penalty) for “spammy structured data”.

import Head from 'next/head';

export default function ProductPage({ product }) {
  const schema = {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": product.title,
    "offers": {
      "@type": "Offer",
      "price": product.price.amount, // Ensure "119.99"
      "priceCurrency": product.price.currencyCode
    }
  };

  return (
    <>
      <Head>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
        />
      </Head>
      <h1>{product.title}</h1>
    </>
  );
}

5. BreadcrumbList Schema (Navigation)

This cleans up your URL display in Google. Instead of: maisoncode.paris/products/categories/shirts/silk Google displays: Home > Products > Shirts > Silk Shirt (Clickable breadcrumbs).

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [{
    "@type": "ListItem",
    "position": 1,
    "name": "Products",
    "item": "https://example.com/products"
  },{
    "@type": "ListItem",
    "position": 2,
    "name": "Shirts",
    "item": "https://example.com/products/shirts"
  }]
}

6. Validation: The Rich Results Test

You cannot verify this by just viewing the page source. You must use the Validator tools.

  1. Rich Results Test (Google): Tells you if you are eligible for shiny features (Stars/Price).
  2. Schema Markup Validator (Schema.org): Tells you if your syntax is valid JSON-LD.

Workflow:

  1. Develop Locally (localhost:3000).
  2. Use ngrok (tunnel) to expose your local server publicly.
  3. Paste the ngrok URL into Rich Results Test.
  4. Fix errors.
  5. Deploy.

7. Common Pitfalls

  • Currency Format: price must be a number string ("100.00"), not a formatted string ("$100").
  • Hidden Content: Marking up content that is never visible to the user (e.g., hidden in a locked div). Google hates this.
  • Review Spam: Marking up generic site reviews as product reviews.
  • Availability: Failing to update InStock -> OutOfStock when inventory hits 0.

6. Breadcrumbs for Mobile SEO

On Desktop, Breadcrumbs are “nice to have”. On Mobile, they are Critical Navigation. Google replaces the URL bar with the Breadcrumb trail. If you have: Home > Women > Shoes > Sneakers The user can tap “Shoes” directly from the SERP. This reduces bounce rate because users land on the exact category they want, even if they clicked a specific product. Technical Note: Ensure the item URL in Schema matches the canonical URL of the category page exactly (trailing slash matters).

7. Validating the Knowledge Graph

How do you know if Google “knows” you? Search for your brand name. If you see a box on the right with your Logo, Founder, and Social Profiles, you won. If not, your Organization Schema is weak. Strategy: Link to Wikidata and Wikipedia in the sameAs array. Google trusts Wikipedia more than your own site. If you don’t have a Wikipedia page, use Crunchbase.

8. Local SEO: The LocalBusiness Schema

If you have a physical office (Paris 8e), you are not just an Organization. You are a LocalBusiness. Google Maps loves this.

{
  "@type": "LocalBusiness",
  "name": "Maison Code Paris HQ",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Champs-Élysées",
    "addressLocality": "Paris",
    "postalCode": "75008",
    "addressCountry": "FR"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 48.8566,
    "longitude": 2.3522
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "18:00"
    }
  ]
}

This pushes you into the “Local Pack” (the Map Snippet) when someone searches “Software Agency Paris”.

You know when you search “Amazon” and there is a search bar inside the Google result? You can have that too.

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "url": "https://maisoncode.paris/",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://maisoncode.paris/search?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}

This increases brand dominance on the Search Engine Results Page (SERP).

9. FAQ Schema: Taking Up Space

Google allows you to display Questions and Answers directly in the search snippet. This pushes your competitors down the page. Even if users don’t click, they read your answer. “Do you use React?” -> “Yes, we are Remix experts.” This is “Zero-Click Search” optimization.

10. Conclusion

Structured Data is the bridge between your database and the world’s largest search engine. If you speak Google’s language (JSON-LD), Google listens. If you mumble in unstructured HTML, you get ignored. Invest in your Schema strategy. It is cheaper than buying ads.


Invisible on Google?

Does your beautiful site look boring in search results?

Hire our Architects.