schemapilot.
Blog
Implementation

Schema Markup for HubSpot: Adding Structured Data to Your Site

·8 min read

HubSpot CMS is a go-to platform for marketing teams. It handles landing pages, blog posts, website pages, and lead capture without needing a separate tech stack. But when it comes to structured data, HubSpot leaves a significant gap. Out of the box, it provides almost no JSON-LD schema markup — which means your HubSpot site is likely missing out on rich results in Google.

Rich results drive measurably higher click-through rates. FAQ dropdowns, star ratings, breadcrumb trails, event listings, and product details all make your search listings more prominent and more clickable. Adding schema markup to HubSpot is one of the highest-impact SEO changes you can make, and there are several ways to do it.

This guide covers every practical method for implementing hubspot schema markup, from fully automated solutions to custom HubL code.

What HubSpot includes by default

Very little. HubSpot CMS generates standard HTML meta tags — title, description, Open Graph tags for social sharing, and canonical URLs. It also outputs some basic metadata for blog posts like author and publish date in the HTML.

But HubSpot does not generate JSON-LD structured data for your pages. There is no built-in Organization schema for your homepage, no Article schema for your blog posts, no FAQPage schema for your knowledge base articles, and no BreadcrumbList schema for navigation. Your HubSpot site renders clean HTML, but search engines get no structured data signals beyond what they can infer from the raw page content.

This means every HubSpot site starts at zero for schema markup. You need to add it yourself.

Google has confirmed that schema markup is not a direct ranking factor. However, the rich results it enables consistently drive higher click-through rates — often 20-30% above standard listings. For HubSpot sites competing in crowded markets, that CTR advantage compounds over time.

Option 1: Schema Pilot (automated, works across all HubSpot pages)

If you want schema markup hubspot-wide without building custom modules or writing HubL code, Schema Pilot is the fastest approach. It works with HubSpot CMS out of the box and requires no module development.

Here is how it works:

  1. Sign up and add your HubSpot site — enter your domain, and Schema Pilot crawls your sitemap to discover all your pages automatically.
  2. AI scans every page — each page is analyzed by AI to determine the correct schema types. Your homepage gets Organization schema. Blog posts get Article schema. Your pricing page gets the appropriate SoftwareApplication or Service schema. There is no per-page configuration.
  3. Deploy with one embed script — copy a single <script> tag and add it to your HubSpot site via Settings > Website > Pages > Site Header HTML. This injects the script across every page on your HubSpot site — landing pages, blog posts, and website pages.
  4. Auto-rescanning keeps everything current — when you publish new HubSpot pages or update existing content, Schema Pilot detects the changes and regenerates the structured data automatically. No manual updates needed.

The embed script is under 1KB and loads asynchronously. It will not affect your HubSpot page speed scores.

The free plan covers 1 site and 30 page scans — enough to test hubspot structured data on a smaller site or to validate it on your most important pages before upgrading.

Stop writing schema markup by hand

Schema Pilot scans your pages, generates valid JSON-LD, and serves it automatically. No code changes required.

Option 2: HubSpot custom modules

HubSpot's Design Manager lets you build custom modules that marketers can drop onto any page. You can create a schema markup module that outputs JSON-LD based on fields that content editors fill in.

Building a schema module in Design Manager

  1. Go to Marketing > Files and Templates > Design Tools (or the Design Manager).
  2. Create a new Custom Module.
  3. Add fields that map to the schema properties you need. For an Organization schema module, you would add text fields for company name, URL, logo URL, and a repeater field for social media links.
  4. In the module's HTML + HubL template, output the JSON-LD using those field values.

Here is an example module template for Organization schema:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "{{ module.company_name }}",
  "url": "{{ module.company_url }}",
  "logo": "{{ module.logo_url }}"
  {% if module.social_links %}
  ,"sameAs": [
    {% for link in module.social_links %}
    "{{ link.url }}"{% if not loop.last %},{% endif %}
    {% endfor %}
  ]
  {% endif %}
}
</script>

