# Organization and WebSite schema: the site-wide markup to add first

> The two JSON-LD blocks every business site should have, what Google does with them, a complete example with logo and sameAs, and how to add them in WordPress and Shopify without creating duplicates.

Updated 2026-09-25 · Structured data · HTML version: https://getreport.app/guides/organization-and-website-schema

Before a page can earn stars, prices or breadcrumbs in search results, search engines need to know whose site it is. Two small blocks of structured data answer that: **Organization** says who you are (name, logo, official profiles, contact details) and **WebSite** says what the site is called. They take 20 minutes to add, rarely need changing, and every other piece of structured data on the site can point back to them. This guide explains what each field does, gives a complete example, and shows how to add them in WordPress and Shopify without ending up with two competing copies.

## Quick answer

- Add one **Organization** entity (or a **LocalBusiness** subtype if you have premises customers visit) with `name`, `url`, `logo` and `sameAs`. Add `contactPoint` and `address` if they apply.
- `logo`: a square-ish image of at least **112 × 112 px** that still reads on a white background.
- `sameAs`: the full URLs of your own profiles (Instagram, LinkedIn, Facebook, Wikipedia), not the networks' home pages.
- Add one **WebSite** entity on the home page with `name` and `url`, the name you want Google to show as your site name.
- Put both in one `@graph` with `@id`s. If an SEO plugin already outputs them, fill in its settings instead of adding a second block.
- Check with the [schema validator](https://getreport.app/tools/schema-validator).

## Why site-wide schema matters

Search engines already guess who owns a site from its content, its links and its profiles elsewhere. Organization markup replaces the guess with a statement. Google documents several uses for it: the logo can appear next to your results and in the knowledge panel, and the other fields help it tell your business apart from others with a similar name. The "Example Shop" in London and the one in Leeds are two different companies; `url`, `address` and `sameAs` are how a search engine keeps them apart.

WebSite markup has a narrower job. Google uses the `name` in WebSite markup on the home page as one of its sources for the **site name** shown above your results. Without it, Google picks from your title tag or other signals, which is how a shop ends up labelled with its domain or its tagline.

Neither block creates a rich result on its own, and neither is a ranking boost. What they give you is a correct identity, and a place for your Product, Article and LocalBusiness markup to point to as `publisher` or `seller`. Google's [Organization structured data documentation](https://developers.google.com/search/docs/appearance/structured-data/organization) lists every property it reads.

## How getReport checks it

> **Free tool:** [Schema markup validator](https://getreport.app/tools/schema-validator): Find and validate JSON-LD and microdata on any page: parse errors, missing required properties, rich-result eligibility and duplicate entities, with the fix for each.

The schema validator (and the Structured data module of every report) parses each JSON-LD block on the page, including entities inside `@graph`, and checks them against the properties search engines need. Microdata is detected and counted, but the checks below read JSON-LD, which is what Google recommends.

![The logo and sameAs finding on a shop site whose Organization block has a name and URL but no logo and no social profile links](https://getreport.app/guides/img/organization-and-website-schema/finding.webp "The finding names the entity and says which of logo and sameAs is missing.")

> **Check: Organization structured data has a logo and sameAs links.** Google uses logo for the brand box in search and sameAs (your social profiles) to connect the brand across the web. Without them the box shows no logo and no profile links.
>
> 1. Add "logo" with the URL of a square image of at least 112×112 px.
> 2. Add "sameAs" with an array of your official profile URLs (Facebook, Instagram, LinkedIn, Wikipedia…).

The check applies to Organization, LocalBusiness and their common subtypes (Corporation, Store, Restaurant and similar). It confirms that both fields are present; it does not download the logo, so check its size yourself.

> **Check: Structured data found.** Structured data lets Google show rich results such as prices, review stars, breadcrumbs and event dates. Without it, your listing is plain text.
>
> 1. Add a JSON-LD script describing the page's main entity (Organization, Product, Article…).
> 2. Most CMS SEO plugins generate this for you; check their schema settings.

> **Check: Required schema properties.** Google shows a rich result (price, stars, breadcrumb, event date) only when the entity carries the properties it requires. Without them the block is valid but earns nothing in search.
>
> 1. Open the technical detail for the full list, one line per entity type and property.
> 2. Add each property to the JSON-LD block. In WooCommerce, Yoast or Rank Math this usually means filling in the price, image or author field on the item itself.

For Organization and WebSite, the properties checked are `name` and `url`, the schema.org minimum. For LocalBusiness and its subtypes, `name`, `address` and `telephone`. Google's own documentation marks no Organization property as strictly required, so a pass here means the identity is complete enough to be useful.

> **Check: Structured data entities are unique.** Two blocks describing the same Organization, WebSite or Product make Google pick one at random, and their properties may disagree. Usually a theme and an SEO plugin both emit the block.
>
> 1. Keep one block per entity; turn off the schema output of either the theme or the SEO plugin.
> 2. If both are needed, merge them into one @graph with a single entity per @id.

More than one root Organization or more than one root WebSite on the same page is flagged. This is the most common problem on WordPress sites, where the theme and the SEO plugin each print their own. The [structured data learn page](https://getreport.app/learn/structured-data) has the short version.

## Step by step

### 1. Collect the facts

Before writing any code, gather:

- The **name** exactly as customers know it, and the legal name if different.
- The **home page URL** in its final form: https, with or without www, the same as your canonical tags.
- A **logo** file: at least 112 × 112 px (512 × 512 px is a comfortable size), PNG, JPG, WebP or SVG, on a solid background or one that looks right on white. Google asks that the logo look right on a plain white background, so a white logo on a transparent background disappears.
- The **profiles** you control: the full URL of each (`https://www.instagram.com/exampleshop`), not `https://instagram.com`.
- **Contact details** you are happy to publish: a customer service phone or email.
- If customers visit you: the **address**, phone and opening hours.

### 2. Write the Organization and WebSite blocks

One `<script type="application/ld+json">` with a `@graph` holds both. The `@id` values are just stable identifiers (the home page URL plus a fragment is the convention); other entities refer to them instead of repeating the details. Put this in the `<head>` of the home page, or in the site-wide template:

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://www.example.com/#organization",
      "name": "Example Shop",
      "legalName": "Example Shop Ltd",
      "url": "https://www.example.com/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://www.example.com/images/logo-512.png",
        "width": 512,
        "height": 512
      },
      "sameAs": [
        "https://www.instagram.com/exampleshop",
        "https://www.facebook.com/exampleshop",
        "https://www.linkedin.com/company/exampleshop"
      ],
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer service",
        "telephone": "+44-20-7946-0000",
        "email": "help@example.com",
        "availableLanguage": ["en"]
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://www.example.com/#website",
      "name": "Example Shop",
      "alternateName": "ExampleShop",
      "url": "https://www.example.com/",
      "publisher": { "@id": "https://www.example.com/#organization" }
    }
  ]
}
</script>
```

`logo` can also be a plain URL string; the `ImageObject` form lets you state the size. All URLs must be absolute. `alternateName` on WebSite is an optional second name Google may use for the site name, such as an abbreviation.

### 3. Use a LocalBusiness subtype if you have premises

A shop, restaurant, practice or salon that customers visit should use the most specific subtype of LocalBusiness **instead of** Organization, as the same single entity. It takes everything above plus the address and phone:

```json
{
  "@context": "https://schema.org",
  "@type": "Store",
  "@id": "https://www.example.com/#organization",
  "name": "Example Shop",
  "url": "https://www.example.com/",
  "logo": "https://www.example.com/images/logo-512.png",
  "image": "https://www.example.com/images/shopfront.jpg",
  "telephone": "+44-20-7946-0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1 High Street",
    "addressLocality": "London",
    "postalCode": "N1 9GU",
    "addressCountry": "GB"
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    "opens": "09:00",
    "closes": "18:00"
  }],
  "sameAs": ["https://www.instagram.com/exampleshop"]
}
```

The address must match what your Google Business Profile and your contact page say, character for character where possible.

### 4. Add a SearchAction only if the site has search

`potentialAction` with a `SearchAction` used to power the sitelinks search box under a brand's result. Google retired that search box in November 2024, so the markup no longer changes anything in Google. Leaving it in place is harmless, and other consumers may still read it, but only if the URL is real. If your site has a search page (WordPress does, at `/?s=`), the block goes inside the WebSite entity:

```json
"potentialAction": {
  "@type": "SearchAction",
  "target": {
    "@type": "EntryPoint",
    "urlTemplate": "https://www.example.com/?s={search_term_string}"
  },
  "query-input": "required name=search_term_string"
}
```

Open the URL with a real search term in place of `{search_term_string}` before publishing it. If it does not show search results, leave the block out.

### 5. Decide where it goes

Google asks for Organization markup on the home page or on one page that describes the organisation (an About page); it does not need to be on every page. WebSite markup for the site name belongs on the home page. Many sites print both on every page anyway, because the SEO plugin puts them in a site-wide `@graph` and each page's Article or Product points to the `#organization` `@id` as its publisher. Both approaches are fine. What matters is that every page has at most **one** of each, with the same values.

