Has Schema Offer checks whether a page declares the legacy Schema.org Offer type by its http://schema.org/Offer URI. It returns 1 when that exact URI is present in the body markup and 0 when it is not — it detects the type declaration only, not whether the offer data is complete or valid.
| Factor ID | RG-SCH-014 |
|---|---|
| Family | Schema.org |
| Measurement | Binary presence (0 / 1) |
| Measured zone | Body HTML without scripts |
What it measures
This factor detects the legacy Schema.org Offer type URI on the page. Offer is the vocabulary type used to describe a product or service being made available for a given price, currency, and availability. RankGear records the type declaration as a simple present-or-absent signal — it does not read the price, seller, or availability values behind it.
How RankGear measures it
RankGear searches the body HTML case-insensitively for the exact string http://schema.org/Offer. If that URI appears anywhere in the measured zone, the factor is 1; otherwise it is 0. The match is literal and version-specific: only the http:// form of the type URI counts.
What RankGear looks for
<div itemscope itemtype="http://schema.org/Offer">
<span itemprop="price">49.00</span>
<meta itemprop="priceCurrency" content="USD">
<link itemprop="availability" href="http://schema.org/InStock">
</div>| Value | Meaning |
|---|---|
| 1 | The http://schema.org/Offer URI is present in the body markup. |
| 0 | The URI is absent — no legacy Offer type was detected. |
How to optimize it
Use Offer markup only where the page describes a real offer, and populate it with accurate price, currency, availability, URL, and seller data. Because this factor keys on the http://schema.org/Offer URI specifically, markup that uses the HTTPS URI or a bare JSON-LD @type of Offer will not be counted here even though it is valid schema. Treat the value as an observation of what the tool can see, not a target to satisfy for its own sake — the goal is honest, current offer markup, not the presence of one particular URI string.
Important considerations
- The match is literal: the HTTPS form (
https://schema.org/Offer) and bare JSON-LD@typedeclarations are missed, so a page can carry validOffermarkup and still read as 0. - RankGear does not validate the offer details — presence of the type says nothing about whether the price, currency, availability, or seller fields are correct or complete.
- Keep price and availability current; stale offer data can create a mismatch between markup and the live page.
- Do not mark general descriptions as offers — reserve the type for genuine, purchasable offers.
- This is a correlation-based prioritization signal within a measured result set. Adding the URI does not by itself cause a page to rank, and its absence does not mean a page cannot.
Related factors
Part of the Factors reference · how RankGear measures · glossary.