JittyBot

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.

  1. Essential: market status, price, property type, location coordinates and photos.
  2. Very important: bedrooms, tenure, full address and description.
  3. Important: floorplan and EPC rating.
  4. 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.businessFunction to show whether the property is for sale or to let, and offers.availability to InStock while it is available, Reserved when it is under offer, sold STC or let agreed, and SoldOut once it has completed. Those values are too coarse on their own, so also add a "Market status" entry to additionalProperty with 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 @type of SingleFamilyResidence or House for houses and bungalows, Apartment for flats and maisonettes, and Room for rooms in a shared house. schema.org types are broad, so also give the type in your own words in accommodationCategory, 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 additionalProperty with 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 FloorPlan whose layoutImage is the full URL of the floorplan image. If each floor has its own image, add one FloorPlan per image.
EPC rating
Add an "EPC rating" entry to additionalProperty with the current rating letter, A to G.

Also worth including#

numberOfBathroomsTotal
A plain number.
floorSize
Use FTK for square feet or MTK for 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 real src, rather than CSS backgrounds or a placeholder with the real URL tucked away in a data- attribute. The browser's native loading="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.

Back to JittyBot