Structured data is a block of machine-readable description attached to a page. It does not change what a shopper sees. It changes how confidently a search engine can say what the page is about, and it is the difference between a result that is a blue link and a result that shows a price, an availability state, or a location alongside it.

For a dispensary, the pages that benefit most are the ones you have the most of and pay the least attention to. Here is what to mark up, what to leave alone, and how to check what you already have.

What Product markup does

A product page written for a person says a name, shows an image, states a price. A search engine reading that page has to infer which number is the price and whether the item is purchasable. Product markup removes the inference. It states the item name, the identifier, the brand, the description, the image, and an offer containing price, currency and availability, in a fixed vocabulary.

Two consequences follow. Results can be presented with more detail than a plain link, and the page becomes eligible to be understood as a specific item rather than as a page mentioning one. Neither is a guarantee of anything. Both are prerequisites.

The fields that matter, and the ones that go missing

Name. The item as a shopper would say it, matching the visible heading. Not the internal SKU description.

Image. The actual product photograph. Sites that fall back to a category placeholder here are describing a placeholder.

Brand. Frequently blank, and it is one of the most useful fields you have, because brand plus product is how a large share of shoppers search.

Description. Distinct per item. Where the same paragraph is repeated across a hundred items, the markup is accurate and useless at the same time.

Offer price and currency. The number a shopper would pay at this location today.

Availability. In stock or out of stock, as a state rather than as a sentence.

Identifier. A stable code for the item so the same product can be recognised across your own category and search pages.

Two fields deserve explicit mention because of what should not be there. Do not publish review or rating markup for products you have not genuinely collected reviews for. And do not attach therapeutic or medical claims to markup fields. Advertising rules restrict claims, and structured data is not exempt from them.

The stale data problem

This is the failure worth understanding, because it is silent.

Markup that is generated once, when a page is created, is a photograph of a moment. Cannabis retail inventory does not hold still. Prices move with the market and with the state of the shelf. An item sells out in an afternoon. A page whose visible content updates from live inventory while its markup was written months ago is now publishing two contradictory answers about the same item, and the machine-readable one is the one being read literally.

The consequence is a shopper who arrives having been shown a price that is no longer true, or an availability state that was accurate in spring. That is a worse outcome than having no markup, because it converts an absence into a wrong answer.

The fix is architectural rather than editorial. Markup should be generated from the same live inventory the page body reads from, at the moment the page is served, so there is exactly one source and no opportunity for the two to disagree. That is a property of how the storefront is built, which is why it belongs in the same conversation as how the ecommerce layer itself works.

Pages other than products

Category pages. These are lists, not items. Mark them up as a list of the items they contain, in the order shown, rather than repeating full product markup for each entry. The page’s job is to be recognised as a browsable collection.

Brand pages. Identify the brand as an organisation and the page as the collection of that brand’s items you carry. Where the brand has an official site, referencing it helps disambiguate a name that may be shared.

Location pages. The most under-used of the three. A location page should carry the store as a physical business: legal name, street address, phone, coordinates, opening hours, and the ways to receive an order. This is what connects a page to a place, and multi-store operators get the most out of it.

Every page. A breadcrumb trail stating where the page sits in the hierarchy. It is cheap, universally applicable, and it helps a crawler understand your structure without guessing from your navigation.

The checklist

Run this against your own site. It takes about twenty minutes and needs no tooling beyond a browser and a validator.

1. Pick three products: a bestseller, something obscure, and something currently out of stock. Confirm each has its own address.

2. For each, view the delivered page source and confirm a structured data block is present in it, not added afterwards.

3. Compare the price in the markup with the price displayed on the page. They must match exactly.

4. Confirm the out-of-stock item reports itself as out of stock, not as available.

5. Confirm the brand field is populated and correct on all three.

6. Confirm each description is unique to the item.

7. Confirm no review or rating markup exists for items with no real reviews.

8. Open a category page and confirm it is described as a list.

9. Open each location page and confirm address, phone, coordinates and hours are present and current.

10. Run every one of these pages through a structured data validator and resolve errors before warnings.

Anything that fails items 3 or 4 is the stale data problem and should be fixed first, because those are the two that actively mislead. How Buddy generates this from live inventory is on the SEO page, and the page-level control around it is on the page builder.