/ โ† AI Visibility Fixes / Schema for AI
In this guide
  1. What schema can and cannot do for AI answers
  2. Start from a fact sheet, not a list of schema types
  3. The fix, step by step
  4. A worked example
  5. Platform notes
  6. When markup and pages disagree
  7. What not to mark up
  8. Questions and answers

What schema can and cannot do for AI answers

Structured data is a block of JSON-LD, or less often microdata, that describes a page in the schema.org vocabulary: this page is about a business called this, at this address, offering these services. Search engines have used it for years to understand pages and to produce rich results. For AI assistants the picture is less clear, and it is worth being honest about that before you spend time on it.

The sensible conclusion is to treat schema as supporting evidence rather than the main message. Every fact you want assistants to repeat should be written clearly in the visible text of the page. Schema then restates the same facts in a form machines cannot misread: a postcode is a postcode, an opening time is an opening time, and a price has a currency. Where the two agree, you have removed a source of ambiguity. Where they disagree, you have created one.

โš ๏ธ Be sceptical of claims that adding a particular schema type multiplies AI citations. None of the assistant providers has published figures like that, and a page with perfect markup but a vague answer will still be passed over.

Start from a fact sheet, not a list of schema types

The usual approach to schema is to pick types from a list and fill them in. For AI visibility it works better the other way round: decide which facts about your business customers ask about, then find where each should live. A simple fact sheet does this.

Fact customers ask aboutWhere it should be writtenSchema property that backs it up
Official business name and any other name you trade asHome and about pages, footername, alternateName, legalName
What you do, in one sentenceFirst lines of the home and about pagesdescription, and the most specific @type available
Where you are and which areas you serveContact page, service pagesaddress, areaServed, geo
Opening hoursContact pageopeningHoursSpecification
Services or products you offerOne page per main service or productService with provider, or Product with offers
Prices or starting pricesService or product pageoffers with price or priceSpecification and priceCurrency
When the business started and who runs itAbout pagefoundingDate, founder
Official profiles elsewhereFooter or about page linkssameAs

Fill the middle column before you touch any code. If a fact has nowhere visible to live, create that place first. Marking up a service that is not described anywhere on the page breaks search engine guidelines and gives an assistant nothing to quote.

The fix, step by step

Step 1

Collect the facts assistants state about you

Run a set of branded prompts in the AI Visibility Tracker, such as what the business does, where it is based, what it costs and who it suits, and read every answer where you are mentioned or recommended. Copy each factual claim about your business into a spreadsheet, one row per claim, with the assistant that made it. Include facts from the comparison prompts too, because those often reveal missing details about your services or prices.

Step 2

Mark each fact as right, wrong or missing

Next to each claim, record whether it is right, wrong or out of date. Then add rows for important facts that no assistant mentioned at all, and mark those missing. For every wrong fact, search for where it might come from: an old page on your own site, an outdated directory listing, or a third-party article. Schema cannot correct someone else's page, so note those sources for separate follow-up.

Step 3

Put every key fact in visible text first

For each wrong or missing fact, make sure one obvious page on your site states it plainly in ordinary text near the top, not only in an image, a PDF or a script-loaded widget. Write the business name, what you do and where in the opening sentence of the about page. Put prices, hours and service areas on the pages customers would expect them. Remove or update old pages that still state the wrong version.

Step 4

Choose the schema type that matches each page

Use one site-wide Organization node, or the most specific LocalBusiness subtype that is true, such as Plumber or AccountingService, for a business customers visit or that serves an area. Use Service on each service page, Product on pages where something can be bought, and Article on editorial pages. Check that your theme or plugin is not already outputting a second, conflicting version of the same node.

Step 5

Add the properties that carry those facts

Map each row of your fact sheet to its property: address and areaServed for location, openingHoursSpecification for hours, offers with priceCurrency for prices, foundingDate and founder for history. Copy values from the visible text so the two match exactly, down to the spelling of the business name and the format of the phone number. Leave out properties you cannot fill with a true, current value.

