schema
Skill0 starsChanged 2 days agoMITView on GitHub
Lint and plan structured data (JSON-LD) for a page: checks Google's required properties, flags Software application markup without aggregateRating or review, notes that FAQ rich results ended on 2026-05-07 and that HowTo is not in Google's gallery, picks types per page type, shows a valid @graph example, and ends with the Rich Results Test. Uses the schema and schema-gen commands. Use when the user says 'structured data', 'schema markup', 'JSON-LD', 'rich results', 'add schema', 'FAQ schema', 'SoftwareApplication schema', 'why no stars in Google'.
36 other projects use a version of this.
Adopted by
Most recently taken up by
- vercel/evetheir own version, first seen Nov 15, 2026
- vercel-labs/marketing-team-eve-templatetheir own version, first seen Nov 12, 2026
- vishal1610kamal/second-braintheir own version, first seen Nov 8, 2026
- pixelswithbliss/claude-skillstheir own version, first seen Nov 1, 2026
- ZoolCoder/findabletheir own version, first seen Nov 1, 2026
- GAPZ787/claude-skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use popups, paywalls and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CesarjoquinSkillpopups
When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also use when the user mentions "exit intent," "popup conversions," "modal optimization," "lead capture popup," "email popup," "announcement banner," "overlay," "collect emails with a popup," "exit popup," "scroll trigger," "sticky bar," or "notification bar." Use this for any overlay or interrupt-style conversion element. For forms outside of popups, see cro. For general page conversion optimization, see cro.
Also in 8 projects that use this
CesarjoquinSkillpaywalls
When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates. Also use when the user mentions "paywall," "upgrade screen," "upgrade modal," "upsell," "feature gate," "convert free to paid," "freemium conversion," "trial expiration screen," "limit reached screen," "plan upgrade prompt," "in-app pricing," "free users won't upgrade," "trial to paid conversion," or "how do I get users to pay." Use this for any in-product moment where you're asking users to upgrade. Distinct from public pricing pages (see cro) — this focuses on in-product upgrade moments where the user has already experienced value. For pricing decisions, see pricing.
Also in 8 projects that use this
tdiminoSkillsms
Send, read, listen, respond, and manage SMS conversations via Telnyx and Twilio. Supports 8 phone numbers across both providers with auto-detection, conversation threading, MMS, real-time inbound listening, background watcher, batch reply processor, and soul-aware auto-reply. 10 Python scripts for SMS operations.
Also in 8 projects that use this
timruebenachSkilldirectory-submissions
When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for backlinks, domain rating, and discovery. Also use when the user mentions "directory submissions," "submit to directories," "backlinks from directories," "list my product," "submit to Product Hunt," "BetaList," "TAAFT," "Futurepedia," "G2 listing," "Capterra listing," "AlternativeTo," "SaaSHub," "AI directories," "MCP registry," "agent directory," "dofollow backlinks," "launch directories," or "directory tracker." Use this whenever someone is planning the directory layer of a product launch or an ongoing backlink campaign. For the broader launch moment, see launch-strategy. For programmatic SEO pages that should live behind these backlinks, see programmatic-seo. For AI citation optimization, see ai-seo.
Also in 8 projects that use this
roerohanSkillprospecting
When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses. Also use when the user mentions "prospecting," "build a prospect list," "find prospects," "find leads," "lead gen list," "find SaaS companies that," "find B2B companies," "find local businesses," "ICP-fit accounts," "who should we go after," "outbound list," "target account list," "find clients near me," "businesses without websites," "prospect research," "qualified leads," "find my first customers," "early adopters," "design partners," "beta users," or "who has this problem." Use this for the list-building and qualification phase. For writing the outbound copy after the list is built, see cold-email. For deep competitive research on specific accounts, see competitor-profiling.
Also in 8 projects that use this
coreyhaines31Skillmarketing-council
When the user wants several expert takes on a marketing decision, or asks what a famous marketer would say about it: a simulated board (Seth Godin, David Ogilvy, April Dunford, Byron Sharp, and more), each grounded in their documented frameworks, where they disagree, and a recommendation. To execute, hand off to the relevant skill.
Also in 5 projects that use this
- +6 more from Cesarjoquin
Other versions36 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 36
- coreyhaines31/marketingskills★ 61ksame name
- vercel/eve★ 5.9ksame name
- vercel-labs/marketing-team-eve-template★ 456same name
- Cesarjoquin/Marketing-Skills★ 190same name
- simota/agent-skills★ 96same name
- open-fox/agents★ 55same name
- rainday/smart-blog-skills★ 35same name
- SZcalligrapher/slash-skills-subscription★ 32same name
- TommyBez/skillsboard★ 10same name
- scayver/marketing-skills★ 8same name
26 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- agent-readySkill
- ai-citationsSkill
- ai-crawlersSkill
- ai-logsSkill
- ai-trackerSkill
- backlinksSkill
- cannibalizationSkill
- canonicalsSkill
- citabilitySkill
- comparison-pagesSkill
- competitorsSkill
- content-briefSkill
- content-decaySkill
- content-qualitySkill
- core-web-vitalsSkill
- ecommerce-seoSkill
- ga4-aiSkill
- ghost-publishSkill
- gsc-bingSkill
- hreflangSkill
- imagesSkill
- indexingSkill
- internal-linksSkill
- llms-txtSkill
- local-seoSkill
- measure-rollbackSkill
- onpageSkill
- platformsSkill
- pseo-quality-gateSkill
- quick-winsSkill
- redirects-migrationSkill
- seo-planSkill
- seo-reportSkill
- setupSkill
- site-architectureSkill
- sitemapsSkill
- static-site-publishSkill
- sxoSkill
- tech-auditSkill
- titles-metaSkill
- topic-clustersSkill
- weekly-checkSkill
- wordpress-publishSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 3 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 32 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 48
Write JSON-LD in one @graph per page, linked by @id.
- Very specific: line 71
Put Organization and WebSite on the pages where they belong (homepage or all pages, one source), not as multiple copies.
- Distinctive: line 86
Never invent ratings, review counts or prices.
- Distinctive: line 87
Do not add FAQPage or HowTo markup expecting rich results.
- Distinctive: line 88
Do not mark up content that is not visible on the page.
“Common” is measured: kept by at least 6 in 10 of the 32 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Structured data: only what Google documents, only what is on the page
Google says structured data does not guarantee a rich result, and the markup must describe content visible on the page. The skill lints what is on a live page, recommends types per page type from Google's search gallery, and sends the final check to Google's Rich Results Test.
Inputs
- The URL of a live page (or the user's draft JSON-LD to paste in a test page they own).
- Page type: article, product or software page, comparison, homepage, tool.
Steps
- Lint:
Output:npx sitetiller schema https://example.com/guides/invoice-template --jsonurl,status,types(type to count) andfindings(levelerror, warning or info;type;message;doclink). Errors are missing properties that Google documents as required for the rich result. Warnings are recommended properties or duplicated entities. Info lines mark features that no longer produce rich results. - Interpret with the table.
| Finding | Meaning | Action |
| Invalid JSON-LD | The block does not parse; Google cannot read it | Fix syntax (trailing commas, unescaped quotes) |
SoftwareApplication missing offers.price | Google requires name and offers.price (use 0 for free; add priceCurrency for paid) | Add the price shown on the page |
SoftwareApplication missing aggregateRating or review | Google says one of the two must be included | Add genuine, visible user ratings, or do not use this type for rich results (see rules below) |
| Product missing review, aggregateRating or offers | Google's product snippet needs one of them in addition to name | Add from real data on the page |
| Article recommended properties | Google lists no required properties for Article, only recommended ones | Add headline, image, datePublished, dateModified, author where true |
| FAQPage found | Google's FAQ rich results stopped appearing on 2026-05-07 | Keep the visible Q&A for readers; markup earns no Google rich result. Remove or leave, but do not add it for Google |
| HowTo found | Not in Google's structured data gallery | Same as above; do not add for Google |
| More than one Organization, WebSite, Article, Product or SoftwareApplication | Theme and plugin both output it | Keep one source, remove the duplicate |
- Choose types by page type. Use a type only if the page really is that thing and the data is visible:
Page type Use Notes Blog post, guide Article(orBlogPosting),BreadcrumbListArticle has no required properties; add author (name only in author.name, plusurlorsameAs),datePublished,dateModifiedwith timezoneHomepage / about Organization,WebSiteOrganization has no required properties; useful ones: name,url,logo,sameAs,contactPoint.WebSitecan inform the site nameSaaS product page SoftwareApplication(orWebApplication)Requires name,offers.price, andaggregateRatingorreview. Only mark up ratings from real users that are visible on the pagePhysical or digital product with price ProductSee Google's product snippet doc Any page in a hierarchy BreadcrumbListAt least two ListItems, each withposition,name,item(last item may omititem); trail should reflect a typical user pathVideo page VideoObjectOnly for video actually on the page Comparison / alternatives pages Article+BreadcrumbList; do not useRevieworAggregateRatingfor your own editorial scoring (seecomparison-pages)FAQ, HowTo none for Google rich results - Write JSON-LD in one
@graphper page, linked by@id. Example for a guide page (replace every value with real, visible data):
To start from the user's facts instead of hand-writing, generate and lint in one step:<script type="application/ld+json"> { "@context": "https://schema.org", "@graph": [ { "@type": "Organization", "@id": "https://example.com/#org", "name": "Example Inc.", "url": "https://example.com/", "logo": "https://example.com/logo.png", "sameAs": ["https://www.linkedin.com/company/example"] }, { "@type": "WebSite", "@id": "https://example.com/#site", "url": "https://example.com/", "name": "Example", "publisher": { "@id": "https://example.com/#org" } }, { "@type": "BreadcrumbList", "@id": "https://example.com/guides/invoice-template#crumbs", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Guides", "item": "https://example.com/guides" }, { "@type": "ListItem", "position": 2, "name": "Invoice template" } ] }, { "@type": "Article", "@id": "https://example.com/guides/invoice-template#article", "headline": "Invoice template with payment terms", "image": "https://example.com/img/invoice.png", "datePublished": "2026-10-01T09:00:00+00:00", "dateModified": "2026-11-05T09:00:00+00:00", "author": { "@type": "Person", "name": "Jane Doe", "url": "https://example.com/about/jane" }, "publisher": { "@id": "https://example.com/#org" }, "mainEntityOfPage": "https://example.com/guides/invoice-template" } ] } </script>
Types: organization, website, article, product, software, localbusiness, breadcrumb, event, person. Empty inputs are left out, never filled with placeholders; the lint under the output lists what is still required or recommended. Ratings and reviews are never generated:npx sitetiller schema-gen article --headline "Invoice template with payment terms" --url https://example.com/guides/invoice-template --datePublished 2026-10-01T09:00:00+00:00 --author "Jane Doe" --publisher "Example Inc." --image https://example.com/img/invoice.png npx sitetiller schema-gen software --name "Example" --price 0 --currency USD --category BusinessApplication --os Web npx sitetiller schema-gen breadcrumb --items "Guides|https://example.com/guides,Invoice template|https://example.com/guides/invoice-template"--ratingand similar inputs are ignored with a note, because they must come from real reviews visible on the page. PutOrganizationandWebSiteon the pages where they belong (homepage or all pages, one source), not as multiple copies. - Re-run the lint after editing. Then run Google's Rich Results Test on the URL (https://search.google.com/test/rich-results) and look at Search Console enhancement reports after Google recrawls. The lint is not a replacement for the test: it checks only the properties listed in this skill, not every Google rule.
Rules for eligibility
- Markup must match visible content; reviews and ratings must be visible to users.
- Ratings must come from users. Do not write reviews or ratings of your own product to mark up, and do not aggregate reviews from other sites.
- Guideline violations can lead to a manual action, after which the structured data is ignored.
Output to the user
- Types found and findings by level, each quoting the message.
- Recommended types for this page type and why.
- The corrected JSON-LD, ready to paste, with the properties filled from visible page content only and
TODOmarkers where data is missing. - The Rich Results Test link and what to check afterwards.
Guardrails
- Never invent ratings, review counts or prices. If a required value is not on the page, say the type cannot qualify.
- Do not add FAQPage or HowTo markup expecting rich results.
- Do not mark up content that is not visible on the page.
- The lint covers a short list of types (Article, SoftwareApplication, Product, Event, LocalBusiness); for other types use Google's documentation and the Rich Results Test.
- Edit only pages the user owns.
References
examples/schema.json,examples/schema-gen.json: real output of this skill's command on sitetiller.com (2026-11-13), seeexamples/README.md.references/sources.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

