Skip to content
← Back to blog
Tutorial

HubSpot to git-based blog migration: what changes for SEO

A HubSpot blog migration playbook: why SaaS teams outgrow HubSpot's cost tiers, the redirect checklist that protects rankings, and what changes on git.

By Mitrasish, Co-founderJul 11, 202615 min read
HubSpot to git-based blog migration: what changes for SEO

HubSpot is the default CMS a SaaS marketing team lands on, and for a while that's a reasonable place to be. The pull to leave doesn't show up because HubSpot is broken. It shows up because the pricing model taxes exactly the traffic growth your blog is supposed to produce, the templating language only runs inside HubSpot, and the CMS ships zero structured data for a blog post by default.

A HubSpot blog migration is the same discipline as any other platform move: map every indexed URL, redirect it with a permanent code, and don't lose what you already ranked for. It also has one twist specific to HubSpot, and it catches teams off guard because it looks like a HubSpot feature you can lean on mid-migration. It isn't.

This post covers why teams outgrow HubSpot's blog, the redirect and metadata checklist that protects your rankings, and what actually changes once your content lives in git instead of HubSpot's database. For the same playbook against two other platforms, see our WordPress to Astro migration and Notion to git-based blog migration posts; the platform changes, the discipline doesn't.

Why SaaS teams outgrow HubSpot's blog

HubSpot's Content Hub tiers run from free to $1,500 a month, and the blog itself is rarely the line item that forces a move. HubSpot's own pricing page lays out four tiers:

TierPriceSeatsPagesNotable limits
Free$0/month2 users30 landing pages, 30 website pagesHubSpot branding on every page
Starter$7/month per seat (billed annually)Per seat30 landing pages, 30 website pagesCustom templates, branding removed
Professional$450/month3 core seatsUp to 10,000 pagesHubDB, more custom templates
Enterprise$1,500/month5 core seatsMulti-site, up to 10 domainsHighest tier, most seats

On paper, Content Hub Starter's blog alone allows up to 10,000 blog posts, 20 authors, and 50 tags on one blog, per an independent breakdown of Content Hub tiers, which is plenty of room for a growing content operation.

The blog rarely hits those ceilings. What forces the conversation is Marketing Hub, HubSpot's separate contact-based product that most teams end up bundling in to run email and lifecycle marketing alongside the blog.

Marketing Hub's per-contact pricing punishes exactly the growth a blog is supposed to drive

A blog's job is to bring in new visitors who convert into contacts. Marketing Hub bills by exactly that number, in tiers, and crossing a tier by even one contact moves your whole account to the next bracket. HubSpot's own pricing breakdown shows Starter including 1,000 contacts, and Professional including 2,000 contacts at roughly $890/month plus a mandatory $3,000 onboarding fee, with additional contacts sold in 5,000-contact blocks from around $250/month. That means a Professional-tier account that grows from 2,000 to 2,001 marketing contacts, the exact outcome a working blog is supposed to produce, jumps to the next full contact tier rather than paying for one extra contact.

The compounding version of that math is documented, not theoretical. Lynton, a former 16-year HubSpot partner agency with more than 2,000 implementations, found that a company nominally paying $43,200 a year for Marketing Hub Enterprise typically faces $150,000 to $200,000 a year in real total cost of ownership once partner retainers and internal admin time are added in, with contact overages alone running $2,400 to $24,000-plus a year on top of 5 to 10% annual renewal increases. Their own scoring framework grades total HubSpot spend on a five-point scale: under $25,000 a year and stable scores as "stay," $25,000 to $60,000 a year or growing faster than revenue scores as "evaluate," and over $60,000 a year, rising 5 to 10% annually, scores at the top of the scale, their cue to leave rather than just evaluate. A growing blog's own success, more contacts, more traffic, more seats, is exactly what pushes a team up that scale faster, not slower.

HubL is a dead-end skill and a key-person risk, not a real templating language

Every HubSpot theme is built in HubL, HubSpot's own templating language, and it exists nowhere outside HubSpot. A breakdown of HubSpot CMS limitations is specific about the constraint: you cannot host a site built with HubSpot's CMS on an external server, and you cannot host a site built elsewhere on HubSpot's servers. HubSpot also has no native support for server-side languages like PHP; developers use HubL for server-side logic instead, because that's the only option HubSpot gives them.

