Skip to content
Letzscale

Can ChatGPT read your website?

Tell machines who you are: structured data

Add a short block of hidden labels to your website. It states your name, address, hours and services in a format software reads without guessing. You copy our template, fill in your facts, paste it into your site and test it. It takes about 3 hours, most of it checking your facts.

· By the Letzscale team · 10 min read

On this page
  1. Why it matters
  2. The words you need
  3. Have these ready
  4. Add structured data to your site
  5. Confirm what Google and schema.org read
  6. What usually goes wrong
Time
3 hours
Difficulty
Medium
Who
Whoever edits your website, or your developer
You need
Your fact sheet (Guide 04) and access to your website editor
Checked
13 October 2026

Part of the Letzscale guides: free, step-by-step fixes that help ChatGPT and other AI assistants find, understand and recommend your business. New here? Start with Guide 01: Check what ChatGPT says about your business.

Why it matters

A person reading your homepage understands that "Mon to Fri 9 to 18" means your opening hours. Software has to guess. Structured data is a block of labels in your page's code that says it plainly: this is the business name, this is the street, these are the hours. Visitors never see it.

Be clear about what it does not do. Google says structured data is not required for its AI features and there is no special markup to add for them. Adding it does not move you up in results. Whether ChatGPT and other assistants use it is not something they have confirmed.

Its value is that it removes doubt about your facts for every system that reads the page. That only works if the labels match what the page shows: Google's guidelines require markup to describe content visible to visitors. So this guide starts from your fact sheet and keeps the two in step.

What a person reads
Brasserie Example
12 rue Exemple, Kirchberg
Mon to Fri 11:30 to 22:00
+352 12 34 56
What a machine reads
"@type": "Restaurant",
"name": "Brasserie Example",
"streetAddress": "12 rue Exemple",
"opens": "11:30", "closes": "22:00",
"telephone": "+352 12 34 56"
The same facts, once for people and once as labels for software. Fictional business.

T3Got your Starter audit? This guide fixes T3, "Structured data", on page 07 (Technical and agent readiness).

Reference

The words you need

Structured data

Information about a page written as labelled facts, such as "telephone: +352 12 34 56", instead of a sentence.

schema.org

A free, shared dictionary of these labels, used in Google's documentation. It defines which labels exist and what each one means. You use its words; you do not need an account.

Type

The kind of thing you describe. Organization is a company, LocalBusiness is a business customers visit, Service is something you sell. Each type has its own labels, called properties, such as name or address.

JSON-LD

The format the labels are written in: lines of "label": "value" between curly brackets, inside a small <script> block. Google recommends this format. You paste the block once; it does not change how your page looks.

Before you start

Have these ready

  • Do Guide 03: Get found by Google and Bing and Guide 04: Correct the wrong facts ChatGPT tells about you first. Your fact sheet from Guide 04 is the only place you copy facts from.
  • A login to your website editor (WordPress, Webflow, Wix) or, for a custom-built site, your developer's contact.
  • The web address of your logo image. Right-click the logo on your site and choose to copy the image address.
  • The links to your Google Maps listing and your social media or LinkedIn page.
  • A plain text editor such as Notepad (Windows) or TextEdit in plain text mode (Mac). Never fill in the template in Word.

Steps