Step 6

Connect the markup to your profiles with sameAs

Add a sameAs array to the Organization or LocalBusiness node listing the full URLs of profiles that are definitely yours: your LinkedIn company page, main social accounts, Companies House entry, trade association listing and any Wikidata item. This tells machines that those pages describe the same business. Only include profiles you control or that are unambiguously about you, and check that each one states the same name and details.

Step 7

Validate, publish and re-run branded prompts

Paste each changed page into the Schema Markup Validator and Google's Rich Results Test and fix every error. View the page source to confirm the JSON-LD is in the HTML the server sends, not added later by a script. Request indexing of the main pages in Search Console and Bing Webmaster Tools, then re-run the same branded prompts in the tracker over the following weeks and update the fact sheet with what changed.

A worked example

Here is markup for a fictional bookkeeping firm whose branded answers placed it in the wrong town and never mentioned its fixed-fee payroll service. The about page and the payroll page were first rewritten so both facts were stated in the opening text. The markup then repeats them.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "AccountingService",
      "@id": "https://example.co.uk/#business",
      "name": "Millbeck Bookkeeping",
      "legalName": "Millbeck Bookkeeping Ltd",
      "description": "Bookkeeping, VAT returns and payroll for small businesses in Matlock and the Derbyshire Dales.",
      "url": "https://example.co.uk/",
      "telephone": "+44 1629 555 014",
      "foundingDate": "2016",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "4 Bank Road",
        "addressLocality": "Matlock",
        "postalCode": "DE4 3AQ",
        "addressCountry": "GB"
      },
      "areaServed": [
        { "@type": "AdministrativeArea", "name": "Derbyshire Dales" },
        { "@type": "City", "name": "Matlock" }
      ],
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
          "opens": "09:00",
          "closes": "17:00"
        }
      ],
      "sameAs": [
        "https://www.linkedin.com/company/example-millbeck",
        "https://find-and-update.company-information.service.gov.uk/company/00000000"
      ]
    },
    {
      "@type": "Service",
      "@id": "https://example.co.uk/payroll/#service",
      "name": "Fixed-fee monthly payroll",
      "serviceType": "Payroll",
      "description": "Monthly payroll for up to 20 employees, including payslips, RTI submissions and pension auto-enrolment.",
      "provider": { "@id": "https://example.co.uk/#business" },
      "areaServed": { "@type": "AdministrativeArea", "name": "Derbyshire Dales" },
      "offers": {
        "@type": "Offer",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "45.00",
          "priceCurrency": "GBP",
          "unitText": "per month"
        }
      }
    }
  ]
}
</script>

Three details matter here. The business uses the specific subtype AccountingService rather than a generic Organization. The service node points back to the business with provider and a shared @id, so the two are clearly connected. And every value, including the town, the price and the employee limit, is also written on the visible pages. The Companies House number shown is a placeholder; use your real company page if you include one.

๐Ÿ’ก For the full picture of stable @id values, author entities and connecting articles to their publisher, see the guide on schema for AI answers in the AEO section. This page concentrates on business facts.

Platform notes

WordPress

SEO plugins such as Yoast SEO and Rank Math output an Organization or Person node from their settings, usually under a "site representation" or "knowledge graph" section. Fill in the name, logo and social profiles there first, because a second hand-written Organization block will often conflict with the plugin's. Rank Math can set a local business type; Yoast has a separate local add-on. For Service markup on individual pages, use the plugin's schema options where available or a custom JSON-LD block that references the plugin's organisation @id.

Shopify

Many themes output Organization and Product markup, and review and SEO apps often add more. View the source of a product page and count the blocks before adding anything. Business-level facts usually belong in the theme's layout file, edited with care, or in a single app you trust to own the markup.

Wix and Squarespace