Once the module is built, marketers can add it to any HubSpot page through the drag-and-drop editor. The module renders as invisible output (just the script tag), so it does not affect the page layout.

Pros and cons of the module approach

Pros: Gives marketers control over schema fields without touching code. Reusable across pages. Fits naturally into HubSpot's content editing workflow.

Cons: Requires someone to build the module initially. Every new schema type needs a new module. Content editors must remember to add the module and fill in the fields correctly on each page. This does not scale well for sites with hundreds of pages.

Be careful with HubSpot modules that output schema markup — if you add the same module to a page twice, you will get duplicate structured data. Google may ignore or penalize duplicate schemas. Make sure your team knows to use the module only once per page.

Option 3: Site header HTML injection

HubSpot lets you inject code into the <head> section of your pages at two levels: site-wide and per-page. This is the simplest way to add hubspot structured data without building modules.

Site-wide schema (Organization, WebSite)

For schemas that apply to every page on your site — like Organization and WebSite — use the global site header:

  1. Go to Settings > Website > Pages.
  2. Find the Site Header HTML field.
  3. Paste your JSON-LD script.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://yoursite.com",
  "logo": "https://yoursite.com/logo.png",
  "sameAs": [
    "https://twitter.com/yourcompany",
    "https://linkedin.com/company/yourcompany"
  ]
}
</script>

This approach is fast and requires no HubSpot developer knowledge. The downside is that the same schema appears on every page, which is fine for Organization and WebSite but not appropriate for page-specific types like Article or FAQPage.

Per-page schema

For page-specific hubspot schema, you can add JSON-LD to an individual page's head HTML:

  1. Open the page in the HubSpot editor.
  2. Go to Settings (the gear icon).
  3. Scroll to Advanced Options > Head HTML.
  4. Paste the JSON-LD for that specific page.

This works well for a handful of important pages — your homepage, key landing pages, or cornerstone content. But it is completely manual. If you have 50 blog posts that each need Article schema, you would need to add and maintain JSON-LD on all 50 pages individually.

Free Organization Schema Generator

Schools, NGOs, corporations, and similar entities. Generate valid JSON-LD in seconds.

Option 4: HubSpot Marketplace modules

The HubSpot Asset Marketplace includes some third-party modules related to structured data. A few marketplace providers offer pre-built schema markup modules that you can install and configure without building anything in Design Manager.

When evaluating marketplace options, check for:

  • Schema types supported — most marketplace modules only cover 3-5 basic types
  • JSON-LD output — make sure the module outputs JSON-LD, not Microdata
  • Customization — can you modify the fields, or are they locked to the module author's choices?
  • Update frequency — schema.org evolves, and modules that have not been updated in over a year may produce outdated markup

Marketplace modules can be a reasonable middle ground between building custom modules from scratch and using a fully automated tool. However, they typically give you less control than a custom module and less coverage than an automated solution like Schema Pilot.

Essential schema types for HubSpot sites

Not every schema type is relevant to every HubSpot site. Here are the types that matter most based on common HubSpot use cases.

Every HubSpot site

  • Organization — on the homepage, identifies your company to search engines
  • WebSite — enables the sitelinks search box in Google
  • BreadcrumbList — replaces messy URLs with clean breadcrumb trails in search results

HubSpot blog

  • Article — on every blog post, enables Top Stories eligibility and article rich results
  • FAQPage — on posts with FAQ sections, can significantly expand your SERP real estate

SaaS companies on HubSpot

Knowledge base and support content

  • FAQPage — for FAQ and knowledge base articles
  • HowTo — for step-by-step tutorial content

Other common types

  • Event — for webinar and event landing pages
  • VideoObject — for pages with embedded video content
  • LocalBusiness — if you have a physical location
  • Person — for team or author pages

Start with Organization and WebSite schema site-wide, then add Article schema to your blog. These three types give you the most coverage for the least effort on a HubSpot site.

