Your IDX feed creates duplicate content by design. Iframes pass zero relevance to your domain.
Truly-embedded IDX via RESO Web API is the only configuration that lets your site rank on listing content. · Google overrides self-referential canonicals in favor of Zillow and Realtor.com clusters. · Extracting SEO value shifts to RealEstateListing schema completeness plus non-listing content.
IDX SEO has four structural facts that govern whether your site can rank at all.
An IDX feed is structurally mandated duplicate content: the same listing renders on Zillow, Realtor.com, Redfin, the brokerage site, and thousands of agent sites. The SEO surface is not in the listing text. It's in how the feed is rendered, how the schema is generated, and where the non-listing content sits.
Iframe IDX renders zero indexable content on your domain. Vendor-iframe IDX implementations render the listing content from the vendor's domain inside a window on your page. Google sees the listing text as belonging to the vendor, not your site. Zero topical relevance accrues to your domain. The distinction between iframe and truly-embedded IDX governs whether your site can participate in IDX SEO at all. Truly-embedded means ingested via RETS or RESO Web API and rendered server-side or statically on your domain.
Google overrides your canonical tag in favor of the directory cluster. Google treats canonical tags as hints, not directives. Zillow and Realtor.com possess vastly superior internal linking, faster sitemap ingestion, and higher PageRank. The algorithm frequently folds your listing page into the directory's canonical cluster, neutralizing it in the SERPs for the property's address-specific query. The fix is not stronger canonicals. The fix is to win at schema completeness and at non-listing content where directory authority doesn't dominate.
RESO Web API maps almost 1:1 into RealEstateListing JSON-LD. RETS field names varied wildly across local MLSs, requiring bespoke schema generation per market. RESO Web API standardized the Data Dictionary 2.0 (Resources, Fields, Lookups). Property Resource fields map directly into RealEstateListing slots: ListPrice into offers.price, BedroomsTotal into numberOfRooms, ListingDate into datePosted. MLS-specific custom fields route into additionalProperty. One schema generator handles every feed in the inventory.
Clear Cooperation Policy centralizes the freshness signal at the MLS. NAR's 2019 Clear Cooperation Policy requires brokers to submit listings to the MLS within one business day of public marketing. Google's crawlers prioritize ingestion speed against the IDX feed. Your listing pages inherit freshness through datePosted on the RealEstateListing schema, sourced from the MLS feed, not from when you published the page. Index bloat from expired listings remains a SOP 12-8 compliance surface that the SEO program has to manage.
From IDX audit to embedded schema layer in four weeks. Then non-listing content captures the visibility.
- WEEK 0
IDX architecture diagnostic
Audit the IDX implementation: iframe versus truly embedded, RETS versus RESO Web API, current schema output per listing, canonical-tag pattern, sitemap inclusion, datePosted freshness behavior. Output names whether the site can participate in IDX SEO at all and what reconfiguration the vendor relationship requires.
- WEEK 1
Schema generator
RESO Web API fields mapped into RealEstateListing JSON-LD. offers built with Offer or Demand, businessFunction set for lease versus sale, datePosted wired to the MLS feed. MLS-specific custom fields routed into additionalProperty. spatialCoverage and leaseLength populated where applicable. Generator runs against every listing in the feed.
- WEEK 2-3
Canonical and non-listing content reset
Canonical tags rebuilt against the realistic outcome that Google overrides self-referential ones against directory authority. Non-listing surfaces (neighborhood guides on the SOP 10-2 safe-harbor pattern, buyer and seller education, Service and Person entity authority pages) built to capture queries where directory clusters don't dominate.
- ONGOING
Retainer cadence
Monthly cadence on non-listing content matched to the queries the diagnostic surfaced. Quarterly review on schema validation against RESO Data Dictionary updates and on expired-listing index bloat per SOP 12-8. Annual IDX vendor review against algorithm updates.
Named-client testimonials surface here as engagements ship.
Operators who moved off iframe IDX and reclaimed listing authority.
Six on-page disciplines that earn the schema-driven rich result even when the canonical battle is lost.
Once the rendering pattern is truly embedded and the schema generator is running cleanly, the listing-detail page still has on-page work that determines whether the listing earns rich-result eligibility and whether the page converts visitor traffic into inquiries. The disciplines below land on every listing.
- 01
Title and meta description match the listing identity, not a templated string.
The address, the bed/bath count, the city, and the practice's brokerage attribution per NAR SOP 12-9. The template that produces "3-Bed Home for Sale - [Address] - [Brokerage]" outperforms the template that produces "Beautiful Listings in Your Area - [Brokerage]" because Google reads the specificity as a relevance signal and the buyer reads it as confidence.
- 02
RealEstateListing JSON-LD ships with full Offer nesting.
offers carries price, businessFunction for lease versus sale, availability for status, priceCurrency for the currency. datePosted aligns with the MLS submission per Clear Cooperation Policy. spatialCoverage carries the property boundary. numberOfRooms, floorSize, and the RESO Property Resource extensions handle the operational specifics. Missing fields kill rich-result eligibility regardless of how much the listing copy improves.
- 03
Photo array carries descriptive alt text and compressed file sizes.
Alt text per image describes the room or the view in plain language. Filenames use descriptive slugs rather than camera-default identifiers. WebP or AVIF at ~70% quality keeps Core Web Vitals inside the Good envelope. The IDX vendor's default photo handling rarely meets this bar; the build needs to handle compression and alt-text generation on top of the vendor feed.
- 04
Mobile-first rendering survives the IDX widget reflow.
Reserved space for the IDX listing-search widget through a CSS aspect-ratio or fixed min-height declaration prevents the cumulative layout shift when the widget loads. Touch-target sizing per the W3C 48x48 dp minimum on every interactive element. Saved-search modals and contact forms server-rendered or progressively enhanced rather than client-side React bundles loading after first paint.
- 05
Location surface is explicit beyond the address line.
Neighborhood name in the page chrome with a link to the neighborhood landing page. Embedded map showing the property location and the surrounding area. School district information sourced from a third-party Fair-Housing-safe data provider with attribution per SOP 10-2. Walkability score where available. The location surface is what drives discovery for buyers searching by neighborhood rather than by address.
- 06
Interactive features earn dwell time without breaking Core Web Vitals.
3D floor plans, video walkthroughs, embedded virtual tours all increase the time on page and the conversion rate. The implementation needs to lazy-load below the fold, progressively enhance the user experience, and avoid blocking the LCP element. A walkthrough video that loads automatically and ships a 5MB JavaScript bundle before the page paints fails on both axes.
The architecture of the IDX feed itself is covered above in the data-layer section and at depth at the IDX vs MLS article.
What IDX-running operators ask before they book a diagnostic.
-
What's the actual difference between iframe IDX and truly embedded IDX?
An iframe IDX renders the listing content from the vendor's domain inside a window on your page. Google sees the listing text as belonging to the vendor, not to you. Zero topical relevance accrues to your domain. Truly embedded IDX ingests the feed via RESO Web API or RETS and renders the listing server-side or statically on your domain. Googlebot parses the text, crawls the images, and processes the schema as belonging to your entity. The distinction governs whether your site can participate in IDX SEO at all. -
Why does Google ignore my self-referential canonical tag on listing pages?
Google treats canonical tags as hints, not directives. Because Zillow and Realtor.com have higher PageRank, faster sitemap ingestion, and denser internal linking, the algorithm frequently overrides your self-referential canonical and folds your listing page into the directory's canonical cluster. The fix is not stronger canonicals. The fix is to extract SEO value from listing schema completeness and non-listing content (neighborhood guides, buyer/seller education) where you can win. -
Our IDX vendor is still on RETS. Does that matter for SEO?
RETS field names vary across local MLSs, so structured-data generation requires bespoke mapping for every feed. RESO Web API standardizes the Data Dictionary 2.0, which maps almost 1:1 to RealEstateListing JSON-LD. The migration is industry-wide, post-2018, and the standardized payloads are what make scalable schema across multi-MLS brokerages possible. If the vendor doesn't support RESO Web API yet, the schema layer stays brittle. -
Where does Google get the freshness signal on listings?
NAR's Clear Cooperation Policy requires brokers to submit listings to the MLS within one business day of public marketing. That centralizes the freshness signal at the MLS, and Google's crawlers prioritize ingestion speed against the IDX feed. Your listing pages inherit freshness through the datePosted property on the RealEstateListing schema, sourced from the MLS feed, not from when you happened to publish the page.
Move off iframe IDX. Map the RESO Web API into schema. Win on the surfaces where directories don't dominate. Book a diagnostic.
We read your IDX vendor configuration, your current schema output per listing, your canonical-tag pattern, and your non-listing content layer. Diagnostic comes back inside two weeks with the IDX reconfiguration scope, the schema generator design, and the non-listing content surface you can capture.