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.
Activate the module
Make sure your Elite licence is valid. Then:
- Go to Elite → Modules in WordPress admin
- Find SEO and Schema in the module list
- 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:
| Page | Schema type |
|---|---|
| Property page | Residence with offers, address, numberOfRooms, floorSize |
| Project page | ApartmentComplex with developer, payment plan and handover date |
| Developer page | Organization with logo, founder, project list |
| Agent page | RealEstateAgent with contact details, languages, current listings |
| Area guide page | Place 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
| Variable | What 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
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:
| Tag | Source |
|---|---|
og:title | Your meta title template |
og:description | Your meta description template |
og:image | First gallery image, served at 1200×630 |
og:type | website for hubs, product for listings |
og:url | The canonical URL (clean of UTM and referral params) |
twitter:card | summary_large_image — full-bleed image preview |
twitter:title | Same as og:title |
twitter:image | Same as og:image |
Test how it looks before sharing
- Facebook Sharing Debugger — preview for WhatsApp, Facebook, Instagram
- Twitter Card Validator — preview for X
- LinkedIn’s Post Inspector — preview for LinkedIn
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
- Open Google Search Console. Add your site if you haven’t yet.
- Go to Sitemaps in the left menu
- Enter your sitemap URL —
prop-nexia-sitemap.xmlorsitemap_index.xml - Click Submit
- Repeat for Bing Webmaster Tools — same process
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.
- Google Rich Results Test — checks for rich-snippet eligibility
- Schema.org Validator — checks structural validity of the JSON-LD
- Google Search Console → Enhancements section — shows errors across your whole site
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
geoon 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.comin 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:
- Open the Facebook Sharing Debugger
- Paste the URL of the listing
- 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, notdraftorpending
