Structured Data for SEO

My idea is to grant users the ability to set-up "structured data" on blog posts to help with SEO.


Structured data is a system of pairing a name with a value that helps search engines categorize and index your content. Microdata is one form of structured data that works with HTML5. is a project that provides a particular set of agreed-upon definitions for microdata tags.


Structured data seems to matter more often now with search engines and help boost SEO. 

HubSpot updates
Structured Data for SEOHubSpot Product Team
changed to: In Planning

51 Replies
Regular Contributor

 I am adding an HTML module in the header with an open span, and a close span in the footer. If there is a better way to do this, or if the markup does not need to wrap the page content I am open to just placing it all in one module. This will cover all templates using the header global module including blog templates. So you will need the ability to edit your templates in the design manager.


Here is the code I have put together thus far. If anyone has additional tags they can suggest please do.



<span itemscope itemtype="">
<link itemprop="url" href="{{ company_domain }}" />
<link itemprop="logo" href="{{ site_settings.logo_src }}" />
<link itemprop="image" href="{{ site_settings.logo_src }}" />
<meta itemprop="name" content="{{ company_name }}">
<meta itemprop="description" content="{{ content.meta_description }}"/>
<span itemprop="address" itemscope itemtype="">
<meta itemprop="streetAddress" content="{{ site_settings.company_street_address_1 }} {{ site_settings.company_street_address_2 }}">
<meta itemprop="addressLocality" content="{{ site_settings.company_city }}">
<meta itemprop="addressRegion" content="{{ site_settings.company_state }}">
<meta itemprop="addressCountry" content="{{ site_settings.company_country }}">
<meta itemprop="postalCode" content="{{ site_settings.company_zip }}"></span>

<span itemprop="areaServed" itemscope itemtype="">
<span itemprop="geoMidpoint" itemscope itemtype="">
<meta itemprop="latitude" content="Add Latitude Here" />
<meta itemprop="longitude" content="Add Longitude Here" /></span>
<meta itemprop="geoRadius" content="150 km" />
<meta itemprop="areaServed" content="Add Countries or Region Names Here"> <meta itemprop="telephone" content="{{ site_settings.company_phone }}"> <meta itemprop="email" content="{{ site_settings.custom_reply_to_emails }}"> <link itemprop="sameAs" href=""> <link itemprop="sameAs" href=""> <link itemprop="sameAs" href=""> <meta itemprop="makesOffer" content="What You Offer">


This is all company-wide data. I have not yet set up article specific tags just for blog posts yet. But I expect it will just be adding itemscope itemtype="" to the div wrapping the template and tags like  itemprop="headline" to the H1 and so on.



Regular Contributor

@JonSasala1, that's is awesome! Thank you so much for sharing. I'm going to work on that tomorrow.

Clemente Regular Contributor | Gold Partner
Regular Contributor | Gold Partner

Very GOOD idea.

Top Contributor

I believe we have a solution all HubSpot users can leverage. This would still be nice to control in content settings or on page settings. In the meantime, this should have you covered @Crystal_Hopper 


Schema Template for HubSpot Sites

We did the work of adding structured data to our HubSpot websites. With the help of HubL tokens that display values unique to each HubSpot portal, this code can be shared among by all HubSpot users. Copy the code here.

Regular Contributor

Thank you @Jon_Sasala for keeping up with this thread. I will look at the link you provided. Since this became an issue, I have started building structured data into webpages, templates and blog posts. It has been a slow improvement but I am seeing a steady rise in organic search and traffic on our site. 


The only issue so far has been that my team cannot just crack out a blog post and post it same day. None of them know how to do structured data. I insist that they give me at least a day's lead time, or better, with each blog post so I can mark it up and then publish it. Depending on the content there could be several sets of structured data: blog post, event, job posting, etc. I'm getting faster at adding it by hand.

Occasional Contributor

Thanks to Jon_Sasala's generosity, I added the JSON language to my Hubspot sitewide and blog headers.


But I just finished a blog post and am flummoxed on how to add the object mark-up. I can easily slip it around the the image. But I cannot figure out how to get into an HTML edit view that would allow me to place the <div> codes around thing like the header. Is this just something with the particular templates I'm using, or is there a view mode I haven't discovered yet?


Thank you.

Regular Contributor

@Datalink_Donna, watch your blog posts carefully. I've added oodles of microdata markup only to have Hubspot drop it. 

I exclusively use span tags to get markup around things.

