Fixing Organization and Person Reference Loss in Generated Schema
A page generated in isolation does not know that your business and your writers already exist elsewhere in your markup. So the generator describes them from scratch: the author becomes a bare name, the publisher becomes a line of text, and every page gets its own slightly different copy of your organisation.
Search engines then see many unconnected people and companies rather than one author with a body of work and one business behind the site. This guide shows how to recognise the problem and link generated markup back to a single Person and Organization for each real one.
Three ways a reference gets lost
A reference property is one whose value should be another thing rather than a piece of text: the author
of an article, the publisher of a page, the brand of a product, the organizer
of an event. Generated markup tends to flatten these in one of three ways, from worst to least bad.
1. A plain string
"author": "Imogen Farrow-Pike",
"publisher": "Larkspur Garden Design"
Schema.org tolerates text in many places, but a string is just a name. It carries no type, so a reader cannot tell a person from a company, and it cannot be connected to anything else. Google's Article guidance asks for the author as a Person or Organization object.
2. An inline copy
"author": { "@type": "Person", "name": "Imogen Farrow-Pike" },
"publisher": { "@type": "Organization", "name": "Larkspur Garden Design Ltd" }
Better: the types are clear. But each page now has its own anonymous Person and Organization. Across a site of two hundred posts that is two hundred separate descriptions of the same author, often with small differences in spelling, job title or company suffix, and nothing to say they are one person.
3. A reference to the wrong thing
The generator sometimes invents an identifier that looks right but matches nothing, such as https://example.co.uk/#author
when your plugin uses a different form, or links the publisher to a page URL instead of the organisation
entity. The markup validates, but the link points at nothing.
What linked markup looks like
"author": { "@id": "https://example.co.uk/team/imogen-farrow-pike/#person" },
"publisher": { "@id": "https://example.co.uk/#organization" }
Each points to one full definition of the person and the organisation, written once and reused on every page.
Why generated markup loses the links
- It sees one page. The model reads the byline "By Imogen" and has no access to your author page, your plugin's identifiers or the rest of your site.
- Identifiers are site-specific. An
@idis just an address you choose. There is no way to guess the one your SEO plugin picked, so the model either leaves it out or makes one up. - Bylines are often thin. Many templates show a first name, "Admin" or "Team" in the byline. The model faithfully copies that, which is how "Admin" ends up as an author in search engines' view of your site.
- Completeness bias. Asked for a full block, the model writes a full publisher object with a name, logo and sometimes a phone number, rather than a short pointer. That is also how invented details creep in; the guide on hallucinated properties covers checking those.
The pattern to aim for
Define each real person and organisation once, with a stable @id, full details and links
to their own page. Everywhere else, point to that identifier. The Organization and WebSite usually live
on every page from your SEO plugin or template; each author Person is defined on their author page and
referenced from their articles, or included in the page graph with the same identifier every time.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.co.uk/#organization",
"name": "Larkspur Garden Design",
"url": "https://example.co.uk/",
"logo": { "@type": "ImageObject", "url": "https://example.co.uk/images/larkspur-logo-600.png" }
},
{
"@type": "Person",
"@id": "https://example.co.uk/team/imogen-farrow-pike/#person",
"name": "Imogen Farrow-Pike",
"jobTitle": "Garden designer",
"url": "https://example.co.uk/team/imogen-farrow-pike/",
"worksFor": { "@id": "https://example.co.uk/#organization" }
},
{
"@type": "BlogPosting",
"@id": "https://example.co.uk/blog/planting-a-dry-garden/#article",
"headline": "Planting a dry garden that still looks green in August",
"datePublished": "2026-07-09T08:30:00+01:00",
"author": { "@id": "https://example.co.uk/team/imogen-farrow-pike/#person" },
"publisher": { "@id": "https://example.co.uk/#organization" },
"mainEntityOfPage": "https://example.co.uk/blog/planting-a-dry-garden/"
}
]
}
</script>
A few conventions make this robust:
- Base identifiers on real URLs. Use the page that best represents the entity plus a fragment: the home page for the organisation, the author's profile page for a person. It keeps identifiers unique and makes them easy to recognise.
- Never change them. An
@idis a name, not a link that has to load. Changing it later breaks every reference to it, so pick a form and keep it, even if the author page moves. - Keep the full definition in one place. If you repeat the Person on each article for convenience, use exactly the same identifier and the same details every time.
The fix, step by step
Step 1
Find the reference properties in the block
Go through the generated JSON-LD and mark every property that should point to a person
or organisation: author, creator, editor, publisher,
provider, organizer, performer, brand, manufacturer,
hiringOrganization, worksFor and isPartOf. Note whether each value
is a string, an inline object with no identifier, or an identifier. Strings and anonymous objects are
the ones to fix; existing identifiers still need checking against your site.
Step 2
Look up the identifiers your site already publishes
View the source of your home page and an author page, find the structured data
from your SEO plugin or theme, and copy the @id values for the Organization, the WebSite
and each author Person. Plugins generate these automatically, and their format differs between plugins.
Record them in a short list, because the whole fix depends on referring to exactly these strings, character
for character, including the trailing slash.
Step 3
Create the missing site-wide entities once
If your site has no Organization or no Person for an author, define them in one place rather than in each generated block. Add the Organization to the site template with its name, url and logo, and a Person for each regular writer on their author page with name, url and job title. Choose identifiers based on those pages, write them down and treat them as permanent from this point on.
Step 4
Replace inline copies with @id references
In the generated block, delete the string or anonymous object for each reference property
and replace it with an object holding only the matching identifier, such as { "@id": "https://example.co.uk/#organization" }.
Remove any logo, phone number or address the generator attached to its copy of your organisation. Check
the byline on the page to make sure the author you link to is the person actually credited there.
Step 5
Give each author a url and genuine profiles
Make sure each Person definition includes a url pointing to an author page
on your site that describes who they are and lists their work. Add sameAs links only to
profiles that genuinely belong to that person, such as their professional networking profile or a staff
page elsewhere, and check that each one loads. A generated sameAs is a guess until you have
opened it yourself.
Step 6
Validate that every reference resolves
Paste the page's full markup into the Schema Markup Validator and confirm that each referenced identifier appears in the graph with the expected type, or is defined on the page it names. Then test the live URL in the Rich Results Test and check the author and publisher shown for the article. Finally, compare the author name across three or four pages to confirm they all resolve to one Person.
Reference properties by content type
| Type | Property | Should point to | Common generated mistake |
|---|---|---|---|
| Article, BlogPosting | author, publisher | Person or Organization; your Organization | "Admin", "Team" or the site name as a string |
| Product | brand | Brand or Organization | Brand name as text, or your shop name when you resell another maker's goods |
| Event | organizer, performer | Your Organization; the real performer | Venue listed as organiser |
| Course | provider | Your Organization | A separate unnamed Organization per course |
| JobPosting | hiringOrganization | The employer | A recruitment agency named where the employer should be, or the reverse |
| Review | author | The person who wrote the review | The business itself as the reviewer |
| WebPage | isPartOf | Your WebSite | Missing, so pages float free of the site |
Several authors
Give each author their own reference in an array: "author": [ { "@id": "โฆ#person-a" }, { "@id": "โฆ#person-b" } ].
Generators sometimes merge "Imogen Farrow-Pike and Tom Rees" into one name, which Google's author guidance
specifically advises against.
Content written by the business
Where a page genuinely has no individual author, such as a policy page or a company announcement, the author can be your Organization, referenced by its identifier. That is better than an invented person, and much better than "Admin".
Where the identifiers come from on common platforms
WordPress
SEO plugins such as Yoast SEO and Rank Math output an Organization or Person for the site and a Person for each post author, each with its own identifier, based on the site and user settings. Fill in the organisation name and logo in the plugin's site representation settings and complete each user's profile, including the biography, before copying identifiers. If a generated author does not match a WordPress user, the right fix is often to create the user and set them as the post author, so the plugin handles the markup.
Shopify
Themes typically output an Organization on the home page and a Product on product pages, and blog
article markup varies a great deal between themes. Check the theme's markup for identifiers before adding
your own. For products, point brand at the maker, not your shop, unless you make the goods
yourself.
Custom and static sites
Keep a single data file for the organisation and each author, with their identifiers, and build every page's graph from it. That is the only reliable way to stop names and details drifting apart over time.
sameAs at a profile you are not certain belongs to
that person or business. Linking your author to a stranger with the same name is worse than giving no
profile at all.1. What is wrong with writing the author as plain text?
A plain text author is just a name with no type and no connections. Search engines cannot tell whether it is a person or a company, and cannot link it to the same author's other articles or their profile page. Google's Article guidance asks for the author as a Person or Organization object, ideally with a url pointing to a page about them. Replacing the string with a reference to a defined Person fixes all of that at once.
2. What is an @id and does it have to be a working web address?
An @id is an identifier that lets different parts of your markup, or different pages, say they mean the same thing. It is written as a URL, and basing it on a real page such as the author's profile plus a fragment like #person makes it unique and readable. It does not have to load in a browser, but it must be identical everywhere it is used and should never change once you have published it.
3. Should the publisher be my company or my website?
The publisher of an article is normally the organisation responsible for it, so reference your Organization entity. The website itself is a WebSite entity, which pages link to through isPartOf. For a one-person site with no company, the publisher can be a Person instead. Whatever you choose, use the same identifier on every page, so every article resolves to one publisher with the same name and logo rather than many near-identical copies.
4. Why does my generated markup say the author is Admin?
The generator copied what your template shows. Many WordPress themes display the author's username or display name, and if that is admin or a generic team account, the model has nothing better to use. Fix it at the source: give each writer their own user account with their real name and a biography, set them as the post author, and then reference that Person in the markup. For company-written pages, reference your Organization instead.
5. Do I need an author page for every writer?
It is strongly recommended. Google's author guidance suggests linking each author to a page that identifies them, and a dedicated page gives readers and search engines a place to see who the person is, what they do and what else they have written. It also gives you an obvious basis for the Person identifier. Guest writers who contribute once can instead link to a profile page on their own site.
6. Can I reference an Organization that is defined on another page?
JSON-LD allows it, because an identifier means the same thing wherever it appears. In practice, some testing tools only show the bare identifier when the full definition is not on the page being tested, which can look like an error in reports. Most SEO plugins include a short definition of the organisation in every page's graph, and following that approach keeps both search engines and testing tools clear about who the publisher is.
7. The generator added sameAs links for my business. Are they safe to keep?
Only after you have checked each one. The model may build plausible social profile addresses from your business name, recall profiles that have since closed, or pick up a similarly named business. Open every link and confirm it is an account you control or an official listing about you. Remove any that fail. On a site with a single Organization entity, keep the verified sameAs list there and do not repeat it in generated blocks.
The AI Schema Generator reads your page content with an AI model, writes JSON-LD tailored to the content type and validates it against schema.org and Google rich result criteria, ready for you to link to your own author and organisation entities.
Open AI Schema Generator Fixes โ