social

sameAs social profiles

MetricSpot checks your Organization JSON-LD for a sameAs array of social URLs. This is what feeds Google's Knowledge Graph and AI-agent entity resolution.

What this check does

Looks for an Organization (or Person, LocalBusiness, Corporation) JSON-LD block on the page and verifies it contains a sameAs property whose value is a non-empty array of URLs. The check is purely structural — it does not fetch any of the URLs. URL liveness is handled by the companion rule sameAs profile match.

A passing result requires:

  • One or more application/ld+json blocks that parse as valid JSON.
  • An object with @type of Organization (or a subtype).
  • A sameAs field whose value is an array of at least one string URL.

Why it matters

sameAs is the structured-data way of saying “the entity described here is the same real-world entity as the one at this other URL.” Schema.org defines it precisely for this purpose, and three major consumers depend on it:

  • Google’s Knowledge Graph. Entity-linking, brand Knowledge Panels, the favicon and “About this result” attribution all use sameAs as one of the primary signals for resolving “what brand is this site.” Without it, Google has to fall back on weaker cues (brand-name occurrence, backlinks from known entity pages) and frequently fails to merge the entity at all.
  • Wikidata. When editors create or expand an entity entry, they use sameAs from your site as supporting evidence for cross-references. A clean sameAs array is the most boring, effective way to feed Wikidata — which in turn feeds dozens of downstream knowledge bases.
  • Answer engines. Perplexity, ChatGPT search, Google AI Overviews, and Bing Copilot all run entity-resolution passes when deciding whether to cite a source. Sites with a clean Organization + sameAs resolve cleanly and get cited as named brands (“according to Acme Corp”). Sites without resolve to “according to acme.example” or worse, no attribution at all.

The on-page version of the same claim — visible social icons in the footer — is checked separately by link to social profiles. Ship both; they cover different consumers.

How to fix it

1. Full Organization + sameAs block. Drop this in your home-page <head>, ideally via the shared layout so every page carries it:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme Corp",
  "alternateName": "Acme",
  "url": "https://acme.example",
  "logo": "https://acme.example/logo.png",
  "description": "Acme builds developer tools for distributed systems.",
  "foundingDate": "2019-04-01",
  "sameAs": [
    "https://www.linkedin.com/company/acme-corp",
    "https://x.com/acmecorp",
    "https://www.youtube.com/@acmecorp",
    "https://github.com/acme",
    "https://www.crunchbase.com/organization/acme",
    "https://en.wikipedia.org/wiki/Acme_Corp",
    "https://www.wikidata.org/wiki/Q123456789"
  ]
}
</script>

Which URLs to include — by company stage.

  • Every brand: LinkedIn, X / Twitter, YouTube.
  • Startups: add Crunchbase, GitHub (if you ship code), the founder’s LinkedIn under a separate Person schema rather than the Organization’s sameAs.
  • Established companies: add Glassdoor, Bloomberg / Reuters profile pages if they exist, Wikipedia if you qualify.
  • Notable enough for Wikipedia: also include the Wikidata Q-ID URL. This is the strongest single signal — Wikidata is the source of truth Google leans on hardest.

Skip platforms where you have no presence or a dead profile. An empty Facebook page hurts more than the link helps. See sameAs profile match for the audit recipe.

2. Next.js (App Router) — inject from app/layout.tsx:

import Script from "next/script";

const organizationLd = {
  "@context": "https://schema.org",
  "@type": "Organization",
  name: "Acme Corp",
  url: "https://acme.example",
  logo: "https://acme.example/logo.png",
  sameAs: [
    "https://www.linkedin.com/company/acme-corp",
    "https://x.com/acmecorp",
    "https://github.com/acme",
    "https://www.youtube.com/@acmecorp",
  ],
};

export default function RootLayout({ children }) {
  return (
    <html>
      <head>
        <Script
          id="ld-org"
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationLd) }}
        />
      </head>
      <body>{children}</body>
    </html>
  );
}

3. Astro — emit from BaseLayout.astro:

---
const organizationLd = {
  "@context": "https://schema.org",
  "@type": "Organization",
  name: "Acme Corp",
  url: "https://acme.example",
  logo: "https://acme.example/logo.png",
  sameAs: [
    "https://www.linkedin.com/company/acme-corp",
    "https://x.com/acmecorp",
    "https://github.com/acme",
  ],
};
---
<head>
  <script type="application/ld+json" set:html={JSON.stringify(organizationLd)} />
</head>

4. WordPress.

  • Yoast SEO: Settings → Site representation → set to “Organization”, fill the social profile fields under General → Site info → Other profiles. Yoast emits the full Organization JSON-LD with a populated sameAs automatically.
  • Rank Math: Titles & Meta → Local SEO → fill the social profile URLs. Same automatic emission.

Both plugins also handle the company name, logo, and contact point. Do not write a competing block by hand — duplicate Organization schemas confuse Google.

5. Validate. Run two passes after shipping:

  • Schema Markup Validator for syntax (catches malformed JSON, wrong types).
  • Google Rich Results Test to confirm Google can fetch and parse it. The Logos report in Search Console (under Enhancements) eventually shows whether Google has picked the entity up — typically 1–4 weeks after deployment.

See also: organization sameAs for deeper coverage of the Organization schema, sameAs profile match for verifying the URLs work, JSON-LD structured data for the general structured-data primer.

Frequently asked questions

Should sameAs live on the Organization or on the WebSite schema?

Organization (or Person, for personal brands). The WebSite schema is for the site itself — its sameAs would refer to other websites that are the same website, which is rarely meaningful. Brand identity lives on Organization. Link the two via WebSite.publisher → Organization.

Can I include sameAs on every page or only the home page?

Either works. Putting it on every page via a shared layout is the safest option — Google may crawl an internal page first, and finding the Organization block there speeds up entity resolution. The downside is a few hundred bytes of repeated JSON-LD per page, which is negligible.

Does the order of items in the sameAs array affect anything?

No. sameAs is treated as an unordered set by every consumer. Optimise for readability when editing, not for SEO — there’s nothing to optimise.

Sources

Last updated 2026-05-11