### 6. Connect the rest of your structured data

Once `#organization` exists, other entities refer to it instead of repeating it: `"publisher": { "@id": "https://www.example.com/#organization" }` on an Article, `"seller"` on a Product's offer. That keeps the name and logo in one place. [JSON-LD basics](https://getreport.app/guides/json-ld-basics) explains `@id` and `@graph` in more depth, and [product schema](https://getreport.app/guides/product-schema-price-availability-reviews) shows the Product side.

## Platform notes

### WordPress

Yoast SEO and Rank Math both output Organization and WebSite in a `@graph` on every page. Fill in their settings instead of adding your own block:

- **Yoast SEO**: Yoast SEO → Settings → Site representation. Choose "Organization", enter the name, upload the logo, and add your profile URLs under "Other profiles". Those become `logo` and `sameAs`.
- **Rank Math**: Rank Math SEO → Titles & Meta → Local SEO. Choose "Company", set the name and logo, and fill in the social profile fields, which become `sameAs`. Rank Math's Local SEO module adds fields for the address and opening hours.

Then run the validator. If it reports duplicate entities, something else is printing a second Organization or WebSite: usually the theme, or a dedicated schema plugin alongside the SEO plugin. Turn off the schema output in one of them rather than adding a third block. The report's WordPress findings name the generators it saw.

