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
- 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.
Brasserie Example 12 rue Exemple, Kirchberg Mon to Fri 11:30 to 22:00 +352 12 34 56
"@type": "Restaurant", "name": "Brasserie Example", "streetAddress": "12 rue Exemple", "opens": "11:30", "closes": "22:00", "telephone": "+352 12 34 56"
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
Pick the right type
Choose the type that describes your business most precisely. On schema.org, a
LocalBusinessis a kind ofOrganization, so it carries all the company labels plus address, hours and price level.Your situation Type to use Restaurant, café or bar Restaurant,CafeOrCoffeeShoporBarOrPubHotel or guesthouse HotelorBedAndBreakfastShop, garage, hairdresser Store,AutoRepair,HairSalonAccountant, law firm, clinic AccountingService,LegalService,DentistorMedicalClinicCustomers come to your address, and none of these fits LocalBusinessYou work online or visit clients, with no address customers come to OrganizationGoogle 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 thegeo,openingHoursSpecificationandpriceRangeparts from the template in step 2. Those belong to places customers visit.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
LocalBusinesson 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>@idis a name tag for your business: your homepage address plus#business. Template B uses it to point back here.logomust be an image Google can fetch, at least 112 by 112 pixels.telephoneincludes+352, the country code.addressCountrystaysLU.geois 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.sameAslists your profiles on other sites, so software knows they are the same business. Only list profiles you control.availableLanguageuses 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"afterpriceRange.
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.providerrepeats the@id, name and type from Template A, so both blocks describe the same business. ChangeLocalBusinesshere 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 inpriceCurrency. If the page shows no price, delete the fiveofferslines and the comma at the end of theareaServedline.
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 helpWebflow
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 helpWix
Pages & Menu → More Actions next to the page → SEO basics → Advanced SEO → Structured Data Markup → Add New Markup. Paste, then Apply. Wix helpCheck 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.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.
https://www.cafe-ribeiro.example/
No items detected
Crawled successfully. Before: the page has no structured data.https://www.cafe-ribeiro.example/
1 valid item detected
After: open the item and check every value against your fact sheet.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.
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
validFromandvalidThroughdates 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
Serviceon 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 putEURinpriceCurrency. - 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
- Google: Optimizing for generative AI features on Google Search (structured data not required)
- Google: AI features and your website
- Google: Introduction to structured data · General structured data guidelines
- Google: Organization structured data · Local business structured data
- Google: Rich Results Test help · Schema Markup Validator
- schema.org: LocalBusiness · Restaurant · Hotel · Service · Offer
- Yoast: Site representation · WPCode · Webflow: Custom code · Wix: Structured data