Elite module 05

SEO & Schema setup.

JSON-LD schema for properties, projects, developers, agents and area pages. Meta templates with smart variables, Open Graph, sitemap, canonical URLs.

What SEO & Schema does

Generic SEO plugins know about blog posts and pages. They don’t know what a Property is, that a Project has handover dates, or that an Area page should rank for community queries. Elite’s SEO and Schema module adds the structured data Google needs for every Prop Nexia content type.

The end result: your property pages get rich results in Google search — price, beds, baths and location showing up directly in the search snippet. Your project pages can show payment plans. Your agent pages can show contact details and reviews.

What this module does and doesn’t do. It adds the JSON-LD schema, meta description templates, Open Graph tags and sitemap entries that property content needs. It doesn’t replace a general SEO plugin like Yoast or Rank Math — it works alongside them.

Activate the module

Make sure your Elite licence is valid. Then:

  1. Go to Elite → Modules in WordPress admin
  2. Find SEO and Schema in the module list
  3. Click Activate

A new menu appears: Elite → SEO and Schema. This is where you configure templates, view the JSON-LD debug output, and manage sitemap settings.

Works with your existing SEO plugin

SEO and Schema works alongside any of these. If one is already active, Elite adds JSON-LD on top of what they do. It doesn’t conflict.

  • Yoast SEO
  • Rank Math
  • All in One SEO (AIOSEO)
  • SEOPress
  • No SEO plugin at all (Elite handles meta tags itself)

Schema types emitted

Elite outputs a JSON-LD <script type="application/ld+json"> tag on each page. The schema type depends on the content:

PageSchema type
Property pageResidence with offers, address, numberOfRooms, floorSize
Project pageApartmentComplex with developer, payment plan and handover date
Developer pageOrganization with logo, founder, project list
Agent pageRealEstateAgent with contact details, languages, current listings
Area guide pagePlace with geo-coordinates and address
Property archive (filtered)SearchResultsPage with item list
All pages (site-wide)BreadcrumbList showing the page hierarchy

All schema follows the official schema.org vocabulary that Google, Bing and other search engines parse.

JSON-LD examples

These are real examples of what Elite emits. Open the source view of any property page on a Prop Nexia site to see your own version.

Property page

JSON-LD on a listing page
{
  "@context": "https://schema.org",
  "@type": "Residence",
  "name": "Marina View Apartment",
  "url": "https://yoursite.com/properties/marina-view-apartment/",
  "image": [
    "https://yoursite.com/wp-content/uploads/2026/05/marina-view-1.jpg",
    "https://yoursite.com/wp-content/uploads/2026/05/marina-view-2.jpg"
  ],
  "description": "Apartment for sale in Dubai Marina. 2 beds, 2 baths, 1,240 sqft.",
  "numberOfRooms": 2,
  "numberOfBathroomsTotal": 2,
  "floorSize": {
    "@type": "QuantitativeValue",
    "value": 1240,
    "unitCode": "FTK"
  },
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Dubai Marina",
    "addressRegion": "Dubai",
    "addressCountry": "AE"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 25.0762,
    "longitude": 55.1394
  },
  "offers": {
    "@type": "Offer",
    "price": 2400000,
    "priceCurrency": "AED",
    "availability": "https://schema.org/InStock"
  }
}

Project page

JSON-LD on an off-plan project page
{
  "@context": "https://schema.org",
  "@type": "ApartmentComplex",
  "name": "Marina Heights",
  "url": "https://yoursite.com/projects/marina-heights/",
  "image": "https://yoursite.com/wp-content/uploads/2026/05/marina-heights.jpg",
  "description": "Off-plan apartment tower in Dubai Marina by Emaar. Handover Q4 2027.",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Dubai Marina",
    "addressRegion": "Dubai",
    "addressCountry": "AE"
  },
  "developer": {
    "@type": "Organization",
    "name": "Emaar Properties"
  }
}

Agent page

JSON-LD on an agent profile page
{
  "@context": "https://schema.org",
  "@type": "RealEstateAgent",
  "name": "A. Khan",
  "url": "https://yoursite.com/agents/a-khan/",
  "image": "https://yoursite.com/wp-content/uploads/2026/05/agent-a-khan.jpg",
  "jobTitle": "Senior Property Consultant",
  "telephone": "+971501234567",
  "email": "a.khan@yourbrokerage.com",
  "knowsLanguage": ["English", "Arabic", "Urdu"],
  "areaServed": ["Dubai Marina", "Downtown", "Business Bay"]
}

Meta description templates

Configure a template per content type with smart variables. Elite generates a unique meta description for every listing, project, agent and area page — automatically, with no manual work.

Example template (property pages)

{type} for {purpose} in {community}, {city}. {beds} beds, {baths} baths, {size}. Ref {ref}.

For a 2-bedroom apartment for sale in Dubai Marina, this resolves to:

Apartment for Sale in Dubai Marina, Dubai. 2 beds, 2 baths, 1,240 sqft. Ref PN-8421.

Available variables

