Convert coded HTML landing page to drag-and-drop page?

Hi all,

Our team has created a landing page externally using Claude and then moved the HTML/code into HubSpot.

The page works correctly in HubSpot, but the issue is that it is treated as a coded/static page rather than a standard drag-and-drop landing page.

Our non-technical users cannot easily edit the content or layout using HubSpot’s page editor:(

  • Is there any way to convert an existing coded HTML landing page into a HubSpot drag-and-drop landing page?
  • Or is there a recommended approach to make the imported page editable for non-technical users?

Thanks you!

Best,

Hong Anh

Hi @Honganh,

As far as I know, no, there is no native feature in the HubSpot UI to import a HTML template. You would have to work with the custom coded template features here: Build a custom coded template

Alternatively, you could have Claude walk you through the steps to create these custom coded templates in HubSpot. Have Claude create the final product for you for the design manager instead of now trying to make it work in the design manager on your own :slight_smile:

Best regards

Hi @Honganh and Happy Tuesday!

Great questions @Honganh , thanks for asking the HubSpot Community! And @karstenkoehler, thanks so much for your help! :glowing_star:

I can confirm that, currently, there isn’t a one-click way to convert imported HTML into a native drag-and-drop page. The recommended approach is to refactor the page into a coded HubSpot template with editable HubL modules.

Here are some resources that can also help:

I’d love to hear the perspectives from our Top Experts: Hi @Anton and @evaldas do you have any additional tips to share with @Honganh, please?

Have a wonderful day and thanks so much everybody!
Bérnagère

If you have the option, work with a HubSpot developer to help you make the template and modules editable to your team’s needs. Or if you have more technical people on your team, you can follow along with the resources that @Berangere shared.

Alternatively, as @karstenkoehler suggested, you can try using Claude to help convert that static template into editable template and modules, though it can sometimes overcomplicate things or use incorrect code, so it may take multiple attempts to get it to work the way you want it.

Ideally these templates and modules are built inside of a theme, as otherwise you could end up with a lot of modules in your portal that may look broken if not used with the correct templates. Themes help with maintaining cohesive styling.

Hey @Honganh,

as @karstenkoehler and @Berangere mentioned - unfortunately there’s no “easy” way to transform an static HTML template into a user-friendly and reusable template.

The core idea of HubSpot is like this:

  • Theme - the container which contains all styles, templates, sections, modules …
    • Templates - dedicated reusable and predefined layouts with drag&drop areas, sections, modules, template specific CSS&JS files … so you don’t need to build every page from scratch
      • Sections - reusable and predefined row&column layouts with individual modules
        • Modules - reusable and predefined elements with specific functionalities. If set to global module, every module instance will display the same content.

There are a few routes you can go:

  1. Grab a marketplace theme, create a child-theme in order to be able to apply code-side modifications to it at a later point
  2. Create a new theme with the HubSpot boilerplate and build a theme yourself
  3. Create a custom theme from scratch

From my experience I’d rate those options like this:

  • Easy: If you’re not looking for a pixel-perfect integration where users switch between an external website like WordPress and your landing page, go with a marketplace theme. Look for one which meets around 80% of your requirements. The last 20% are something you can easily modify
  • Medium: If you want to have a starting point for a custom theme, start with the boilerplate
  • Hard: If you want to start with a blank page and create everything on your own, go with the custom theme

Something you can always do is creating custom modules.

A custom module is a building block which can be placed by drag&drop into your templates. If you’re working with the Design-Manager - something I’d recommend if you got little to none dev experience - it’s easier than going the full local development route.

The core idea of a module is: Give the content editors predefined fields to use.

A very basic example:

If you want something like a headline, you add at least a text field as an available field to the module and put the variable into the module.html part

Doing so will allow the users to have a text input for the headline which can be modified in every instance of the module

So rather than having full static content like

<h1>this is my headline</h1>

You write it like this

<h1>{{module.headline}}</h1>

If the content editor puts something like

“This is our amazing whitepaper” into the text field, the page will display

<h1>This is our amazing whitepaper</h1>

Important: This works only unless you don’t enable the global module option.
Global modules are being handled differently. Once you update the content in one instance, every instance of this module get’s updated. Might be helpful in some cases, but not always.

There are TONS of options and routes you can go and do and it all comes down to what you want/need.

As for template(s) itself - to get the most basic drag&drop experience in a template, it’s enough to write it like this

<!--
    templateType: page
    label: Page template
    isAvailableForNewContent: false
-->
<!doctype html>
<html lang="{{ html_lang }}" {{ html_lang_dir }}>
  <head>
    <meta charset="utf-8">
    {% if page_meta.html_title %}
      <title>{{ page_meta.html_title }}</title>
    {% endif %}
    {% if branding_favicon %}
      <link rel="shortcut icon" href="{{ branding_favicon }}" />
    {% endif %}
    <meta name="description" content="{{ page_meta.meta_description }}">
    {{ standard_header_includes }}
    
  </head>
  <body class="{{ builtin_body_classes }}">
    
    <main id="main-content" class="">
    {% block body %}
      {% dnd_area 'main' %}
         {# THIS IS THE AREA WHERE YOUR CONTENT WILL BE PLACED/DISPLAYED #}
      {% end_dnd_area %}
    {% endblock body %}
    </main>
    {{ standard_footer_includes }}

  </body>
</html>

But I highly advise you not to blindly copy&paste this as this is just a simple shell.

p.s.:
If you need dev support, feel free to book a meeting by clicking my signature :slight_smile:

hope this helps

best,
Anton

You generally can’t directly convert a coded HTML page into a native drag-and-drop page with all of the existing HTML automatically becoming editable modules.

The usual approach is to rebuild the page using a HubSpot template/theme and drag-and-drop sections or custom modules. The existing HTML/CSS can still be useful as the design reference, but the editable content should be separated into fields/modules rather than kept as one static code block.

For a non-technical team, I’d recommend creating reusable custom modules for things such as the hero, headings, text, images, buttons, feature sections, and testimonials. Then the page can be assembled in the standard editor while keeping the original design and styling.

If the page is already complex, another option is to keep the coded template and expose the frequently changed content through module fields. That usually requires less rebuilding while still giving editors control over the important content.

Hi all,

Thank you so much for all the recommendations!

I’ll advise my team to rebuild the page using HubSpot’s drag-and-drop features. Since we don’t have a technical specialist on our team, this will probably be the most practical way.

Thanks again for all your help!

Hi @Honganh, you’re very welcome! :orange_heart:

That sounds like a solid plan! If any questions come up as you rebuild the page, feel free to ask, we’re always here to help!

Wishing you and your team a smooth experience with the new page.

And thanks so much to all for your valuable insights and help! :glowing_star:

Have a wonderful day everybody!
Bérangère