/ โ† AI Schema Generator Fixes / Reference Loss
In this guide
  1. Three ways a reference gets lost
  2. Why generated markup loses the links
  3. The pattern to aim for
  4. The fix, step by step
  5. Reference properties by content type
  6. Where the identifiers come from on common platforms
  7. Questions and answers

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

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:

๐Ÿ’ก Referencing an identifier that is only defined on another page is allowed in JSON-LD, but some testing tools will only show the bare identifier. Including the organisation's short definition in each page graph, as most SEO plugins do, avoids confusion in reports.

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

TypePropertyShould point toCommon generated mistake
Article, BlogPostingauthor, publisherPerson or Organization; your Organization"Admin", "Team" or the site name as a string
ProductbrandBrand or OrganizationBrand name as text, or your shop name when you resell another maker's goods
Eventorganizer, performerYour Organization; the real performerVenue listed as organiser
CourseproviderYour OrganizationA separate unnamed Organization per course
JobPostinghiringOrganizationThe employerA recruitment agency named where the employer should be, or the reverse
ReviewauthorThe person who wrote the reviewThe business itself as the reviewer
WebPageisPartOfYour WebSiteMissing, 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.

โš ๏ธ Do not point 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.
Questions and answers

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.

Generate markup that fits your existing entities

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 โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All AI Schema Generator Fixes  ·  Duplicate Schema Generation  ·  AI Schema for Editorial Content  ·  Hallucinated Properties in Generated Schema  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.