VariableWhat it inserts
{title}The listing title
{type}Property type — Apartment, Villa, Townhouse, Office, Land
{purpose}Sale, Rent, Off-plan, Short-let
{city}City name — Dubai, Abu Dhabi, Sharjah
{community}Community — Dubai Marina, Downtown, JVC
{beds}Number of bedrooms
{baths}Number of bathrooms
{size}Floor area with units — “1,240 sqft”
{price}Raw numeric price
{price_formatted}Price with currency symbol — “AED 2,400,000”
{ref}Your internal listing reference
{developer}Developer name (project pages)
{handover}Handover date (project pages)
{agent}Assigned agent’s name
{site_name}Your site name from WordPress settings

Per-content-type templates

Configure a separate template for each content type in Elite → SEO and Schema → Templates:

  • Properties — title and meta description with property-specific variables
  • Projects — emphasise developer, handover date, payment plan
  • Developers — company-focused with founded date and active projects
  • Agents — name, specialities, areas served
  • Area guides — community focus, with population and average prices
Aim for 140–160 characters. Google typically displays the first 150 characters of a meta description in search results. Anything longer is truncated. The Elite template editor shows a live character count to help you stay in range.

Open Graph and Twitter cards

When someone shares a listing URL on WhatsApp, Facebook, X, LinkedIn or in iMessage, you want it to look like a property listing — with the photo, price and location. Not just a bare URL.

Elite auto-populates Open Graph and Twitter card tags on every Prop Nexia page:

TagSource
og:titleYour meta title template
og:descriptionYour meta description template
og:imageFirst gallery image, served at 1200×630
og:typewebsite for hubs, product for listings
og:urlThe canonical URL (clean of UTM and referral params)
twitter:cardsummary_large_image — full-bleed image preview
twitter:titleSame as og:title
twitter:imageSame as og:image

Test how it looks before sharing

XML sitemap

Elite generates a sitemap for every Prop Nexia content type at:

https://yoursite.com/prop-nexia-sitemap.xml

The sitemap includes one entry per published property, project, developer, agent and area page. Each entry has a <lastmod> reflecting when that listing was last updated.

If you have Yoast or Rank Math active

Elite detects them and registers its entries with their sitemap instead of writing a duplicate file. Your single sitemap at /sitemap_index.xml (Yoast) or /sitemap_index.xml (Rank Math) now includes all Prop Nexia URLs automatically.

Submit your sitemap to search engines

  1. Open Google Search Console. Add your site if you haven’t yet.
  2. Go to Sitemaps in the left menu
  3. Enter your sitemap URL — prop-nexia-sitemap.xml or sitemap_index.xml
  4. Click Submit
  5. Repeat for Bing Webmaster Tools — same process
Add the sitemap to robots.txt. Most crawlers find your sitemap via Search Console. Some find it via your robots.txt. Add this line: Sitemap: https://yoursite.com/prop-nexia-sitemap.xml

Canonical URLs

Filtered property archives — pages like /properties/?type=villa&city=dubai — emit a canonical URL pointing to the base archive. This prevents Google from treating every filter combination as a separate page (which would dilute your ranking).

Individual listing pages always emit their own canonical, stripped of UTM and referral parameters. So a URL like /properties/marina-view/?utm_source=instagram has a canonical pointing to /properties/marina-view/. All the SEO authority consolidates on one URL.

Validate the schema

Run any of your published listing URLs through Google’s testing tools. Elite’s output should pass with zero errors.

If you see errors

Check Elite → SEO and Schema → Debug. It shows the exact JSON-LD that’s being emitted on each page, with any validation warnings highlighted.

Common causes of validation errors:

  • Property is missing fields the schema marks as required
  • The agent assigned to the listing has no contact details set
  • Price is missing or set to 0
  • Coordinates (lat/lng) are missing — affects geo on the schema

Troubleshooting

JSON-LD has missing fields

The schema only includes fields that have values. If your property has no floor_size set, that field won’t appear in the JSON-LD. The schema is still valid — it just describes less of your property than it could.

Fix by filling the missing fields on the property edit page. The JSON-LD updates automatically.

Yoast or Rank Math is overriding meta tags

If you have a general SEO plugin active, it takes priority for the title and meta description tags. Two ways to handle it:

  • Let Elite handle Prop Nexia post types — in your SEO plugin’s settings, disable its handling for the property, project, developer, agent and area post types.
  • Use the SEO plugin’s per-post-type templates — set up similar variables on the SEO plugin’s side. Elite still emits the JSON-LD regardless of which plugin handles the meta tags.

Rich results not showing in Google after weeks

Rich results take time. Two things to check:

  • The page is indexed — search site:yoursite.com in Google to confirm
  • The page passes the Rich Results Test — Google won’t show rich results for pages with schema errors
  • Wait. Google can take 2–6 weeks to start showing rich results for newly published structured data, especially for new domains.

Open Graph image doesn’t appear when shared

WhatsApp, Facebook and other sharing platforms cache the OG image. If you update an image and the old one keeps appearing when shared:

  1. Open the Facebook Sharing Debugger
  2. Paste the URL of the listing
  3. Click Scrape Again — Facebook re-fetches the OG tags

WhatsApp uses Facebook’s cache, so scraping again on the Facebook debugger fixes WhatsApp previews too.

Sitemap is not updating

If the sitemap doesn’t include a property you just published:

  • Go to Elite → SEO and Schema → Sitemap → Rebuild now
  • If using Yoast or Rank Math, also click their rebuild sitemap button
  • Check that the property’s status is publish, not draft or pending