Dynamic schema with HubL

One of HubSpot's strengths is HubL, its templating language. If you are comfortable editing HubSpot templates, you can use HubL variables to generate schema markup dynamically — especially useful for blog posts where the title, author, and dates change on every page.

Article schema using HubL variables

Add this to your blog post template (in the <head> section or via a module):

{% if is_listing_page == false %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "{{ content.title | escape }}",
  "description": "{{ content.meta_description | escape }}",
  "url": "{{ content.absolute_url }}",
  "datePublished": "{{ content.publish_date_localized }}",
  "dateModified": "{{ content.updated | datetimeformat('%Y-%m-%dT%H:%M:%S%z') }}",
  "author": {
    "@type": "Person",
    "name": "{{ content.blog_author.display_name | escape }}"
  }
  {% if content.featured_image %}
  ,"image": "{{ content.featured_image }}"
  {% endif %}
}
</script>
{% endif %}

This pulls the blog post title, meta description, publish date, author name, and featured image directly from HubSpot's content objects. Every blog post automatically gets unique, accurate Article schema without anyone touching per-page settings.

WebSite schema with search action

For your main site template, you can add WebSite schema that enables the Google sitelinks search box:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "{{ site_settings.company_name | escape }}",
  "url": "{{ site_settings.company_url }}",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "{{ site_settings.company_url }}/search?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}
</script>

HubL variables like content.title, content.blog_author, and content.publish_date_localized are only available in blog templates. If you use these in a website page template, they will output empty values. Always wrap blog-specific schema in a {% if is_listing_page == false %} check.

The dynamic HubL approach is powerful but requires access to HubSpot's Design Manager and knowledge of HubL syntax. For teams without a HubSpot developer, the site header injection or an automated tool is a more practical path to implementing hubspot schema across your site.

Testing and validating your HubSpot schema

After adding schema markup to HubSpot, always validate it before assuming it works. Two tools are essential.

Google Rich Results Test

Google's Rich Results Test is the primary validation tool. Paste your HubSpot page URL, and it shows which rich result types are detected, along with any errors or warnings. If your schema passes this test, Google can use it for rich results.

Schema Markup Validator

The Schema Markup Validator validates against the full Schema.org vocabulary. It catches missing recommended properties and structural issues that the Rich Results Test may overlook. Use it as a second check after the Rich Results Test.

What to test

  • Test multiple page types — check your homepage, a blog post, a landing page, and any other distinct templates. Schema that works on one template may be missing from another.
  • Test after every HubSpot template change — updating your blog template or switching themes can silently break schema markup.
  • Check for duplicates — if you are combining site header injection with custom modules or HubL template code, you may be outputting the same schema twice. The Rich Results Test will flag this.

Free Article Schema Generator

News articles and blog content. Generate valid JSON-LD in seconds.

Adding schema markup to HubSpot: the right approach for your team

Here is how to decide which method fits your situation:

  • Want zero maintenance and full coverage — use Schema Pilot. Add the embed script to your HubSpot site header once, and structured data is handled automatically across all your pages. No module building, no HubL, no per-page work.
  • Have a HubSpot developer on your team — build custom modules for the schema types you need most, and use HubL variables in blog templates for dynamic Article schema. This gives you control but requires ongoing maintenance.
  • Just need basics, fast — paste Organization and WebSite JSON-LD into your site header HTML. It takes five minutes and covers the foundation.
  • Managing multiple HubSpot sites (agency) — an automated tool saves significant time versus building and maintaining custom modules across client portals.

Most HubSpot sites have zero structured data. Adding schema markup hubspot-wide — by any method — puts you ahead of the majority of your competitors in search. The sooner you implement it, the sooner you start earning rich results.

Related posts

Stop leaving rich results on the table

Every page without schema markup is a missed opportunity for clicks. Schema Pilot handles the entire process — scanning, generating, validating, and serving structured data — so you don't have to.