Blog Posts & Blogs
Blogs and blog posts are two distinct but closely related asset types in HubSpot. A blog is the container entity that defines settings like the listing template, default author, and subscription configuration. A blog post is an individual piece of content that belongs to a parent blog. JetStack AI handles both types and resolves the dependency chain between them automatically.
Blog Entity Structure
Section titled “Blog Entity Structure”A blog (sometimes called a “content group” in the HubSpot API) captures the following configuration:
- Item template — The template used to render individual blog posts
- Listing template — The template used for the blog’s index/listing page
- Default author — The fallback author assigned to posts that lack an explicit author
- Subscription form — The form used for blog email subscription opt-in
- Comment form GUID — The form identifier for the blog’s comment system (
comment_form_guid) - Language and URL settings — Root URL, language, and slug configuration
Blog Dependencies
Section titled “Blog Dependencies”Blogs depend on:
- Templates — Both the item template and listing template must exist in the target portal
- Forms — The subscription form and comment form must be deployed or already present
- Owners — The default blog author references a portal owner
Blog Post Structure
Section titled “Blog Post Structure”Each blog post captures its full content and configuration:
- Parent blog (
contentGroupId) — The blog this post belongs to. This is a required reference. - Post template — The template used to render this specific post (may differ from the blog default)
- Blog author — The author credited on the post. This is a blog-specific author, separate from portal owners.
- Featured image — The hero/thumbnail image for the post
- Tags — One or more topic tags associated with the post
- HTML content — The full post body, which may contain embedded references to other assets (modules, CTAs, images)
- Publish date and metadata — SEO settings, meta description, canonical URL, and scheduling information
Blog Post Dependencies
Section titled “Blog Post Dependencies”Blog posts depend on:
- Blogs — The parent blog must be deployed first. The
contentGroupIdis remapped to the newly created blog in the target portal. - Templates — The post-level template reference
- Blog authors — Mapped separately from portal owners (see below)
Deploy Behavior
Section titled “Deploy Behavior”Parent Blog Mapping
Section titled “Parent Blog Mapping”When deploying blog posts, the parent blog mapping is required. If a blog post references a contentGroupId that has no corresponding blog in the target portal, the deployment throws an error and the post is skipped. Ensure parent blogs are always included in the deployment alongside their posts.
Author Mapping
Section titled “Author Mapping”Blog authors in HubSpot are separate from portal owners. This is one of the most common sources of confusion during blog deployments. The mapping logic follows this resolution order:
- Blog author mapping — JetStack AI first attempts to match the post’s blog author to an existing blog author in the target portal by name or email
- Owner fallback — If no blog author match is found, the system falls back to the portal owner mapping configured in the deploy wizard
If neither mapping resolves, the author field is left empty in the deployed post. This does not block deployment but means the post will appear with no attributed author.
Module Block Transformation
Section titled “Module Block Transformation”Blog post HTML content may contain HubL module references using {% module_block %} tags. During deployment, these tags are parsed and all internal references (module IDs, form GUIDs, CTA references) within the module block are remapped to their corresponding IDs in the target portal.
Featured Image Upload
Section titled “Featured Image Upload”Featured images referenced in blog posts are uploaded to the target portal’s file manager during deployment. The image URL in the post metadata is then rewritten to point to the newly uploaded file. If the image upload fails, the post deploys without a featured image and a warning is logged.
Epoch-0 Timestamp Filtering
Section titled “Epoch-0 Timestamp Filtering”HubSpot sometimes stores placeholder timestamps for dates that were never set. JetStack AI detects and removes these sentinel values to prevent corrupted date fields in the target portal:
| Sentinel Value | Action |
|---|---|
0 | Removed from payload |
"0" | Removed from payload |
"1970-01-01T00:00:00Z" | Removed from payload |
Any date field containing one of these values is deleted from the deployment payload rather than being sent to the HubSpot API. This prevents posts from appearing with a January 1, 1970 publish date.
Edge Cases
Section titled “Edge Cases”Blog Authors vs. Portal Owners
Section titled “Blog Authors vs. Portal Owners”The blog author entity in HubSpot has its own data model separate from portal owners/users. A blog author has fields like bio, avatar, social links, and display name that do not exist on the owner record. When the source portal has blog authors that do not correspond to any portal owner, the owner mapping step in the deploy wizard will not cover them. JetStack AI handles this by attempting blog author matching first.
Comment Form (comment_form_guid)
Section titled “Comment Form (comment_form_guid)”The comment form referenced by the comment_form_guid field is a special system form. If the target portal does not have blog comments enabled, this field is ignored during deployment. No error is raised — the field is simply omitted.
Embedded Content References
Section titled “Embedded Content References”Blog post HTML can contain references to forms, CTAs, images, and other modules via HubL embed codes. All recognized reference types are remapped during deployment. Unrecognized or malformed references pass through unchanged with a warning in the deploy log.
Troubleshooting
Section titled “Troubleshooting”- “Missing parent blog mapping” — The blog post’s
contentGroupIddid not resolve to any deployed blog. Ensure the parent blog is included in the same deployment or was previously deployed. - Author shows as empty after deploy — The blog author could not be matched in the target portal and no owner fallback was configured. Check the owner mapping step in the deploy wizard.
- Featured image missing — The image upload failed, possibly due to the image being inaccessible at the source URL. Check the deploy log for upload errors.
- Incorrect publish date — If a post shows a 1970 date, the epoch-0 filtering may not have caught a variant format. Report this to support.