Helping JittyBot understand your site
JittyBot reads your listing pages to work out what each property is, where it is, whether it is still available and what it looks like. The more clearly your pages describe those facts, the more accurately your listings appear on Jitty, and the more likely they are to show up for the right searches.
The single most useful thing you can do is add JSON-LD structured data to each listing. Alongside that, making sure the visible page has clearly labelled key facts helps us fill in anything the structured data leaves out.
What matters most#
Not every detail carries the same weight. If you only have time to get a few things right, start at the top.
- Essential: market status, price, property type, location coordinates and photos.
- Very important: bedrooms, tenure, full address and description.
- Important: floorplan and EPC rating.
- Also worth including: anything else buyers ask about, such as bathrooms, floor area, lease years remaining, ground rent, service charge and council tax band.
JSON-LD structured data#
JSON-LD is a small block of machine-readable data that sits inside a
<script type="application/ld+json"> tag in your
page. It is invisible to visitors, does not affect your layout, and uses the shared
schema.org
vocabulary that search engines already understand. Because it is separate from your design, it keeps working when
you redesign your site.
Add one block to each listing page. It can go in the
<head> or the
<body>, but it should be in the HTML your server
sends rather than injected later by JavaScript, so we can read it without rendering the page.
A property for sale#
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "RealEstateListing", "url": "https://www.example-estates.co.uk/properties/12345", "name": "3 bedroom semi-detached house for sale in Example Road, Bristol", "description": "A bright three bedroom semi-detached house on a quiet residential road, with a south-facing garden...", "datePosted": "2026-09-01", "image": [ "https://www.example-estates.co.uk/images/12345/front.jpg", "https://www.example-estates.co.uk/images/12345/kitchen.jpg" ], "offers": { "@type": "Offer", "businessFunction": "http://purl.org/goodrelations/v1#Sell", "availability": "https://schema.org/InStock", "price": 425000, "priceCurrency": "GBP", "offeredBy": { "@type": "RealEstateAgent", "name": "Example Estates", "url": "https://www.example-estates.co.uk" } }, "mainEntity": { "@type": "SingleFamilyResidence", "accommodationCategory": "Semi-detached house", "geo": { "@type": "GeoCoordinates", "latitude": 51.45452, "longitude": -2.58791 }, "address": { "@type": "PostalAddress", "streetAddress": "12 Example Road", "addressLocality": "Bristol", "postalCode": "BS1 1AA", "addressCountry": "GB" }, "numberOfBedrooms": 3, "numberOfBathroomsTotal": 2, "floorPlan": { "@type": "FloorPlan", "layoutImage": "https://www.example-estates.co.uk/images/12345/floorplan.png" }, "floorSize": { "@type": "QuantitativeValue", "value": 1050, "unitCode": "FTK" }, "additionalProperty": [ { "@type": "PropertyValue", "name": "Market status", "value": "For sale" }, { "@type": "PropertyValue", "name": "Tenure", "value": "Freehold" }, { "@type": "PropertyValue", "name": "EPC rating", "value": "C" }, { "@type": "PropertyValue", "name": "Council tax band", "value": "C" } ] } } </script>
A property to let#
Compared with a sale, the name,
businessFunction and "Market status" all change,
and the rent goes in a priceSpecification with the
period it covers: MON for per calendar month or
WEE for per week. Tenure is left out because it does
not apply to tenants.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "RealEstateListing", "url": "https://www.example-estates.co.uk/properties/12345", "name": "3 bedroom semi-detached house to let in Example Road, Bristol", "description": "A bright three bedroom semi-detached house on a quiet residential road, with a south-facing garden...", "datePosted": "2026-09-01", "image": [ "https://www.example-estates.co.uk/images/12345/front.jpg", "https://www.example-estates.co.uk/images/12345/kitchen.jpg" ], "offers": { "@type": "Offer", "businessFunction": "http://purl.org/goodrelations/v1#LeaseOut", "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "price": 1450, "priceCurrency": "GBP", "unitCode": "MON" }, "offeredBy": { "@type": "RealEstateAgent", "name": "Example Estates", "url": "https://www.example-estates.co.uk" } }, "mainEntity": { "@type": "SingleFamilyResidence", "accommodationCategory": "Semi-detached house", "geo": { "@type": "GeoCoordinates", "latitude": 51.45452, "longitude": -2.58791 }, "address": { "@type": "PostalAddress", "streetAddress": "12 Example Road", "addressLocality": "Bristol", "postalCode": "BS1 1AA", "addressCountry": "GB" }, "numberOfBedrooms": 3, "numberOfBathroomsTotal": 2, "floorPlan": { "@type": "FloorPlan", "layoutImage": "https://www.example-estates.co.uk/images/12345/floorplan.png" }, "floorSize": { "@type": "QuantitativeValue", "value": 1050, "unitCode": "FTK" }, "additionalProperty": [ { "@type": "PropertyValue", "name": "Market status", "value": "To let" }, { "@type": "PropertyValue", "name": "EPC rating", "value": "C" }, { "@type": "PropertyValue", "name": "Council tax band", "value": "C" } ] } } </script>
Structured data fields, in order of importance#
Essential#
- Market status
-
Set
offers.businessFunctionto show whether the property is for sale or to let, andoffers.availabilitytoInStockwhile it is available,Reservedwhen it is under offer, sold STC or let agreed, andSoldOutonce it has completed. Those values are too coarse on their own, so also add a "Market status" entry toadditionalPropertywith your exact wording: For sale, Under offer, Sold STC, Sold, To let, Let agreed or Let. offers.price-
The price as a number with no currency symbols or commas, plus
priceCurrency. For lettings, give the rent period as shown in the lettings example. - Property type
-
Use an
@typeofSingleFamilyResidenceorHousefor houses and bungalows,Apartmentfor flats and maisonettes, andRoomfor rooms in a shared house. schema.org types are broad, so also give the type in your own words inaccommodationCategory, such as "Detached house", "End of terrace", "Bungalow" or "Ground floor flat". geo- The latitude and longitude of the property itself, to at least five decimal places. Not the centre of the postcode or town, and not the address of your branch.
image- Every photo of the property, not just the first one, as full URLs to the largest version you have, in the order you want them shown. Put the best exterior or hero shot first.
Very important#
numberOfBedrooms- A plain number, not text like "3 bed". Studios have zero bedrooms.
- Tenure
-
schema.org has no dedicated tenure field, so add it to
additionalPropertywith the name "Tenure" and one of "Freehold", "Leasehold", "Share of freehold" or "Commonhold". Please include it on every sale listing. address- The full street address, town and postcode. If you only show part of the address to visitors, still include the postcode.
description- The full listing description as plain text, not a shortened summary.
Important#
floorPlan-
A
FloorPlanwhoselayoutImageis the full URL of the floorplan image. If each floor has its own image, add oneFloorPlanper image. - EPC rating
-
Add an "EPC rating" entry to
additionalPropertywith the current rating letter, A to G.
Also worth including#
numberOfBathroomsTotal- A plain number.
floorSize-
Use
FTKfor square feet orMTKfor square metres. additionalProperty- Anything else schema.org does not cover, such as council tax band, as name and value pairs.
Leasehold properties#
For leasehold and share of freehold properties, also give the years remaining on the lease, the ground rent and the service charge.
{ "additionalProperty": [ { "@type": "PropertyValue", "name": "Tenure", "value": "Leasehold" }, { "@type": "PropertyValue", "name": "Lease years remaining", "value": 112 }, { "@type": "PropertyValue", "name": "Ground rent", "value": 250, "unitText": "GBP per year" }, { "@type": "PropertyValue", "name": "Service charge", "value": 1200, "unitText": "GBP per year" } ] }
Keeping structured data accurate#
- Generate it from the same data that renders the page, so it can never drift out of step with what visitors see.
- Update it when a property goes under offer, is sold or let, or has its price changed.
- Leave out any field you do not know rather than guessing or filling it with a placeholder.
- Check your pages with the Schema Markup Validator to catch syntax errors and misspelt field names.
Clearly labelled page content#
Even with structured data, the visible page matters. It is how we fill gaps and double-check what the structured data says, and it is all we have to go on for sites without JSON-LD. The same things that make a listing easy for a person using a screen reader make it easy for JittyBot.
Label your key facts#
Present market status, price, property type, bedrooms, tenure, EPC rating and similar facts as label and value pairs. A description list is ideal:
<dl> <dt>Status</dt> <dd>For sale</dd> <dt>Price</dt> <dd>Guide price £425,000</dd> <dt>Property type</dt> <dd>Semi-detached house</dd> <dt>Bedrooms</dt> <dd>3</dd> <dt>Tenure</dt> <dd>Freehold</dd> <dt>EPC rating</dt> <dd>C</dd> </dl>
Show market status and price as text#
- Show "For sale", "Under offer", "Sold STC", "To let" or "Let agreed" as text near the title or price, not only as a ribbon image or a banner baked into the main photo.
- Update the status as soon as it changes, so buyers on Jitty are not chasing properties that have already sold or let.
- Show the rent period next to the price, such as "pcm" or "pw", and price qualifiers like "Guide price", "Offers over" or "POA" as text.
Make location explicit#
If you show a map, make sure the coordinates it uses are in the page HTML, for example in the map link or in
data-latitude and
data-longitude attributes on the map element, rather
than fetched separately by a script. Write the address out as text too, including the town and postcode.
Make every photo reachable#
Listings with a full set of good photos do far better on Jitty than those with one or two. Most missing photos we see are caused by galleries that hide images from anything that is not a person clicking through them.
- Include every photo in the page HTML, not just the first one with the rest loaded by the carousel as it is clicked.
- Use ordinary
<img>tags with a realsrc, rather than CSS backgrounds or a placeholder with the real URL tucked away in adata-attribute. The browser's nativeloading="lazy"is fine. - Link to or offer the full-size image, for example with
srcset, not only a thumbnail. - Keep photos free of text overlays and watermarks where you can, and keep each photo at the same URL for as long as the listing is live so we do not fetch it again.
- Do not block your image URLs in robots.txt. Media is fetched as
JittyBot-Image, so you can give it its own rules if you need to.
State the tenure#
Tenure is material information that buyers need before they decide to view, so show it on the listing itself rather than leaving it to the brochure or a phone call. Label it "Tenure" and use the plain terms: Freehold, Leasehold, Share of freehold or Commonhold.
For leaseholds, show the years remaining, ground rent and service charge as labelled facts too, with the period each charge covers, such as "£1,200 per year". A phrase buried in the description like "long lease" is much harder for us to pick up than "Lease: 112 years remaining".
Include the full description#
Put the whole description in the page. A "Read more" button that reveals text already in the HTML is fine; one that fetches the rest from your server when clicked means we only see the first paragraph.
Label floorplans and the EPC#
- Show floorplans as ordinary images with alt text that says they are a floorplan, so we do not mistake them for a photo.
- Write the EPC rating as text, such as "EPC rating: C", rather than only showing it inside the EPC graph image.
Do not rely on icons alone#
A bed icon next to the number 3 is obvious to a person looking at the page but ambiguous to software. Keep the icon if you like, but put the word next to the number:
<li> <svg aria-hidden="true">...</svg> 3 bedrooms </li>
Serve content as HTML#
JittyBot can render JavaScript when it has to, but it is slower and heavier on your server than reading HTML directly. Listing details, photos and floorplans that are present in the HTML your server sends are picked up more quickly and more reliably.
Help us find your listings#
JittyBot has to find a listing before it can read it. The fastest way to make sure it finds every one is an XML
sitemap that lists the URL of every live listing, with accurate
lastmod dates so we only come back when something has
changed. Point to it from your robots.txt with a
Sitemap: line so we pick it up automatically.
Make sure your robots.txt allows
JittyBot to crawl your listing pages and
JittyBot-Image to fetch your photos and floorplans. If
you use a firewall or bot protection service, check it is not blocking our
user agents either.
One page per listing#
Give every listing its own stable URL that does not change when the price or status does, and set a
rel="canonical" link if the same listing can be reached
at several addresses.
When a listing is removed#
Once a property is sold or let you can either keep the page live with its status updated, or take it down. If you
take it down, or the listing is withdrawn, the page should return a
404 Not Found or
410 Gone status. We treat both the same way, as a clear
signal that the listing has gone.
Please do not redirect removed listings to your homepage or search results, or show a "this property is no longer
available" message with a normal 200 OK status. Both
make a removed listing look live, so it can stay on Jitty longer than it should.
Getting in touch#
If your listings look wrong on Jitty, or you would like us to check your structured data, email [email protected] with your domain and a link to an example listing.