Como criar templates
para o Webbo Pages
Templates Webbo são arquivos HTML normais com atributos especiais data-webbo-* que tornam o conteúdo editável pelo cliente no painel admin.
Estrutura Básica
Um template Webbo é um HTML comum. Você faz upload como .zip contendo o index.html e quaisquer assets (CSS, JS, imagens). O Webbo escaneia os atributos data-webbo-* e gera os campos editáveis automaticamente.
<!-- Estrutura mínima de um template Webbo -->
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- SEO editável -->
<title data-webbo-seo="title">Meu Site</title>
<meta name="description" data-webbo-seo="description"
content="Descrição do site">
<!-- Seus estilos -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- Conteúdo editável aqui -->
<h1 data-webbo-key="hero-title">Bem-vindo</h1>
<p data-webbo-key="hero-desc">Texto de apresentação</p>
</body>
</html>
Estrutura do ZIP
O Webbo identifica páginas pelos arquivos .html na raiz do ZIP. Cada arquivo vira uma página com slug baseado no nome. Não use subpastas para páginas — pastas são usadas apenas para assets (CSS, JS, imagens).
meu-template.zip
├── index.html → página inicial
├── sobre.html → slug: "sobre"
├── servicos.html → slug: "servicos"
├── contato.html → slug: "contato"
├── _produto.html → detalhe coleção
├── css/
│ └── style.css
├── js/
│ └── app.js
└── images/
└── logo.png
meu-template.zip
├── index.html
├── pages/
│ ├── sobre/
│ │ └── index.html → ignorado!
│ └── servicos/
│ └── index.html → ignorado!
└── css/
└── style.css
index.html→ página inicial do sitenome.html→ página com slug"nome", acessível em/nome/_nome.html→ página de detalhe de coleção (prefixo_)- Links entre páginas: use
href="sobre.html"ouhref="/sobre/"
Slots Editáveis
O atributo data-webbo-key marca um elemento como editável. A key deve ser única na página.
<!-- Texto simples -->
<h1 data-webbo-key="hero-title">Título Principal</h1>
<!-- Imagem editável -->
<img data-webbo-key="hero-img"
src="placeholder.jpg"
alt="Hero">
<!-- Link editável -->
<a data-webbo-key="cta-link"
href="#">Saiba Mais</a>
<!-- Texto longo (textarea) -->
<p data-webbo-key="about-description">
Texto longo sobre a empresa que o cliente pode editar...
</p>
Texto
Detectado automaticamente em <h1>-<h6>, <span>, <p> curto
Imagem
Detectado em <img>, <picture>, <source>
Link
Detectado em <a> — edita o href
Tipos de Conteúdo
Use data-webbo-type para forçar um tipo. Se omitido, o tipo é auto-detectado.
| Tipo | Descrição | Auto-detectado? |
|---|---|---|
text |
Texto simples (uma linha) | SIM padrão |
textarea |
Texto longo (multilinhas) | SIM se >80 chars ou key com "description", "bio", "quote" |
image |
URL de imagem (edita src) | SIM em <img>, <picture>, <source> |
link |
URL de link (edita href) | SIM em <a> |
richtext |
HTML editável (innerHTML) | NÃO precisa declarar |
styled-text |
Texto com destaque (span colorido) | NÃO precisa declarar |
<!-- Forçando tipo richtext -->
<div data-webbo-key="about-content"
data-webbo-type="richtext">
<p>Conteúdo com <strong>negrito</strong> e <em>itálico</em>.</p>
</div>
<!-- Forçando tipo textarea em elemento curto -->
<p data-webbo-key="note"
data-webbo-type="textarea">Nota curta</p>
Styled Text (Texto com Destaque)
Para títulos com parte destacada (outra cor, negrito etc.), use styled-text + data-webbo-highlight-class.
<!-- Título: "Resultados que" (normal) + "impressionam" (destaque) -->
<h2 data-webbo-key="hero-title"
data-webbo-type="styled-text"
data-webbo-highlight-class="text-blue-500 font-bold">
Resultados que <span class="text-blue-500 font-bold">impressionam</span>
</h2>
{"main": "Resultados que", "highlight": "impressionam"}. O data-webbo-highlight-class define a classe CSS do <span> de destaque.
Blocos de Repetição
Para listas dinâmicas (serviços, depoimentos, equipe etc.), use data-webbo-item nos containers e keys com padrão prefixo-índice-campo.
<!-- Seção de serviços com 3 itens -->
<section>
<h2 data-webbo-key="services-title">Nossos Serviços</h2>
<div class="grid grid-cols-3 gap-6">
<!-- Item 0 -->
<div data-webbo-item="services-0">
<img data-webbo-key="services-0-icon" src="icon1.svg">
<h3 data-webbo-key="services-0-title">Consultoria</h3>
<p data-webbo-key="services-0-desc">Descrição do serviço</p>
</div>
<!-- Item 1 -->
<div data-webbo-item="services-1">
<img data-webbo-key="services-1-icon" src="icon2.svg">
<h3 data-webbo-key="services-1-title">Design</h3>
<p data-webbo-key="services-1-desc">Descrição do serviço</p>
</div>
<!-- Item 2 -->
<div data-webbo-item="services-2">
<img data-webbo-key="services-2-icon" src="icon3.svg">
<h3 data-webbo-key="services-2-title">Marketing</h3>
<p data-webbo-key="services-2-desc">Descrição do serviço</p>
</div>
</div>
</section>
{grupo}-{índice}-{campo}O cliente pode adicionar/remover itens pelo editor. O primeiro item serve como modelo para novos itens clonados.
Coleções (CMS Dinâmico)
Coleções são listas CMS gerenciadas no painel (produtos, imóveis, posts etc.). Diferente dos blocos de repetição, os dados vêm do banco.
Página de Listagem
<!-- Container da coleção -->
<div data-webbo-collection="products">
<!-- Template de cada item (será clonado para cada registro) -->
<div data-webbo-collection-item>
<a href="product-detail.html?slug={slug}">
<img data-webbo-field="image"
data-webbo-type="image"
src="placeholder.jpg">
<h3 data-webbo-field="name">Nome do Produto</h3>
<p data-webbo-field="price">R$ 99</p>
</a>
</div>
</div>
Página de Detalhe
<!-- product-detail.html -->
<article>
<img data-webbo-field="image" data-webbo-type="image" src="placeholder.jpg">
<h1 data-webbo-field="name">Nome do Produto</h1>
<p data-webbo-field="price">R$ 99</p>
<div data-webbo-field="description"
data-webbo-type="richtext">
Descrição completa do produto...
</div>
</article>
Formulários
Adicione data-webbo-form ao <form> para enviar leads direto ao Inbox do Webbo. O Webbo injeta automaticamente o script de submissão.
<form data-webbo-form>
<input type="text"
name="name"
placeholder="Seu nome"
required>
<input type="email"
name="email"
placeholder="[email protected]"
required>
<input type="tel"
name="phone"
placeholder="(00) 00000-0000">
<textarea name="message"
placeholder="Sua mensagem"></textarea>
<button type="submit">Enviar</button>
<!-- Mensagem de sucesso (opcional, oculta por padrão) -->
<div data-webbo-form-success
style="display:none;">
Obrigado! Entraremos em contato em breve.
</div>
</form>
/api/ingest/forms/{slug} e aparecem como lead no Webbo Inbox.
name nos inputs. Campos com name="email" e name="name" são mapeados automaticamente como dados do lead.
SEO
Use data-webbo-seo para tornar título e descrição editáveis pelo cliente.
<head>
<!-- Título da página (aparece na aba do navegador e no Google) -->
<title data-webbo-seo="title">Minha Empresa - Soluções Digitais</title>
<!-- Meta descrição (aparece no Google) -->
<meta name="description"
data-webbo-seo="description"
content="Descrição que aparece nos resultados de busca">
</head>
og:title, og:description e og:image com base no conteúdo SEO editado.
Exemplo: Página de Blog
Um blog é o caso de uso perfeito para coleções. Você cria a listagem + a página de detalhe usando data-webbo-collection e data-webbo-field.
Estrutura dos arquivos no ZIP
meu-template.zip
├── index.html → página inicial do site
├── blog.html → listagem de posts (usa data-webbo-collection="blog")
├── _blog.html → detalhe do post (prefixo _ = página de detalhe)
├── css/
│ └── style.css
└── images/
└── placeholder.jpg
blog.html e o detalhe é _blog.html (mesmo nome com prefixo _). O Webbo detecta automaticamente que _blog.html é o template de detalhe da coleção "blog". A URL do post fica: /blog/meu-post-slug/
GIF: Demonstração da listagem de posts no admin
Listagem de posts (blog.html)
<!-- Cabeçalho editável do blog -->
<section>
<h1 data-webbo-key="blog-title">Nosso Blog</h1>
<p data-webbo-key="blog-subtitle">Novidades e dicas para seu negócio</p>
</section>
<!-- Lista de posts via coleção -->
<div data-webbo-collection="posts">
<article data-webbo-collection-item>
<a href="/blog/{slug}/">
<img data-webbo-field="cover"
data-webbo-type="image"
src="placeholder.jpg">
<span data-webbo-field="category">Categoria</span>
<h2 data-webbo-field="title">Título do Post</h2>
<p data-webbo-field="excerpt">Resumo do post...</p>
<time data-webbo-field="date">01/01/2025</time>
</a>
</article>
</div>
Página de detalhe (_blog.html)
<article>
<img data-webbo-field="cover"
data-webbo-type="image"
src="placeholder.jpg">
<span data-webbo-field="category">Categoria</span>
<h1 data-webbo-field="title">Título do Post</h1>
<time data-webbo-field="date">01/01/2025</time>
<!-- Corpo do post em richtext -->
<div data-webbo-field="content"
data-webbo-type="richtext">
<p>Conteúdo completo do post com formatação rica...</p>
</div>
<!-- Autor (slot estático da página, não do CMS) -->
<div>
<img data-webbo-field="author-avatar"
data-webbo-type="image"
src="avatar.jpg">
<span data-webbo-field="author-name">Nome do Autor</span>
</div>
</article>
GIF: Edição inline de um post no editor visual
blog.html (listagem) e _blog.html (detalhe). O Webbo detecta o prefixo _ e associa automaticamente. Cada post fica acessível em /blog/{slug-do-post}/.
Do's & Don'ts
Boas práticas e erros comuns ao criar templates para o Webbo Pages.
Faça
-
Use keys descritivas:
hero-title,about-description - Coloque conteúdo padrão realista dentro das tags editáveis
-
Use
data-webbo-typequando o tipo não é óbvio (ex:richtext) -
Comece blocos de repetição do índice 0:
svc-0,svc-1,svc-2 -
Inclua
data-webbo-seono<title>e<meta description> -
Use
name="email"ename="name"nos formulários - Teste o template em desktop e mobile antes do upload
- Mantenha assets (CSS/JS/imagens) relativos e dentro do ZIP
Não faça
-
Não repita keys — cada
data-webbo-keydeve ser único na página - Não adicione JS de submit nos formulários — o Webbo injeta automaticamente
- Não pule índices na repetição — use 0, 1, 2 (não 1, 3, 5)
- Não use URLs absolutas para assets internos — use caminhos relativos
- Não deixe tags editáveis vazias — sempre coloque conteúdo padrão
-
Não misture
data-webbo-keycomdata-webbo-field— key é para slots estáticos, field para coleções CMS -
Não aninhe elementos com
data-webbo-keydentro de outros elementos comdata-webbo-key -
Não use keys genéricas como
"text1","img2"— use nomes semânticos
GIF: Comparação visual — template correto vs erros comuns
Exemplos lado a lado
<!-- Keys descritivas e únicas -->
<h1 data-webbo-key="hero-title">
Título aqui
</h1>
<p data-webbo-key="hero-subtitle">
Subtítulo aqui
</p>
<!-- Keys duplicadas! -->
<h1 data-webbo-key="title">
Título aqui
</h1>
<p data-webbo-key="title">
Subtítulo aqui
</p>
<!-- Repetição sequencial -->
<div data-webbo-item="team-0">...</div>
<div data-webbo-item="team-1">...</div>
<div data-webbo-item="team-2">...</div>
<!-- Índices pulados! -->
<div data-webbo-item="team-1">...</div>
<div data-webbo-item="team-3">...</div>
<div data-webbo-item="team-5">...</div>
Resultado Final
GIF: Fluxo completo — upload do ZIP, editor visual, publicação e site no ar
Referência Rápida
| Atributo | Onde usar | Valor |
|---|---|---|
data-webbo-key |
Qualquer elemento editável | String única na página (ex: "hero-title") |
data-webbo-type |
Junto com data-webbo-key |
text | textarea | image | link | richtext | styled-text |
data-webbo-seo |
<title>, <meta> |
"title" | "description" |
data-webbo-item |
Container de item repetido | "prefixo-índice" (ex: "team-0") |
data-webbo-highlight-class |
Junto com styled-text |
Classes CSS do span de destaque |
data-webbo-collection |
Container de listagem CMS | Nome da coleção (ex: "products") |
data-webbo-collection-item |
Template de item dentro da coleção | (sem valor) |
data-webbo-field |
Campo dentro de coleção | Nome do campo CMS (ex: "name", "image") |
data-webbo-form |
<form> |
(sem valor) — envia leads ao Inbox |
data-webbo-form-success |
Elemento dentro do form | (sem valor) — exibido após envio |
Exemplo: Template Completo
Uma landing page completa usando todos os recursos do Webbo Pages:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-webbo-seo="title">Minha Empresa</title>
<meta name="description" data-webbo-seo="description"
content="Soluções digitais para seu negócio">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ===== HERO ===== -->
<header>
<img data-webbo-key="logo" src="logo.svg" alt="Logo">
<h1 data-webbo-key="hero-title"
data-webbo-type="styled-text"
data-webbo-highlight-class="text-blue-500">
Soluções que <span class="text-blue-500">transformam</span>
</h1>
<p data-webbo-key="hero-subtitle">Descubra como podemos ajudar</p>
<a data-webbo-key="hero-cta" href="#contato">Fale Conosco</a>
<img data-webbo-key="hero-img" src="hero.jpg" alt="Hero">
</header>
<!-- ===== SERVIÇOS (repetição) ===== -->
<section>
<h2 data-webbo-key="services-heading">Nossos Serviços</h2>
<div data-webbo-item="svc-0">
<img data-webbo-key="svc-0-img" src="s1.svg">
<h3 data-webbo-key="svc-0-title">Serviço 1</h3>
<p data-webbo-key="svc-0-desc">Descrição</p>
</div>
<div data-webbo-item="svc-1">
<img data-webbo-key="svc-1-img" src="s2.svg">
<h3 data-webbo-key="svc-1-title">Serviço 2</h3>
<p data-webbo-key="svc-1-desc">Descrição</p>
</div>
<div data-webbo-item="svc-2">
<img data-webbo-key="svc-2-img" src="s3.svg">
<h3 data-webbo-key="svc-2-title">Serviço 3</h3>
<p data-webbo-key="svc-2-desc">Descrição</p>
</div>
</section>
<!-- ===== SOBRE ===== -->
<section>
<h2 data-webbo-key="about-title">Sobre Nós</h2>
<div data-webbo-key="about-text"
data-webbo-type="richtext">
<p>Somos uma empresa focada em...</p>
</div>
<img data-webbo-key="about-img" src="team.jpg">
</section>
<!-- ===== FORMULÁRIO ===== -->
<section id="contato">
<h2 data-webbo-key="form-title">Fale Conosco</h2>
<form data-webbo-form>
<input name="name" placeholder="Nome" required>
<input name="email" type="email" placeholder="Email" required>
<input name="phone" type="tel" placeholder="Telefone">
<textarea name="message" placeholder="Mensagem"></textarea>
<button type="submit">Enviar</button>
<div data-webbo-form-success style="display:none">
Mensagem enviada com sucesso!
</div>
</form>
</section>
<!-- ===== FOOTER ===== -->
<footer>
<p data-webbo-key="footer-text">© 2025 Minha Empresa</p>
</footer>
</body>
</html>
Pronto para criar seu template?
Baixe o guia completo em Markdown e envie para sua IA favorita para te ajudar a criar o template perfeito.