Lynton's assessment of what that does to a team is blunt: "HubSpot's proprietary templating language (HubL) creates key-person risk," because HubL fluency doesn't transfer, and it means one or two specialists become a bottleneck for changes that should be self-service, like layouts, email templates, and landing pages. A developer who learns HubL has learned a skill that works in exactly one product. A developer who writes Markdown, HTML, or a mainstream templating language has learned something portable.

What HubSpot's CMS doesn't give a blog by default

Structured data is the clearest gap. An analysis of HubSpot CMS output for schema markup found the platform generates standard meta tags, Open Graph tags, and canonical URLs, but nothing beyond that: "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." The same analysis summarizes it as plainly as it can be summarized: "every HubSpot site starts at zero for schema markup. You need to add it yourself." That's a real cost for both classic rich results and AI answer engines, both of which lean on structured data to understand what a page actually is.

We checked what "add it yourself" looks like in practice by pulling the raw page source of a live post on HubSpot's own blog, which runs on HubSpot's own CMS. It does carry Article, BreadcrumbList, Organization, and WebPage JSON-LD, so the schema isn't impossible to get on HubSpot. But it's hand-built, not automatic: the markup follows HubSpot's specific template structure rather than shipping as a default block every blog gets for free, which is consistent with the "add it yourself" finding above, not a contradiction of it. A team without HubSpot's own engineering resources behind their theme is the team that ends up shipping the zero-schema default.

Page and branding limits stack on top of that. Free-tier pages are capped at 30 and carry visible HubSpot branding; branding removal and higher page ceilings require a paid tier. None of this is a dealbreaker on its own. Together, contact pricing, HubL lock-in, and a schema-free starting point are why the exit conversation keeps coming up on well-resourced SaaS teams specifically, not on hobby blogs.

The redirect and metadata checklist that prevents a ranking drop

The honest starting point: none of the reasons above are a reason to migrate carelessly. A HubSpot blog that has any real search traffic turns this from a platform swap into a redirect-mapping project first and a rebuild second.

Export what HubSpot actually gives you, and what it doesn't

HubSpot's own export documentation recommends its HTML export specifically "if you're going to import content onto another platform," and that's the export you want: HTML files of your pages, blog posts, and templates. Separately, HubSpot offers CSV, XLS, or XLSX data exports limited to fields like title, language, and URL, useful for building your redirect map but not a content backup, since HubSpot's own docs note that exports from reports carry page-level data and metrics only, not the full HTML of your pages. HubSpot's documentation doesn't describe any tool for restoring an entire site to a prior version either, so treat the HTML export as raw material for conversion, not as a database dump you could restore from if something goes wrong mid-migration.

Map every indexed URL before you touch the export button

Pull every URL Google actually has indexed from Search Console's Coverage report, not just the post list in HubSpot's blog dashboard. A post you unpublished last year can still be indexed and still sending a trickle of traffic through an old backlink; if it disappears with no redirect, that traffic and the link equity behind it disappear with it. Build a spreadsheet, old URL to new URL to redirect type, before you export a single file. This step is unglamorous and it's also where nearly all of the actual migration risk lives, not in the framework you pick for the rebuild.

301s, not 302s, and why HubSpot's own redirect tool can't help you after you leave

The redirect type carries the ranking signal, and Google is explicit about the difference. Google's own documentation on redirect types states that for a 301 or 308, "Googlebot follows the redirect, and the indexing pipeline uses the redirect as a signal that the redirect target should be canonical," while for a 302, 303, or 307, "the indexing pipeline doesn't use the redirect as a signal that the redirect target should be canonical." A HubSpot migration is permanent, so anything short of a 301 or 308 sends the wrong signal at the exact moment you need the right one.

Here's the HubSpot-specific catch, and it's the one that trips teams up mid-migration: HubSpot's own knowledge base states plainly, "URL redirects only work for domains connected to and hosted in HubSpot." HubSpot's redirect tool does support three types, permanent (301, the default), temporary (302), and proxy (305), and bulk uploads work well while you're still on HubSpot's hosting. But that tool stops functioning the moment your domain points somewhere else, because it's a HubSpot hosting feature, not a portable redirect service. Bulk imports on that tool also cap out at 500 redirects per CSV upload and 140 characters per URL, a real constraint if your blog runs into the thousands of posts. The takeaway: build and test your redirect map on the new host or CDN from the start of the project. Don't plan to run redirects through HubSpot for a transition period after the domain moves, because there won't be a transition period where that works.

