Why Webflow Designers need this
Webflow gives you a clean canvas and no schema panel at all. When a client asks for structured data, the only route is custom code, pasted by hand into Site settings or a page's settings, and one missing comma in hand-typed JSON quietly breaks the whole block. Meanwhile the default webflow.io address can sit in Google next to the live domain, so a sloppy block pasted into a staging build can end up describing a site you never meant to publish. The Schema (JSON-LD) Generator takes the typing out of the first step. You choose Organization, WebSite, Article or LocalBusiness, fill in plain fields such as name, URL, logo and description, and copy a script block with correct nesting. For a Webflow designer handing over a brand site, that covers the sitewide pieces in minutes. What it does not do is read your CMS: the output is static text built from what you typed, so a blog template needs extra care before every post shares one headline. Below: where to paste each type, how to handle CMS templates, and what to check after publishing.
Webflow Designers specific guidance
Where each block goes in Webflow
Organization and WebSite describe the whole brand, so they belong in Site settings, under Custom code, in the Head code box. Paste the block once, publish, and every page carries it. LocalBusiness fits a single page such as Contact: open the Pages panel, hover that page, click the gear icon, and paste into Custom code, Inside head tag. A quick test for the next ten minutes: generate the Organization block with the logo URL you actually host in Assets, then open that URL in a browser tab. The generator only writes what you type, so it cannot notice a logo link that returns an error. Pasting also proves nothing about Google: a tidy block is not the same as a crawled page or a rich result.
CMS templates need a manual step
Webflow's schema gap bites hardest on Collection pages. The generator produces fixed text, so an Article block pasted into a blog template would repeat the same name, URL and image on all 40 posts. Generate the block once to get the structure, then add an Embed element to the Collection page, paste the code, and use the Add Field option in the embed editor to replace the name, URL and image values with the matching CMS fields. Add anything the form does not cover, such as dates or an author, by editing the text. Afterwards open two different posts on the published site and compare the headline in each. This does not prove the binding is right on every item: an empty CMS field leaves an empty value in the JSON, and the tool never sees your collection.
Test the published page, not the Designer
Publish, open the live domain, view the page source and search for application/ld+json. If the block is missing, it went into the wrong box or the site was not published to that domain. Then run the page through the Schema Checker and Google's Rich Results Test, which catch problems the generator does not look for, because it does not validate against Google's requirements. Keep the webflow.io address out of the block: use the final custom-domain URLs so the markup matches the pages you want indexed. A clean test shows the syntax parses and required properties are present. It does not mean Google will show a rich result.
What this tool does not tell you
- It does not validate against Google's requirements, so run the Schema Checker or Rich Results Test after pasting.
- It does not read your Webflow CMS, your published pages or your Google Business Profile; it only uses what you type.
- It does not write geo coordinates, reviews, ratings or price ranges, and offers no subtypes such as Dentist or Restaurant; edit the type by hand.
Example scenarios
1. Sitewide brand block for a studio site
- Situation
- Illustrative example: a freelancer finishes a 12-page portfolio build and the client wants the logo and name understood by Google. Nothing in Webflow offers schema, so the freelancer needs one block for every page.
- Input
- Type: Organization. Name: Northfield Studio. URL:
https://www.northfield-studio.example.Logo:https://www.northfield-studio.example/images/logo.png.Description: Brand and web design studio. - Reading the result
- The result is a single script block with context, type, name, url, logo and description. Paste it into Site settings, Custom code, Head code and publish. If the logo field was left empty, the key is simply omitted, so check the preview before copying.
2. Contact page for a local client
- Situation
- Illustrative example: a designer builds a one-page-per-service site for a physiotherapy clinic. The client has one location and wants the address and hours stated consistently with the contact page.
- Input
- Type: LocalBusiness. Name: Riverside Physio. URL:
https://www.riverside-physio.example/contact.Phone: +1 555 0100. Street: 14 Mill Lane. City: Dunmore. Postal code: 10001. Opening hours, one per line: Mo-Fr 08:00-18:00 and Sa 09:00-13:00. - Reading the result
- Expect a LocalBusiness object with a nested PostalAddress and openingHours. Paste it into the Contact page's own Custom code, Inside head tag. Compare every value with the Google Business Profile yourself, because the tool only uses what you typed. If the clinic is a physiotherapist subtype, edit the type value by hand afterwards.
3. Article starter for a blog template
- Situation
- Illustrative example: an agency migrates a blog of 40 posts into a Webflow CMS collection with URLs like /blog/post-slug. The team wants Article markup on each post.
- Input
- Type: Article. Name: Sample post headline. URL:
https://www.agency-site.example/blog/sample-post.Image:https://www.agency-site.example/images/sample-post.webp. - Reading the result
- The block is valid but static: the one Name field fills both name and headline, and there is no author or date, because the form has no such fields. Paste it into an Embed on the Collection page, swap name, headline, URL and image for CMS fields, and type in author and datePublished bound to the matching fields. If you skip that step, all 40 posts would announce the same sample headline, which is the first thing to catch when you view source on two different posts.
Common mistakes
- Pasting a CMS block unchanged. An Article block pasted into a Collection page template repeats the same values on every item. Insert CMS fields in an Embed instead.
- Using webflow.io URLs in the markup. Staging addresses copied into the url or logo fields describe pages you do not want indexed. Use the final custom-domain URLs before you copy the block.
- Forgetting to publish. Custom code saved in Site settings or page settings only appears after a publish. View source on the live domain, not the Designer, to confirm.
- Duplicating the same type twice. Putting Organization in both Head code and a page's custom code leaves two competing blocks. Keep sitewide types in one place.
Frequently asked questions
Does Webflow have built-in schema markup?
Webflow has no dedicated schema panel, so structured data goes in as custom code. You can paste a JSON-LD script into Site settings, Custom code for sitewide types, or into a page's own custom code settings. On Collection pages you can use an Embed element and insert CMS fields into the code. The Schema (JSON-LD) Generator writes the block for you, but you still publish it yourself and test the live page afterwards, because nothing in Webflow checks the JSON for mistakes.
Where do I paste JSON-LD in Webflow?
Sitewide Organization and WebSite blocks go in Site settings, Custom code, Head code. Page-specific blocks go in the Pages panel: click the gear icon beside the page, then Custom code, Inside head tag. Both need a publish before they show up on the live site. Avoid putting the same Organization block in both places, since two copies of one entity add confusion and make later edits easy to miss when the client changes a logo or name.
Can I generate schema for Webflow CMS items?
Partly. The generator builds one static block from the values you type, so it cannot loop through a collection. Use it to get the structure right, paste it into an Embed on the Collection page, and swap the values for CMS fields with Add Field. Then open two different items on the live site and check that the name and URL differ. On large collections, sample at least five items, since a single empty field is easy to miss.
Will schema fix my webflow.io subdomain being indexed?
No. Structured data describes a page; it does not control whether a page is crawled or indexed. Duplicate content from the staging address is a separate job, and blocking it in robots.txt stops crawling but does not remove pages already in Google. The generator only helps with markup on your live pages, so use the Robots Tester to see what is blocked, and keep every URL inside your JSON-LD pointed at the custom domain.
Reference: SiteGuru's guide to SEO for Webflow explains that Webflow has no built-in feature for schema markup, so structured data needs custom code and a more hands-on setup.