Here is the code to a blog I did that is a Blog Post + Event. (I'm kind of proud of this one.) You can put the code in the Structured Data Testing Tool to see how it comes out.


Everything must be within the blog post. You aren't going to mark up headers/footers or anything like that from your blog post. That comes from modifying your templates. I tried to call out all the elements just in the Event section. Hopefully from there you can find all the interesting bits in the Blog Post.


Don't add markup to any of your Heading tags, Hubspot will drop them! Limit your use of <div> tags. I've had Hubspot drop those too. <Span> tags work best for me.


<div itemid="http://www.**bleep**.net/audiology/blog/tims-audiology-software-appointment-notifications" itemscope="" 
<p style="text-align: center;"><span style="font-size: 18px;"><strong>&nbsp;**bleep** Presentation</strong></span></p> <p style="text-align: left;"><span style="font-size: 16px; background-color: transparent;">Our very own
<span itemprop="attendee">Audiology Business Solutions Specialist, Janet Kautz</span>, will be participating in a group
discussion at the <span class="event-title" itemprop="name">2018 AHAA Convention</span> scheduled for
<span class="event-date" itemprop="startDate" content="2018-02-17T08:00">Saturday, February 17th</span>, at 8:45am at
<span class="event-venue" itemprop="location" itemscope="" itemtype=""><span itemprop="name">Bally's</span>,
<span class="address" itemprop="address" itemscope="" itemtype=""><span itemprop="streetAddress" content="3645 Las Vegas Boulevard South">
<span itemprop="addressLocality">Las Vegas</span>, <span itemprop="addressRegion">Nevada</span><span itemprop="postalCode" content="89119"></span></span></span></span>
<span itemprop="description">Janet will be part of a panel discussing how it's possible to decrease cancellations and no-shows by incorporating appointment reminders into your daily processes</span>.
You'll also get to experience a <span itemprop="offers">"hands-on" demonstration of appointment reminder capabilities</span>
and see for yourself how the effectiveness of appointment reminders can make a substantial difference to your business.</span></span></p> </div> <!--more--> <div itemid="http://www.**bleep**.net/audiology/blog/tims-audiology-software-appointment-notifications" itemscope="" itemtype=""> <p><span style="color: #000000; font-size: 18px;" itemprop="headline"><strong>Get a Head Start&nbsp;With TIMS Appointment Notifications&nbsp;</strong></span></p> <p><span style="color: #000000; font-size: 16px; background-color: transparent;">Let's start with scheduling. <span itemprop="description">TIMS brings simplicity, flexibility and efficiency&nbsp;to patient appointment scheduling whether you're using TIMS in the office or you're&nbsp;on-the-go with TIMS Web Scheduler.</span></span></p> <ul> <li><span style="color: #000000; font-size: 16px;">Easily schedule or reschedule patient appointments on the fly, then manage your appointments in a way that works best for you. </span></li> <li><span style="color: #000000; font-size: 16px;">With TIMS in the office or TIMS Web Scheduler, all your branch/office calendars&nbsp;are always in sync and up-to-date every time you log in.</span></li> <li><span style="color: #000000; font-size: 16px;">Handle it all right from within TIMS: web appointments, recurring appointments, non-patient appointments or even Block Scheduling.</span></li> <li><span style="color: #000000; font-size: 16px;">Set up Appointment Verifications and Confirmations&nbsp;to keep patients informed of the initial&nbsp;appointment or any changes that might&nbsp;occur.</span></li> </ul> <p><span style="color: #ff0000; font-size: 16px;">&nbsp; &nbsp;<img width="500" height="558" style="margin: 0px auto; width: 500px; display: block;" alt="Aud block scheduler" src="" itemprop="image"></span></p> <p style="text-align: center;"><span style="color: #000000;"><strong><em><span style="font-size: 16px;">Block out specific time frames for repairs, evaluations, testing and more with color-coded themes.</span></em></strong></span></p> <p style="text-align: center;">&nbsp;</p> <p><span style="color: #000000; font-size: 18px;"><strong>Appointment Notifications:&nbsp;Verify-Confirm-Customize</strong></span></p> <p><span style="color: #000000; font-size: 16px;"><strong>Verify&nbsp;</strong>the date and time of the appointment that the patient is scheduled for when they set up their office visit using an electronic reminder.</span></p> <p><span style="color: #000000; font-size: 16px;"><strong>Confirm&nbsp;</strong>by sending a second reminder of their appointment date. The patient can confirm and approve the appointment&nbsp;or request a different one. The updated appointment status is automatically reflected in real-time, in your TIMS system.</span></p> <p><span style="color: #000000; font-size: 16px;" itemprop="mainEntityOfPage"><strong>Customize</strong>&nbsp;because every patient is different. Let them decide which verification and confirmation&nbsp;method they'd be the most comfortable&nbsp;with: a phone call, text message, and/or email. Then, create customized message templates with key appointment details for your providers.</span></p> <p style="text-align: center;">&nbsp;</p> <p style="text-align: center;"><span style="color: #000000;"><strong><span style="font-size: 16px;">Download this Appointment Notifications Fact Sheet before AHAA so you'll be ready with your questions.</span></strong></span></p> <p style="text-align: center;"><span style="color: #ff0000;"><strong><span style="font-size: 16px;">&nbsp;Link to AHAA Convention</span></strong></span></p> <p style="text-align: center;"><strong><span style="color: #ff0000; font-size: 16px;">&nbsp;CTA--Appointment Notification&nbsp;fact sheet</span></strong></p> <p style="text-align: center;"><strong><span style="color: #ff0000; background-color: transparent;">Stop by and and chat, I'll be at booth# 124</span></strong></p> <p style="text-align: center;"><span style="color: #ff0000;">(picture)</span>&nbsp;<strong>J</strong><strong style="text-align: center; background-color: transparent;">anet Kautz-Business Solutions Specialist, TIMS Audiology<br></strong></p> <p style="text-align: center;">&nbsp;</p> <p><span style="font-size: 8px;">Published by <span itemprop="author">Gayle Smith</span> of <span itemprop="publisher">Computers Unlimited</span> on <span itemprop="datePublished">2018-02-07.</span> Modified<span itemprop="dateModified">2018-02-07.</span></span></p> </div>


Occasional Contributor

Thanks for this, Crystal.


I misspoke on my last message - I meant "headline," not "header." 


But this example will serve as a good guide. I so appreciate your willingness to share!


- Donna

New Contributor

Hey guys, 

like I mentioned earlier, you can have the team at Computan do it for less than $200. I've brought this up with Hubspot Since April 2017 and they've been dragging their heels. 

Occasional Contributor

Hey, @darraghbrady - what did you have Computan do? A custom module to add to your blog template?