Keep the redirects live once they're on the new host. Google's site-move guidance is specific: "Keep the redirects for as long as possible, generally at least 1 year," because that's the window Google needs to recrawl the backlinks other sites still have pointing at your old HubSpot URLs and reassign that signal to the new ones. Expect a temporary crawl spike too. Google states directly that after a move, it "will crawl your new site more heavily than usual," since redirected requests from the old URLs stack on top of normal crawl demand.

What HubSpot never gave you to lose: schema, sitemaps, per-post control

Some of what a migration "risks" isn't actually at risk, because HubSpot never had it in the first place. Zero JSON-LD schema by default means there's no schema to preserve, only schema to add for the first time. That's worth doing at build time in the new site; see our guide to schema markup for AI Overviews for which structured data types are actually worth shipping in 2026 versus which are vendor invention. The same logic applies to per-post sitemap control and template ownership: these aren't things a HubSpot migration threatens, they're things it finally gives you.

What you gain and lose moving blog content into a git-based, PR-reviewed workflow

The tradeoff is real in both directions, and it's worth stating plainly rather than pretending the move is a pure upgrade.

The editorial tradeoff: HubSpot's drag-and-drop editor vs a pull request

HubSpot's blog editor is built for a marketer who wants to write, format, and publish from a browser with no engineering involved. A git-based blog trades that for every post becoming a Markdown file on a branch, reviewed as a diff, merged through the same process as a code change. For a marketing team that has never touched git, that's a genuine cost, not a footnote, and it's the honest reason some teams stay on HubSpot even after they've outgrown its pricing.

What you get in exchange is a publishing pipeline that behaves like the rest of your product instead of a separate system nobody on the engineering side ever opens. Every post change is a diff someone can review before it ships. Nothing publishes without a merged pull request, a meaningfully different failure mode than a HubSpot post going live the moment someone clicks publish. If your marketing team is weighing that tradeoff and wants to walk through what it looks like for your specific HubSpot setup, request early access rather than guessing from a blog post.

What you get back: real schema, real sitemaps, CI-checked pages

A static build generates a unique meta title and description per post automatically, writes an XML sitemap from your content directory with no manual step, and lets you add Article and BreadcrumbList schema to every page instead of none. You can also gate every merge on the checks that actually protect rankings: broken links, valid canonicals, valid JSON-LD, and Core Web Vitals budgets. Our GitHub Actions SEO checks post walks through exactly that kind of workflow, four automated jobs that fail a build before a bad page ever reaches production, which is a stronger guarantee than a marketer remembering to fill in a meta description field.

If you're weighing a fully static rebuild against a headless CMS sitting in front of your new frontend, it's worth understanding the tradeoff there too. Our headless CMS vs git-based blog post covers the ghost-content risk a sync-based publish flow can introduce that a plain static build never has, since a git-based build has no separate sync layer to fall behind in the first place.

A pre-migration checklist for a HubSpot to git move

Work through this before you export a single post:

  1. Pull every indexed URL from Search Console's Coverage report and build a spreadsheet mapping old URL to new URL.
  2. Decide the new URL structure now, not mid-rebuild, so the redirect map only gets written once.
  3. Export HubSpot's HTML files for every page, post, and template, and pull the CSV/XLS data export for title, language, and URL metadata.
  4. Set up redirect handling on your new host or CDN before launch, not through HubSpot, since HubSpot's redirect tool stops working once the domain leaves its hosting.
  5. Convert each exported post to Markdown with real frontmatter: title, date, meta description, tags.
  6. Add per-post meta tags, an auto-generated XML sitemap, and Article/BreadcrumbList schema in the new build, since HubSpot shipped none of it.
  7. Write server-side 301 redirects for every mapped URL, tested on the new host before the domain cutover, with no chains and no many-to-one redirects to a generic page.
  8. Launch the redirects and the new site together, then submit the new sitemap in Search Console the same day.
  9. Watch Coverage and Performance in Search Console daily for two weeks, then weekly through the first 90 days.
  10. Keep the redirects live for at least a year.