Both generate some structured data automatically from your business information settings, so complete those settings accurately first. Both also let you add custom code or structured data to pages, which is where a Service block can go.

Custom and static sites

Put the site-wide business node in the shared layout template and page-level nodes in each page template, generated from the same data your visible pages use. That way a price or address changed in one place updates both text and markup together.

Single-page applications

If JSON-LD is injected by JavaScript after load, crawlers that do not run scripts will not see it. Render it on the server, or pre-render the pages, so it appears in the HTML the server returns.

When markup and pages disagree

Conflicting information is worse than missing information, because a machine reading two different addresses has no way to know which is current. The most common conflicts found when auditing business markup are:

Search every template for hard-coded values when anything about the business changes. If the same fact appears in three places, generate it from one.

What not to mark up

Questions and answers

1. Does schema markup make ChatGPT or Gemini mention my business?

Not on its own. None of the assistant providers has said that structured data earns a mention or a citation, and Google says its AI features need no special markup. What schema can do is give crawlers and search indexes an unambiguous copy of facts that are already written on your pages, such as your location, services and prices. That reduces the chance of an assistant getting those facts wrong when it does talk about you.

2. Which schema type should a small local business use?

Use the most specific LocalBusiness subtype that is true for you, such as Plumber, Dentist, AccountingService or HomeAndConstructionBusiness, rather than the generic type. Include name, address, telephone, opening hours and areaServed, and add sameAs links to your official profiles. If you work entirely online with no premises customers visit, Organization is usually the better choice, with areaServed describing where your customers are. Whichever you choose, keep every value identical to the details written on your contact and about pages.

3. Can AI assistants read JSON-LD at all?

Some probably can and some may not. JSON-LD sits inside a script tag in the HTML. Crawlers that store the raw HTML have access to it, and search engines such as Google and Bing read it when indexing. Tools that convert a page to plain text before passing it to a model may drop script blocks entirely. That uncertainty is exactly why every important fact should also be written in the visible text of the page.

4. Should I use Organization or LocalBusiness?

Use LocalBusiness, or one of its subtypes, when you have premises customers visit or you serve a defined area in person, such as a trades business covering a group of towns. Use Organization for businesses that operate nationally or online without a customer-facing location. Do not use both for the same business on the same site; pick one node, give it a stable @id, and reference that from every other block, such as Service, Product and WebSite nodes.

5. How do I stop an assistant repeating my old address?

Update the address everywhere you control it in the same week: the contact page, footer, schema markup, Google Business Profile, Bing Places, and the main directories and trade listings where you appear. Redirect or update any old pages that mention the former address. Then find third-party pages that still show it and ask them to correct it. Assistants will only stop repeating it once the sources they draw on have been updated and recrawled.

6. Is it worth adding Wikidata to sameAs?

Only if a Wikidata item for your business already exists and is accurate. Wikidata is a structured database that many systems use to identify organisations, so linking to your item can help machines connect your site to it. Do not create an item just to link to it: Wikidata has notability requirements and items without independent references can be deleted. Company registers and trade association listings are more realistic sameAs targets for most small firms.

7. How can I check which schema my site already outputs?

Paste a page URL into the Schema Markup Validator at validator.schema.org, which lists every structured data block it finds, or into Google's Rich Results Test, which also shows what Google can use. You can also view the page source and search for application/ld+json. Check several page types, such as the home page, a service page and a blog post, because themes and plugins often add different blocks on different templates.

Check what AI answers say about you

The AI Visibility Tracker asks ChatGPT, Claude, Perplexity, Gemini, Copilot and Brave Leo your target prompts, records whether your brand is cited, mentioned, recommended or invisible, and surfaces answers that attribute the wrong claims to you.

Open AI Visibility Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All AI Visibility Fixes  ·  Schema for AI Answers: Entities and @ids  ·  Organization Schema  ·  Complete AI Invisibility  ·  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.