Schema Markup Generator

Free tool · No signup

Person Schema Generator

Person markup describes an individual: their name, photo, job, employer and the profiles that belong to them. Use it on a personal site, a portfolio or an author page. This site uses the same shape for its own author.

Required by Google

Topics, separated by commas.

Social and profile links

Profiles that are clearly the same entity: LinkedIn, X, Facebook, Instagram, GitHub, Wikipedia.

JSON-LD

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfilePage",
  "mainEntity": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://www.example.com/about",
    "image": "https://www.example.com/jane.jpg",
    "jobTitle": "Product Designer",
    "worksFor": {
      "@type": "Organization",
      "name": "Example Studio"
    },
    "description": "Jane designs mobile apps for health and fitness startups.",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Springfield",
      "addressCountry": "US"
    },
    "knowsAbout": [
      "UX design",
      "Figma",
      "Accessibility"
    ],
    "sameAs": [
      "https://www.linkedin.com/in/janedoe-example",
      "https://github.com/janedoe-example"
    ]
  }
}
</script>

Valid Person markup

In the Rich Results Test, choose Code and paste. Your data stays in this browser: nothing is sent to a server.

Search preview · approximate

example.com › about

Jane Doe

Product Designer · Example Studio · Jane designs mobile apps for health and fitness startups.

Wrapped in ProfilePage, Google can use it for profile pages and to connect an author's articles and social profiles. Plain Person markup has no rich result of its own. Google's gallery

What Google can show

Wrapped in ProfilePage, Google can use it for profile pages and to connect an author's articles and social profiles. Plain Person markup has no rich result of its own.

Required and recommended properties

Google needs these for Person markup to be valid:

RequiredNotes
Full name
RecommendedNotes
Website or profile page URL
Photo URL
Social and profile linksProfiles that are clearly the same entity: LinkedIn, X, Facebook, Instagram, GitHub, Wikipedia.

A complete example

The example values in the generator above produce this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfilePage",
  "mainEntity": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://www.example.com/about",
    "image": "https://www.example.com/jane.jpg",
    "jobTitle": "Product Designer",
    "worksFor": {
      "@type": "Organization",
      "name": "Example Studio"
    },
    "description": "Jane designs mobile apps for health and fitness startups.",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Springfield",
      "addressCountry": "US"
    },
    "knowsAbout": [
      "UX design",
      "Figma",
      "Accessibility"
    ],
    "sameAs": [
      "https://www.linkedin.com/in/janedoe-example",
      "https://github.com/janedoe-example"
    ]
  }
}
</script>

Where to paste the code

  • WordPress: check what your SEO plugin (Yoast, Rank Math) already outputs, then add the block with a header-code plugin such as WPCode, or in your child theme's header.php before </head>. For one page only, use a Custom HTML block in that page.
  • Shopify: for site-wide markup such as Organization, go to Online Store › Themes › Edit code and paste it in theme.liquid before </head>. For products, edit the product section (often main-product.liquid) and use Liquid variables such as {{ product.title | json }} so every product gets its own values. Most themes already output basic Product markup.
  • Next.js: render it in the page component as <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, "\\u003c") }} />. Escaping < stops a value from closing the script tag early; this site does the same.
  • Webflow: Page settings › Custom code › Inside <head> tag. For CMS collection pages, add it to the template's page settings and insert fields from the collection.

Test before you publish

Paste the code into Google's Rich Results Test, then test the live page once it's published. Make sure every value matches what people see on the page.

By Muhammad Saif · Updated

Questions

What is ProfilePage markup?

ProfilePage wraps a Person (or Organization) on a page that's mainly about them, such as an about page, a creator profile or an author bio. Google uses it to understand who a page represents.

Which links belong in sameAs?

Profiles that are clearly the same person: LinkedIn, GitHub, X, a Wikipedia page. Leave out pages that only mention them.

Does schema markup improve rankings?

Not directly. Google has said structured data isn't a general ranking factor. It makes pages eligible for rich results, such as review stars, prices and breadcrumbs, which can make a result stand out and earn more clicks.

JSON-LD or Microdata?

JSON-LD. Google recommends it because it sits in one script block, separate from your HTML, so it's easier to add and maintain. Microdata and RDFa still work but are woven into the markup.