The best marketing ideas come from marketers who live it.
That’s what this newsletter delivers.
The Marketing Millennials is a look inside what’s working right now for other marketers. No theory. No fluff. Just real insights and ideas you can actually use—from marketers who’ve been there, done that, and are sharing the playbook.
Every newsletter is written by Daniel Murray, a marketer obsessed with what goes into great marketing. Expect fresh takes, hot topics, and the kind of stuff you’ll want to steal for your next campaign.
Because marketing shouldn’t feel like guesswork. And you shouldn’t have to dig for the good stuff.
Schema markup is code you add to a page that tells a machine what the page means. Not what it says. What it means. A human reads “Founded in 2019 in Austin” and understands it. A machine reads a string of characters, unless you label it.
Here is the honest part, and we will lead with it rather than bury it. Schema is not a citation cheat code. NP Digital scored seven trust signals across the major engines and structured data came last. Google states plainly that no special schema is required for AI Overviews or AI Mode. And on 7 May 2026, Google removed FAQ rich results from search entirely.
So why give it a full issue? Because schema is how you remove ambiguity about what you are, and every other signal in this newsletter sits on top of that. Microsoft has confirmed schema helps its models understand content for Copilot. It is table stakes. Table stakes still have to be paid.
Ship it anyway. It is the floor, not the ceiling.
Family 1: direct answer schemas
These map your text to the shape of a question. They are the closest thing to speaking an engine’s native language, because an engine’s job is to return an answer and these types hand it one.
FAQPage — question and answer pairs
Strict question-and-answer pairs. An engine can lift a complete answer without having to decide where the answer starts and stops. This is the highest-return block for most B2B pages.
HowTo — a process, in ordered steps
Breaks a procedure into chronological steps. Engines use it to explain processes, and it maps directly to “how do I…” queries, which are the highest-intent format in AI search.
QAPage — one question, many answers
Different from FAQPage. Use it when a page hosts user-submitted answers to a single question, like a community thread. It signals community consensus rather than an official answer. No forum, no QAPage.
Speakable — and why you should skip it
Marks the sections of a page best suited to text-to-speech playback. It sounds perfect for voice assistants. It is not available to you. Google has kept speakable in beta since 2018, limited to publishers registered in Google News, serving US English Google Home devices. For everyone else it does nothing. We list it so you stop seeing it on checklists and wondering what you missed.
Recipe — not for you
Ingredients, cook times, instructions. It is the most mature schema type on the web and it is completely irrelevant to B2B software. Listed for completeness. If you are a food brand, it is your most valuable type by a distance.
How to actually ship FAQ schema, start to finish
|
Pick the questions from real demand, not your imagination Open your Search Console query report, your sales call notes, and your support tickets. Take the questions buyers actually ask, in their words. A question you invented to fill a template is a question nobody searches for. Five real questions beat fifteen invented ones. |
|
Write the answer on the visible page first The markup must match content the visitor can see. This is a hard rule, not a style preference. Google requires the question and answer to be present on the page. Markup describing content a visitor cannot see is a violation, and engines can ignore all of your markup when they catch it. Write the FAQ section into the page, then describe it. |
|
Answer in under 60 words, and front-load it Direct answer in the first sentence. Then the caveat, the nuance, the “it depends”. An engine that has to read three sentences before it finds your answer will often take somebody else’s. |
|
Write the JSON-LD Use the FAQPage block above as a template. One Question object per question, each with exactly one acceptedAnswer. Plain text in the answer, or simple HTML. No marketing copy, no stuffed links. |
|
Put it in the head of that page, not sitewide FAQ schema is page-specific. It describes the questions on this page. Dropping one block sitewide via a template is the most common implementation error, and it makes every page claim to answer questions it does not answer. |
|
Validate before you ship Run the page through the Schema Markup Validator at validator.schema.org, which checks your JSON-LD against schema.org. Then run Google’s Rich Results Test, which checks whether Google can parse it. Both are free. Fix every error. Warnings are usually optional properties and you can leave them. |
|
Confirm a crawler can actually see it After deploy, use URL Inspection in Search Console and read the rendered HTML. If your JSON-LD is injected by client-side JavaScript, there is a real chance no crawler ever sees it. Server-side render it, or put it in the raw HTML. |
|
Expect comprehension, not a rich result Google removed FAQ rich results from Search on 7 May 2026, after restricting them to government and health sites back in August 2023. The dropdowns are not coming back. What the markup still does is tell a machine, without ambiguity, that this string is a question and that string is its answer. That is the point now. |
If your CMS does it for you: most modern stacks have an FAQ block that emits the schema automatically. Use it, then validate the output anyway. Plugins routinely emit markup for questions that are not on the page, which is exactly the violation in step two.
Family 2: trust and authority
These are the ones that move the needle, and the reason is simple. They are how an engine works out that you are a real, identifiable, corroborated entity rather than a string that appears on a website.
Organization — who your company is
The foundational block. Ship this before anything else on the list. Name, URL, logo, description, and the sameAs array that connects you to every other place the web already knows you.
sameAs — the property that does the most work
Not a type. A property, and the highest-leverage line of code in this issue. sameAs tells an engine that the Acme on your website, the Acme on LinkedIn, the Acme on Crunchbase and the Acme in Wikidata are one entity. Without it an engine has to guess, and it will sometimes guess wrong, or merge you with a similarly named company.
Point it at Wikidata first if you have an entry. Then LinkedIn, Crunchbase, G2, and your official social profiles. Only link to profiles you control or that genuinely describe you. Ambiguity here is worse than silence.
Person — who your author is
Establishes an author, executive or subject-matter expert as an entity. Expert authorship scored 4.0 to 4.6 across engines in the NP Digital study, far above structured data itself. Give every author a sameAs too.
ProfilePage — the page that IS a person
Use it on the author bio page itself, wrapping the Person. It tells an engine this page is not an article about a person, it is that person’s profile. A small distinction, and it is how author entities get built.
Family 3: content and context
Cheap, structural, and mostly a one-time job in your page template. These do not win citations on their own. They stop an engine from misreading what a page is.
Article / BlogPosting — editorial content
Identifies long-form editorial and attaches an author entity and a date to it. The date does more work than people realise, because engines carry a strong recency bias.
WebPage and about — what the page is actually on
The about property pins a page to a topic, ideally one that already exists as an entity in Wikidata. It is how you keep your topical taxonomy clean instead of hoping an engine infers it from your prose.
BreadcrumbList — where this page sits
Site hierarchy, made explicit. Cheap, a one-time template change, and it helps a crawler understand that your comparison page is a child of your product section rather than a stray.
Family 4: transactional and local
Only relevant if you sell the way these types describe. Most B2B software does not, and a Product block on a page with no price is noise. Included because the question always comes up.
Product and Offer — price and availability
Surfaces price, availability and variants when a buyer asks an engine for a recommendation with a budget attached. If your pricing page says “contact sales”, this type has very little to say on your behalf.
Review and AggregateRating — scores and sentiment
Feeds ratings into the comparison tables engines build. One rule, and it matters. Mark up reviews that live on your site. Do not take your G2 score, put it on your own page as your own AggregateRating, and present it as native. That is self-serving review markup, and Google has explicit guidance against it.
LocalBusiness — hours, address, service area
For “near me” questions. Hours, physical address, services offered. If there is no premises a customer can walk into, skip it.
Service — what you do, and for whom
The one commercial type that earns its place in B2B, especially for agencies and services businesses. It describes the offering, the audience, and the area served.
What schema will not do for you
Three caveats, because a checklist that promises everything teaches you nothing.
It will not win a citation on its own. Structured data came last of the seven trust signals NP Digital tested. Engines cite clean question-and-answer content whether the markup is there or not. The active ingredient is the content.
Google says you do not need it for AI Overviews. Their own guidance states that no special structured data is required for AI features. Take them at their word, and treat schema as comprehension insurance rather than a lever.
It cannot describe content that is not there. Markup must match visible page content. Describing things a visitor cannot see is a violation, and it is the fastest way to get all of your markup ignored.




