Structured data is code you add to your pages that translates your content into a language machines can read without guessing. In practice it is JSON-LD markup (a small script block invisible to visitors) that tells Google and AI engines explicitly: "this is a business," "this is an article," "this is a price," "this FAQ answers that question." The payoff is two-fold: you earn rich results in Google (stars, prices, expandable FAQs) and, more importantly in 2026, you become far easier for ChatGPT, Perplexity, and AI Overviews to cite.
In Morocco, most company sites carry no markup at all, or broken markup. That is an opening. A well-structured SME site in Casablanca or Rabat stands out instantly against competitors who leave machines to guess. This guide walks through every useful schema type, what it unlocks for SEO and for AI, how to implement it cleanly, and how to validate it.
What exactly is structured data?
A web page is clear to a human reader. To a machine it is a soup of HTML tags where the string "1,200" could be a price, a date, a phone number, or a review count. Structured data removes that ambiguity.
The dominant standard is Schema.org, a shared vocabulary created by Google, Microsoft, Yahoo, and Yandex. You describe your page using that vocabulary, in the format Google now explicitly recommends: JSON-LD (JavaScript Object Notation for Linked Data). It is a <script type="application/ld+json"> block placed in the page head or body. It does not change how the page looks. It speaks only to machines.
Why JSON-LD over older formats (Microdata, RDFa)? Because it is separated from the visible HTML, which makes it simpler to generate, maintain, and inject through a CMS or a framework like Next.js. You do not have to clutter your content markup with inline attributes.
Why has schema become central to GEO?
Here is the point many Moroccan agencies still miss. Markup was never only about stars in Google results. Its real value in 2026 is making your claims machine-extractable.
A generative engine like ChatGPT or AI Overviews has to do something risky: cite a claim as fact, under its own brand. So it favours sources where information is crisp, attributed, and unambiguous. When your page declares in JSON-LD "this organization is named ClaroDigi, it is based in Morocco, here is its LinkedIn profile, here is its official site," you are not asking the engine to guess. You are handing it a claim ready to cite.
This is the same logic as the discipline of getting cited by ChatGPT and AI Overviews: markup is the technical equivalent of that editorial work. Answer-first writing speaks to humans and AI in natural language; schema speaks to machines in structured language. Together they form a page that engines love to reuse.
The sameAs property is the most powerful example. When your Organization markup lists your official profiles (LinkedIn, Google Business, Crunchbase, X), you tie your site to a recognizable entity. That is also why an llms.txt file aimed at AI crawlers earns its keep, and schema is its technical trigger.
The schema types that actually matter
You do not need the hundreds of Schema.org types. Six cover about 95% of what a Moroccan business needs. Here is the full mapping.
| Schema type | What it declares | SEO benefit | AI / GEO benefit | | --- | --- | --- | --- | | Organization (+ sameAs) | Brand identity, logo, official profiles | Knowledge panel, logo in the SERP | Ties your site to a citable entity, reduces brand confusion | | LocalBusiness | Address, hours, service area, phone | Google Maps local pack, displayed hours | Geolocated AI answers ("SEO agency in Casablanca") | | Article / BlogPosting | Author, date, topic, publisher | Top Stories eligibility, freshness signal | Author and date attribution, a trust cue for citation | | FAQPage | Paired questions and answers | Expandable FAQ under the result | Q/A pairs ready to be extracted word for word | | Product / Offer | Name, price, currency (MAD), availability, reviews | Stars, price, and stock in the SERP | Price comparisons cited by shopping AIs | | BreadcrumbList | The page's position in the site tree | Breadcrumb shown instead of the raw URL | Hierarchical context, helps AI locate the page |
Organization and sameAs: your ID card
This is the single most important block, placed on the homepage or site-wide. It declares the legal name, the logo, the URL, and above all the sameAs array pointing to your verifiable profiles. Without it, Google and AI engines treat every mention of your brand as potentially a different brand.
LocalBusiness: essential in Morocco
If you have a physical address or a service area (a restaurant in Marrakech, an agency in Rabat, a firm in Tangier), this type declares hours, GPS coordinates, and areaServed. Paired with a Google Business Profile, it feeds local answers, including the ones AIs rephrase. It is a direct lever for local SEO on google.co.ma.
Article and BlogPosting: trust through attribution
On every blog article, declare author, datePublished, dateModified, and publisher. Generative engines prefer content with clear attribution: a fact with no author and no date is riskier to cite than a fact that is signed and dated.
FAQPage: question-answer pairs ready to cite
FAQPage is probably the best effort-to-result ratio for GEO. Each question-answer pair becomes a self-contained block an engine can lift as-is. A well-marked-up FAQ section is literally a menu of answers served to AIs.
Product and Offer: show your prices in dirhams
For an e-commerce site, Product and Offer declare the name, the price in MAD, availability, and the review aggregate. This is what makes stars and price appear directly in Google, and what lets shopping assistants compare your offer.
How do you implement JSON-LD cleanly?
Implementation depends on your stack, but the logic stays the same.
Step 1: generate markup dynamically
Never hard-code schema. A serious site generates JSON-LD from the same data that feeds the page (title, author, price, hours). On a modern Next.js or React site, you inject a component that serializes your data into JSON-LD. This is exactly the kind of clean foundation we lay in custom development: the markup follows the content automatically, with no manual entry that drifts out of sync.
Step 2: match markup to what is visible
Google's golden rule: only mark up what is actually visible on the page. A FAQPage describing questions absent from the visible content violates the guidelines and can trigger a manual penalty. Schema describes the page, it does not replace it.
Step 3: one coherent @graph
Rather than stacking ten separate <script> blocks, group your entities in a single object with a @graph array. Link them with @id identifiers: the Article references the Organization as publisher, the BreadcrumbList references the page, and so on. You get a coherent graph machines traverse effortlessly.
Step 4: an honest dateModified
Update dateModified when you genuinely revise the content. Freshness is a real signal, but lying about it (changing the date without touching the substance) eventually shows and does not help citation.
How do you validate your markup?
Untested markup is broken markup. Two free tools are enough.
- Google's Rich Results Test (search.google.com/test/rich-results). It tells you which rich results your page is eligible for and flags blocking errors. This is the verdict that matters for the SERP.
- The Schema.org validator (validator.schema.org). Stricter and more neutral, it checks conformance to the vocabulary independently of what Google supports.
Run every page template (homepage, article, product page, local page) through both. Also watch the "Enhancements" report in Search Console, which surfaces site-wide schema errors that are often invisible otherwise.
A common trap in Morocco: declaring a price with no currency, or with "DH" instead of the ISO code MAD. Machines expect priceCurrency: "MAD". One currency mistake and your price will not display.
Which mistakes cost the most?
A few faults recur in audits. The sameAs pointing to an abandoned Facebook page rather than an active profile, which weakens the entity signal. The FAQPage duplicated across dozens of pages with the same three generic questions, which Google treats as markup spam. The LocalBusiness with no GPS coordinates, which misses geolocated answers. And the most ordinary oversight of all: perfect markup on the mockup, never shipped to production because server-side rendering swallowed it.
Schema is not a gimmick for scraping three stars. It is the layer that makes your claims verifiable and reusable by engines. On ClaroDigi's own site, a single content cluster drives roughly 56% of search impressions and 97% of clicks, and our bilingual FR/EN library of 380+ guides ships an llms.txt file for AI crawlers: structured markup is part of the same machine that turns free knowledge into citable authority. That is precisely the Authority Engine we run: give genuinely useful knowledge, earn trust, and arrive in the conversation at the moment of decision. To see how the whole machine assembles end to end, explore our SEO and GEO agency in Morocco.
FAQ
Does structured data directly improve my Google ranking?
Not directly. Schema is not a ranking factor in the classic sense: it does not push your page higher by itself. But it unlocks rich results (stars, FAQ, price) that sharply lift your click-through rate, and it helps Google understand your page. Indirectly, a better click-through rate and better comprehension strengthen your overall performance.
Which schema type should I implement first?
Start with Organization plus a complete sameAs array site-wide, because it establishes your entity identity. Then add LocalBusiness if you have a physical presence, then Article on the blog and FAQPage on pages that answer questions. Those four return the most value, both for the SERP and for citation by AIs.
Does FAQPage markup still work after Google's changes?
Google restricted the display of FAQ rich results to authority and government sites for most queries. So the visual display is less guaranteed than before. The GEO value, however, is intact: marked-up question-answer pairs remain perfectly extractable by ChatGPT, Perplexity, and AI Overviews, which do not depend on the same display policy.
Do I need a developer to add JSON-LD?
For clean, dynamic markup that follows your content, yes, the ideal is a developer or a well-architected site that generates it automatically. Plugins exist for common CMS platforms and are fine for a start. But for a multilingual site with products, articles, and local pages, markup generated from your data stays the most reliable and durable solution.
Is schema in Moroccan dirhams a special case?
The only real trap is currency. Always declare priceCurrency: "MAD" (the ISO code), never "DH" or "Dhs." Everything else is identical to any other market: address in local format, number in international format (+212), and hours in the correct time zone. A mis-coded currency is the number one cause of prices that fail to display in results.