That's a version of the same checklist any technical SEO migration needs, whether you're leaving HubSpot, WordPress, or Notion. Recovery timing after a move varies more than most teams expect, though the widest end of that variance describes a harder case than most HubSpot exits. A widely cited third-party study of 892 domain migrations, surfaced in Digital Applied's migration playbook, covers moves to an entirely new domain and found an average of roughly 523 days, about 17 months, to fully recover prior organic traffic, with the fastest recoveries at 19 to 23 days. A HubSpot exit that keeps the same domain and just changes hosting and templates is a narrower change than swapping domains, so treat that 523-day figure as the ceiling for a hard case, not the expected outcome for a same-domain platform swap. Either way, the spread comes down to execution, not the platform you left. A clean redirect map and a same-day launch put you toward the fast end.

What changes once you're on git

Once your content lives as Markdown files in a repo, the publishing question changes from "who has HubSpot editor access" to "what does our git workflow look like for content." A new post is a branch and a file. Review happens as PR comments instead of a HubSpot revision history nobody checks. A merge to main triggers the same build and deploy pipeline your product already uses, no separate HubSpot login and no separate mental model for the marketing team's tools versus engineering's.

That handoff is also where a repo-native writing tool fits, instead of a HubSpot content assistant plugged into a database you no longer have. A git-based AI blog writer reads your repo's conventions, drafts a post as a Markdown file on a branch, and opens a pull request the same way a human contributor would, so nothing auto-publishes and your existing review process still gates every post. If your migration is still ahead of you and you're building your keyword strategy from scratch rather than porting an existing HubSpot blog, our guide to SEO for SaaS covers picking winnable keywords and building topic clusters before you're locked into any platform's constraints.

Once your HubSpot migration lands on git, Lyra can take over the writing from there, reading your repo's conventions and opening a pull request for every new post, the same review gate you already use for code.

Talk to the founder → · Join the waitlist

FAQ

Frequently asked

Will migrating off HubSpot hurt my blog's SEO rankings?+

Not if you map every indexed URL and redirect it with a permanent 301 before you launch. Google's own site-move guidance says ranking fluctuation during a migration is expected, and a small to medium site typically settles within a few weeks. The risk isn't leaving HubSpot, it's an unmapped URL or a redirect built after launch instead of before it.

Does HubSpot's redirect tool work after I move my domain off HubSpot?+

No. HubSpot's own documentation states that URL redirects only work for domains connected to and hosted in HubSpot. The moment your domain points at a new host, HubSpot's redirect tool stops doing anything for that traffic, so the redirect layer has to live in your new host or CDN from day one, not get built as a HubSpot task partway through the move.

How much does it actually cost to leave HubSpot?+

It depends what you're leaving. A former 16-year HubSpot partner agency puts a website-only exit from Content Hub Enterprise at roughly $85,000 saved over 5 years, and a full-platform exit (CRM, marketing, and CMS) at $300,000 to $400,000 over 5 years. Their broader point is that a $43,200/year Marketing Hub Enterprise license often runs $150,000 to $200,000/year in real total cost once partner retainers and admin time are counted.

Does HubSpot generate structured data or schema markup for blog posts?+

No, not by default. An analysis of HubSpot CMS output found no built-in Organization schema for the homepage, no Article schema for blog posts, no FAQPage schema for knowledge base articles, and no BreadcrumbList schema for navigation, concluding that every HubSpot site starts at zero for schema markup and you have to add it yourself.

What does HubSpot's export tool actually give you for a migration?+

HTML files of your pages, blog posts, and templates, which HubSpot itself recommends specifically if you're importing content onto another platform. Separately, a CSV/XLS/XLSX data export covers fields like title, language, and URL, but HubSpot's own documentation describes no way to restore an entire site to a prior version, so the export is a starting point for conversion, not a database dump you can restore from.

Built by the tool you're reading about

This post is the kind of thing Lyra ships on her own.

Lyra finds the topics worth ranking for, writes them in your repo's voice, fact-checks every claim, and opens a pull request scored and ready to merge. You review and hit merge. Want to see what she'd write for you? Tell us about your blog and the founder will walk through it with you.

HubSpot Blog MigrationMigrate Off HubSpot CMSHubSpot to Git-Based BlogHubSpot CMS SEO LimitationsHubSpot Redirect Checklist