Add structured data to your site

  1. Pick the right type

    Choose the type that describes your business most precisely. On schema.org, a LocalBusiness is a kind of Organization, so it carries all the company labels plus address, hours and price level.

    Your situationType to use
    Restaurant, café or barRestaurant, CafeOrCoffeeShop or BarOrPub
    Hotel or guesthouseHotel or BedAndBreakfast
    Shop, garage, hairdresserStore, AutoRepair, HairSalon
    Accountant, law firm, clinicAccountingService, LegalService, Dentist or MedicalClinic
    Customers come to your address, and none of these fitsLocalBusiness
    You work online or visit clients, with no address customers come toOrganization

    Google asks local businesses to use the most specific type that fits. To find yours, open schema.org/LocalBusiness and look at the list "More specific Types". Copy the name exactly, with the same capital letters.

    If you chose Organization, delete the geo, openingHoursSpecification and priceRange parts from the template in step 2. Those belong to places customers visit.

  2. Fill in the templates

    Paste each template into your plain text editor and replace every example value with the matching line from your fact sheet. Keep the quotation marks, commas and brackets exactly where they are: one missing comma breaks the whole block.

    Template A: your business, for the homepage. Replace LocalBusiness on line 4 with the type you chose in step 1.

    homepage-business.html
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "LocalBusiness",
      "@id": "https://www.yourcompany.lu/#business",
      "name": "Your Company S.à r.l.",
      "url": "https://www.yourcompany.lu/",
      "logo": "https://www.yourcompany.lu/images/logo.png",
      "image": "https://www.yourcompany.lu/images/front.jpg",
      "telephone": "+352 12 34 56",
      "email": "contact@yourcompany.lu",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "12 rue Exemple",
        "postalCode": "L-1234",
        "addressLocality": "Luxembourg",
        "addressCountry": "LU"
      },
      "geo": {
        "@type": "GeoCoordinates",
        "latitude": 49.61162,
        "longitude": 6.13193
      },
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
          "opens": "09:00",
          "closes": "18:00"
        }
      ],
      "priceRange": "€€",
      "sameAs": [
        "https://www.google.com/maps/place/your-listing",
        "https://www.linkedin.com/company/your-company"
      ],
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer service",
        "telephone": "+352 12 34 56",
        "email": "contact@yourcompany.lu",
        "availableLanguage": ["fr", "de", "en"]
      }
    }
    </script>
    • @id is a name tag for your business: your homepage address plus #business. Template B uses it to point back here.
    • logo must be an image Google can fetch, at least 112 by 112 pixels.
    • telephone includes +352, the country code. addressCountry stays LU.
    • geo is optional; delete it with the comma after its closing bracket if you prefer. Google asks for at least 5 decimal places.
    • openingHoursSpecification: add one block per set of hours. If you also open Saturday 9:00 to 12:00, copy the block in curly brackets, put a comma between the two, and change the days and times.
    • sameAs lists your profiles on other sites, so software knows they are the same business. Only list profiles you control.
    • availableLanguage uses language codes: fr, de, en. Add "lb" if you serve customers in Luxembourgish.
    • A restaurant can add "servesCuisine": "French" and "menu": "https://www.yourcompany.lu/menu" after priceRange.

    Template B: one service, for that service's page. Make one copy per service page, starting with the service customers ask about most.

    service-page.html
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Service",
      "name": "Catering for company events",
      "serviceType": "Catering",
      "description": "We cater lunches and receptions for 20 to 200 guests at your offices in Luxembourg City and Kirchberg.",
      "url": "https://www.yourcompany.lu/catering",
      "provider": {
        "@type": "LocalBusiness",
        "@id": "https://www.yourcompany.lu/#business",
        "name": "Your Company S.à r.l.",
        "url": "https://www.yourcompany.lu/"
      },
      "areaServed": "Luxembourg",
      "offers": {
        "@type": "Offer",
        "price": "35.00",
        "priceCurrency": "EUR"
      }
    }
    </script>
    • description: copy one or two sentences that already appear on the service page.
    • provider repeats the @id, name and type from Template A, so both blocks describe the same business. Change LocalBusiness here to the same type you chose in step 1.
    • offers: keep it only if the page shows this price. Write the number with a full stop and no € sign, and put the currency in priceCurrency. If the page shows no price, delete the five offers lines and the comma at the end of the areaServed line.
  3. Add it to the page

    Template A goes on your homepage; Google says the Organization block does not need to be on every page. Each Template B goes on its own service page. Pick your platform:

    WordPress

    With Yoast SEO, fill in Yoast SEO → Settings → Site representation first. Yoast then writes basic structured data for you. For the full blocks, a header code plugin such as WPCode has a "Scripts in Header" field. Yoast help

    Webflow

    Page settings → Custom code → Inside <head> tag. Paste, save, then publish the site: it does not go live until you publish. Needs a paid Site or Workspace plan. Webflow help

    Wix

    Pages & Menu → More Actions next to the page → SEO basics → Advanced SEO → Structured Data Markup → Add New Markup. Paste, then Apply. Wix help

    Check what your platform already adds

    Wix creates local business markup for your homepage once you enter a business name and location, and Yoast adds its own. Two blocks that disagree, say on your phone number, cause the doubt this guide removes. Run step 4 on your homepage first to see what is already there, then make every value match your fact sheet.

    Custom-built site: send your developer the filled-in templates and this guide. Google reads the block in the page's <head> or <body>, and also when it is added by JavaScript.

  4. Test it and fix the errors

    Use two free tools. They check different things, so run both:

    • Google Rich Results Test checks the markup against Google's search features. Enter your homepage address and click to test.
    • Schema Markup Validator, run by schema.org, checks any schema.org type, including Service. Use it for your service pages.

    Both tools also accept pasted code. Test your filled-in template before you paste it into your site, so you fix mistakes in one place.

    What the two results look like for your homepage, before and after you add the block. Illustration with a fictional business.

    The Rich Results Test reports valid items, items with warnings, invalid items, or "No items detected". Click an item to see its errors. Fix every error. A warning still leaves the item valid, so read it and add the missing fact only if it is on your page.

  5. Keep it in step when facts change

    The block does not update itself. When you move, change your phone number or your hours, change it in four places on the same day: the visible page, the structured data, your Google Business Profile and your fact sheet.

    Add a line to your fact sheet that says where the structured data lives, for example "Homepage, Webflow page settings". Then the next person who updates your hours knows to change it too. For a temporary change, such as closing between Christmas and New Year, Google's local business guide describes validFrom and validThrough dates for opening hours.

Check it worked

Confirm what Google and schema.org read

Open your homepage and one service page in the Rich Results Test and the Schema Markup Validator again, now as live addresses. Then compare each value the tools show with your fact sheet, line by line.

Done when

  • The Rich Results Test finds your business on the homepage with no errors.
  • The Schema Markup Validator finds a Service on at least one service page with no errors.
  • Every value in the markup is visible on the same page and matches your fact sheet.
  • Your site has no second, conflicting description of your business from a plugin or builder.
  • Your fact sheet says where the structured data lives and who updates it.

Common mistakes

What usually goes wrong

  • Facts in the markup that are not on the page. Opening hours or prices that only exist in the hidden block break Google's guidelines. Show them on the page first.
  • Old hours after a change. The page says you close at 17:00, the markup still says 18:00. Machines now see two answers.
  • Editing in Word. Word turns straight quotation marks into curly ones, and the block stops working. Use a plain text editor.
  • Prices written for people. "€ 1.250,00" is wrong in the markup. Write "1250.00" and put EUR in priceCurrency.
  • Expecting a ranking boost. Structured data makes your facts unambiguous. It does not guarantee a place in Google results or AI answers.

Sources, checked 13 October 2026

  1. Google: Optimizing for generative AI features on Google Search (structured data not required)
  2. Google: AI features and your website
  3. Google: Introduction to structured data · General structured data guidelines
  4. Google: Organization structured data · Local business structured data
  5. Google: Rich Results Test help · Schema Markup Validator
  6. schema.org: LocalBusiness · Restaurant · Hotel · Service · Offer
  7. Yoast: Site representation · WPCode · Webflow: Custom code · Wix: Structured data
Structured data for your business, copy-paste ready | Free GEO guide | Letzscale