### Shopify

Many Shopify themes print Organization and WebSite themselves, taking the logo from the theme's header settings and `sameAs` from the social media links in Theme settings. Fill those in first. To see what your theme outputs, search the theme code (Online Store → Themes → Edit code) for `"Organization"`; it is usually in `layout/theme.liquid` or the header section. Edit that block rather than adding a second one, and remember that theme updates can overwrite code edits.

### Static sites and custom builds

Put the `@graph` block in the shared layout template, generated from one config object (name, logo, profiles) so it cannot drift between pages.

## Verify

- Run the schema validator on the home page. "Organization structured data has a logo and sameAs links", "Structured data entities are unique" and "Organization, WebSite structured data has every required property" should all pass.
- Open every `sameAs` URL and the logo URL in a private window. Each should load without a redirect or login.
- Run the validator on one inner page too, especially on WordPress, where the theme may print markup only on some templates.
- Changes to the site name and logo in Google are not instant; they follow the next crawls of the home page.

## Common mistakes

- **Logo too small or invisible on white.** Symptom: no logo next to your results, or a blank square. Use a file of at least 112 × 112 px with a solid background.
- **`sameAs` pointing at networks, not profiles.** `https://facebook.com` says nothing about you. Use the full profile URL, and only profiles you control.
- **Different names across pages or blocks.** "Example Shop" in the plugin, "Example Shop Ltd." in the theme, "EXAMPLE" in the page title. Pick one `name`, use `legalName` and `alternateName` for the rest.
- **Two Organization blocks.** Theme plus SEO plugin, or a plugin plus a hand-written block. Keep one generator.
- **A SearchAction with a made-up URL.** A template value copied from an example, on a site without search, or a URL that returns a 404. Remove it; it earns nothing anyway.
