<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Homehost</title>
	<atom:link href="https://www.homehost.com.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.homehost.com.br/blog/</link>
	<description>Hospedagem De Sites</description>
	<lastBuildDate>Tue, 10 Nov 2026 20:19:01 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://www.homehost.com.br/blog/wp-content/uploads/2022/10/cropped-icon-32x32-1.png</url>
	<title>Homehost</title>
	<link>https://www.homehost.com.br/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">213695867</site>	<item>
		<title>Gerador de assinatura de e-mail grátis: crie a sua</title>
		<link>https://www.homehost.com.br/blog/contas-de-email/gerador-de-assinatura-de-e-mail/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Tue, 10 Nov 2026 16:06:22 +0000</pubDate>
				<category><![CDATA[Contas de email]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18665</guid>

					<description><![CDATA[<p>Preencha os seus dados no gerador abaixo, escolha o modelo e a cor e copie a assinatura de e-mail pronta. Ela funciona no Gmail, no Outlook, no Mail do Mac, no Thunderbird e no webmail. A ferramenta é gratuita e não pede cadastro. A assinatura de e-mail é o bloco que aparece no fim de [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/contas-de-email/gerador-de-assinatura-de-e-mail/" data-wpel-link="internal" target="_self">Gerador de assinatura de e-mail grátis: crie a sua</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Preencha os seus dados no gerador abaixo, escolha o modelo e a cor e copie a assinatura de e-mail pronta. Ela funciona no Gmail, no Outlook, no Mail do Mac, no Thunderbird e no webmail. A ferramenta é gratuita e não pede cadastro.</strong></p>



<p class="wp-block-paragraph">A assinatura de e-mail é o bloco que aparece no fim de cada mensagem, com o seu nome e os seus dados de contato. Numa empresa, ela faz o papel de cartão de visita: mostra quem está escrevendo, de onde e como falar com essa pessoa por outro canal. Este guia traz o gerador, mostra o que incluir e explica como instalar a assinatura em cada programa de e-mail.</p>



<h2 class="wp-block-heading">Crie a sua assinatura de e-mail</h2>



<p class="wp-block-paragraph">Só o nome é obrigatório. Os outros campos entram na assinatura conforme você preenche, e o resultado muda na hora. No fim, a ferramenta oferece dois botões:</p>



<ul class="wp-block-list">
<li><strong>Copiar assinatura:</strong> copia a assinatura já formatada, para colar direto no Gmail, no Outlook, no Mail do Mac e no webmail.</li>



<li><strong>Copiar código HTML:</strong> copia o código da assinatura, para programas que pedem HTML, como o Thunderbird.</li>
</ul>



<div class="hh-sig" id="hh-sig" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-sig"); if (!root0) { return; } var S2 = "/" + "/"; var PFX = "hh-sig-"; function U(n) { return String.fromCharCode(n); } function H(h, p) { return "https:" + S2 + h + p; } var NAVY = "#0b3d91"; var DOT = " " + U(183) + " "; var BAR = "  " + U(8226) + "  "; var NL = U(10); var L_MAIL = H("www.homehost.com.br", "/hospedagem-de-e-mails/"); var FREE = ["gmail.com", "hotmail.com", "outlook.com", "outlook.com.br", "live.com", "yahoo.com", "yahoo.com.br", "bol.com.br", "uol.com.br", "icloud.com", "terra.com.br", "msn.com"]; var COLORS = [["#0b3d91", "Azul"], ["#15803d", "Verde"], ["#b42318", "Vermelho"], ["#7c3aed", "Roxo"], ["#c2410c", "Laranja"], ["#111827", "Preto"]]; var TPL = [["side", "Barra lateral"], ["classic", "Cl"+U(225)+"ssica"], ["compact", "Compacta"]]; var SAMPLE = {name: "Maria Silva", role: "Gerente comercial", org: "Sua Empresa", tel: "(11) 99999-0000", wa: true, mail: "maria@suaempresa.com.br", site: "www.suaempresa.com.br", addr: "", logo: "", lsize: 72, li: "", ig: "@suaempresa", fb: "", extra: ""}; var FIELDS = [["name", "Nome", "Maria Silva", "name"], ["role", "Cargo", "Gerente comercial", "organization-title"], ["org", "Empresa", "Sua Empresa", "organization"], ["tel", "Telefone", "(11) 99999-0000", "tel"], ["mail", "E-mail", "maria@suaempresa.com.br", "email"], ["site", "Site", "www.suaempresa.com.br", "url"], ["addr", "Endere"+U(231)+"o (opcional)", "Rua Exemplo, 100, S"+U(227)+"o Paulo, SP", "off"], ["logo", "Endere"+U(231)+"o da imagem do logo (opcional)", "https:" + S2 + "www.suaempresa.com.br/logo.png", "off"], ["li", "LinkedIn (opcional)", "linkedin.com/in/mariasilva", "off"], ["ig", "Instagram (opcional)", "@suaempresa", "off"], ["fb", "Facebook (opcional)", "facebook.com/suaempresa", "off"], ["extra", "Frase final (opcional)", "Atendimento de segunda a sexta, das 9h "+U(224)+"s 18h", "off"]]; var HOW = [ ["gmail", "Gmail", ["Clique em Copiar assinatura.", "No Gmail, clique na engrenagem e em Ver todas as configura"+U(231)+U(245)+"es.", "Na aba Geral, v"+U(225)+" at"+U(233)+" Assinatura e clique em Criar nova.", "Cole a assinatura na caixa (Ctrl + V) e, em Padr"+U(245)+"es de assinatura, escolha-a para os novos e-mails.", "No fim da p"+U(225)+"gina, clique em Salvar altera"+U(231)+U(245)+"es."]], ["outlook", "Outlook novo e Outlook na web", ["Clique em Copiar assinatura.", "No Outlook, clique na engrenagem (Configura"+U(231)+U(245)+"es).", "Abra Contas e depois Assinaturas. Em algumas vers"+U(245)+"es da web, o caminho "+U(233)+" Email e depois Redigir e responder.", "Clique em Nova assinatura, d"+U(234)+" um nome e cole (Ctrl + V).", "Escolha a assinatura padr"+U(227)+"o para as novas mensagens e clique em Salvar."]], ["classic", "Outlook cl"+U(225)+"ssico (Windows)", ["Clique em Copiar assinatura.", "No Outlook, abra Arquivo, depois Op"+U(231)+U(245)+"es, Email e Assinaturas.", "Clique em Novo, d"+U(234)+" um nome e cole a assinatura na caixa de edi"+U(231)+U(227)+"o.", "Em Escolher assinatura padr"+U(227)+"o, selecione-a para as novas mensagens e clique em OK."]], ["apple", "Mail do Mac", ["Clique em Copiar assinatura.", "No Mail, abra o menu Mail, depois Ajustes e Assinaturas.", "Selecione a conta, clique no bot"+U(227)+"o de adicionar (+) e d"+U(234)+" um nome.", "Cole a assinatura na coluna da direita (Command + V).", "Se aparecer a op"+U(231)+U(227)+"o de sempre usar a fonte padr"+U(227)+"o da mensagem, desmarque-a para manter as cores e os tamanhos."]], ["thunder", "Thunderbird", ["Clique em Copiar c"+U(243)+"digo HTML.", "No Thunderbird, abra o menu e clique em Configura"+U(231)+U(245)+"es da conta.", "Selecione a conta na coluna da esquerda.", "Marque a op"+U(231)+U(227)+"o Usar HTML e cole o c"+U(243)+"digo no campo Texto de assinatura."]], ["webmail", "Webmail da hospedagem (Roundcube)", ["Clique em Copiar assinatura.", "No webmail, abra Configura"+U(231)+U(245)+"es e depois Identidades.", "Clique no seu endere"+U(231)+"o de e-mail.", "No campo Assinatura, ative a op"+U(231)+U(227)+"o de assinatura em HTML e cole a assinatura.", "Clique em Salvar.", "Em Prefer"+U(234)+"ncias, na parte Redigir mensagens, deixe Criar mensagens em HTML em Sempre e salve."]] ]; var st = {color: COLORS[0][0], logoBad: false, logoUrl: ""}; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function val(id) { var e = el(id); return e ? String(or(e.value, "")).trim() : ""; } function digits(s) { var o = ""; for (var i = 0; i !== s.length; i++) { if (has("0123456789", s.charAt(i))) { o += s.charAt(i); } } return o; } function isHttp(s) { return s.indexOf("http:" + S2) === 0 ? true : s.indexOf("https:" + S2) === 0; } function strip(s) { var p = s.indexOf(S2); if (p !== -1) { s = s.slice(p + 2); } while (s.charAt(s.length - 1) === "/") { s = s.slice(0, -1); } return s; } function url(s) { return isHttp(s) ? s : "https:" + S2 + s; } function social(v, base, sub) { if (!v) { return ""; } if (isHttp(v)) { return v; } if (v.charAt(0) === "@") { v = v.slice(1); } if (has(v, ".") ? has(v, "/") : false) { return "https:" + S2 + v; } return "https:" + S2 + base + "/" + sub + v; } function phone(d) { var n = digits(d.tel); var e164 = ""; if (n.length === 10 ? true : n.length === 11) { e164 = "55" + n; } if ((n.length === 12 ? true : n.length === 13) ? n.indexOf("55") === 0 : false) { e164 = n; } return e164; } function mailOk(m) { var a = m.indexOf("@"); if (lt(a, 1)) { return false; } var dom = m.slice(a + 1); return has(dom, ".") ? (!has(m, " ") ? !has(dom, "@") : false) : false; } function initials(name) { var p = name.split(" "); var w = []; for (var i = 0; i !== p.length; i++) { if (p[i]) { w.push(p[i]); } } if (!w.length) { return ""; } var a = w[0].charAt(0); var b = gt(w.length, 1) ? w[w.length - 1].charAt(0) : ""; return (a + b).toUpperCase(); } function mk(p, tag, text, style) { return add(p, tag, text, style); } function tbl(p) { var t = mk(p, "table", "", "border-collapse:collapse;font-family:Arial,Helvetica,sans-serif;"); t.setAttribute("cellpadding", "0"); t.setAttribute("cellspacing", "0"); t.setAttribute("border", "0"); t.setAttribute("role", "presentation"); return mk(t, "tbody", "", ""); } function row(tb, style) { var r = mk(tb, "tr", "", ""); return mk(r, "td", "", style); } function link(p, text, href, color) { var a = mk(p, "a", text, "color:" + color + ";text-decoration:none;"); a.setAttribute("href", href); return a; } function sep(p, s) { mk(p, "span", s, "color:#9ca3af;"); } function contacts(d, c) { var out = []; var e164 = phone(d); if (d.tel) { out.push(function (p) { if (e164) { link(p, d.tel, "tel:+" + e164, "#1f2937"); } else { mk(p, "span", d.tel, ""); } if (d.wa ? e164 : false) { sep(p, DOT); link(p, "WhatsApp", H("wa.me", "/" + e164), c); } }); } if (d.mail) { out.push(function (p) { link(p, d.mail, "mailto:" + d.mail, c); }); } if (d.site) { out.push(function (p) { link(p, strip(d.site), url(d.site), c); }); } return out; } function socials(d) { var out = []; var a = social(d.li, "www.linkedin.com", "in/"); var b = social(d.ig, "www.instagram.com", ""); var f = social(d.fb, "www.facebook.com", ""); if (a) { out.push(["LinkedIn", a]); } if (b) { out.push(["Instagram", b]); } if (f) { out.push(["Facebook", f]); } return out; } function textRows(tb, d, c) { var T = "font-family:Arial,Helvetica,sans-serif;"; mk(row(tb, T + "font-size:16px;font-weight:bold;color:" + c + ";line-height:1.3;"), "span", d.name, ""); var sub = []; if (d.role) { sub.push(d.role); } if (d.org) { sub.push(d.org); } if (sub.length) { mk(row(tb, T + "font-size:13px;color:#4b5563;line-height:1.4;padding-bottom:6px;"), "span", sub.join(DOT), ""); } var cs = contacts(d, c); for (var i = 0; i !== cs.length; i++) { cs[i](row(tb, T + "font-size:13px;color:#1f2937;line-height:1.5;")); } if (d.addr) { mk(row(tb, T + "font-size:12px;color:#6b7280;line-height:1.5;"), "span", d.addr, ""); } var so = socials(d); if (so.length) { var td = row(tb, T + "font-size:12px;line-height:1.5;padding-top:4px;"); for (var k = 0; k !== so.length; k++) { if (k) { sep(td, DOT); } link(td, so[k][0], so[k][1], c); } } if (d.extra) { mk(row(tb, T + "font-size:11px;color:#6b7280;line-height:1.4;padding-top:6px;"), "span", d.extra, ""); } } function logoImg(p, d) { var im = mk(p, "img", "", "display:block;border:0;"); im.setAttribute("src", d.logo); im.setAttribute("width", String(d.lsize)); im.setAttribute("alt", d.org ? "Logo " + d.org : "Logo"); return im; } function build(box, d, c, tpl) { box.textContent = ""; var useLogo = d.logo ? !st.logoBad : false; if (tpl === "compact") { var tb = tbl(box); var T = "font-family:Arial,Helvetica,sans-serif;"; var t1 = row(tb, T + "font-size:14px;color:#1f2937;line-height:1.5;"); mk(t1, "span", d.name, "font-weight:bold;color:" + c + ";"); var sub = []; if (d.role) { sub.push(d.role); } if (d.org) { sub.push(d.org); } if (sub.length) { sep(t1, BAR); mk(t1, "span", sub.join(DOT), "color:#4b5563;font-size:13px;"); } var cs = contacts(d, c); if (cs.length) { var t2 = row(tb, T + "font-size:13px;color:#1f2937;line-height:1.5;"); for (var i = 0; i !== cs.length; i++) { if (i) { sep(t2, BAR); } cs[i](t2); } } var so = socials(d); if (so.length) { var t3 = row(tb, T + "font-size:12px;line-height:1.5;"); for (var k = 0; k !== so.length; k++) { if (k) { sep(t3, DOT); } link(t3, so[k][0], so[k][1], c); } } if (d.extra) { mk(row(tb, T + "font-size:11px;color:#6b7280;line-height:1.4;padding-top:4px;"), "span", d.extra, ""); } return; } if (tpl === "classic") { var tb2 = tbl(box); if (useLogo) { logoImg(row(tb2, "padding-bottom:8px;"), d); } var holder = row(tb2, "border-top:2px solid " + c + ";padding-top:8px;"); textRows(tbl(holder), d, c); return; } var tb3 = tbl(box); var r = mk(tb3, "tr", "", ""); var left = mk(r, "td", "", "vertical-align:top;padding-right:14px;"); if (useLogo) { logoImg(left, d); } else { var ib = tbl(left); var cell = row(ib, "width:56px;height:56px;background-color:" + c + ";color:#ffffff;font-family:Arial,Helvetica,sans-serif;font-size:20px;font-weight:bold;text-align:center;vertical-align:middle;"); cell.setAttribute("width", "56"); cell.setAttribute("height", "56"); cell.setAttribute("bgcolor", c); cell.setAttribute("align", "center"); cell.textContent = initials(d.name); } var right = mk(r, "td", "", "vertical-align:top;border-left:3px solid " + c + ";padding-left:14px;"); textRows(tbl(right), d, c); } function plain(d) { var L = [d.name]; var sub = []; if (d.role) { sub.push(d.role); } if (d.org) { sub.push(d.org); } if (sub.length) { L.push(sub.join(" - ")); } if (d.tel) { L.push(d.tel); } if (d.mail) { L.push(d.mail); } if (d.site) { L.push(strip(d.site)); } if (d.addr) { L.push(d.addr); } var so = socials(d); for (var i = 0; i !== so.length; i++) { L.push(so[i][0] + ": " + so[i][1]); } if (d.extra) { L.push(d.extra); } return L.join(NL); } function read() { var d = {}; for (var i = 0; i !== FIELDS.length; i++) { d[FIELDS[i][0]] = val(FIELDS[i][0]); } d.wa = el("wa").checked; d.lsize = parseInt(el("lsize").value, 10); return d; } function notes(box, arr) { box.textContent = ""; var C = {warn: ["#b45309", "#fff4e5", U(9888)], info: ["#1d4ed8", "#eef3ff", U(8505)]}; for (var i = 0; i !== arr.length; i++) { var c = C[arr[i][0]]; var w = add(box, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:7px 10px;margin:8px 0 0;font-size:13.5px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(w, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); w.appendChild(document.createTextNode(arr[i][1])); if (arr[i][2]) { var a = add(w, "a", arr[i][2], "color:#1d4ed8;font-weight:700;"); a.href = arr[i][3]; w.appendChild(document.createTextNode(".")); } } } function update() { var d = read(); var N = []; var real = !!d.name; var use = real ? d : SAMPLE; if (d.logo !== st.logoUrl) { st.logoUrl = d.logo; st.logoBad = false; } if (d.logo) { if (d.logo.indexOf("https:" + S2) !== 0) { st.logoBad = true; N.push(["warn", "O endere"+U(231)+"o do logo precisa come"+U(231)+"ar com https:" + S2 + ". A imagem tem de estar publicada na internet, por exemplo no seu site."]); } else if (st.logoBad) { N.push(["warn", "A imagem do logo n"+U(227)+"o carregou. Confira o endere"+U(231)+"o: ele precisa abrir a imagem direto no navegador."]); } } var tpl = el("tpl").value; build(el("sig"), use, st.color, tpl); var im = el("sig").querySelector("img"); if (im) { im.addEventListener("error", function () { if (!st.logoBad) { st.logoBad = true; update(); } }); } if (real ? (d.logo ? tpl === "compact" : false) : false) { N.push(["info", "O modelo Compacta n"+U(227)+"o mostra o logo."]); } el("demo").style.display = real ? "none" : "block"; if (d.mail ? !mailOk(d.mail) : false) { N.push(["warn", "O e-mail parece incompleto. Confira se tem o @ e o dom"+U(237)+"nio."]); } if (d.mail ? mailOk(d.mail) : false) { var dom = d.mail.slice(d.mail.indexOf("@") + 1).toLowerCase(); if (FREE.indexOf(dom) !== -1) { N.push(["info", "Um endere"+U(231)+"o com o dom"+U(237)+"nio da empresa, como voce@suaempresa.com.br, passa mais confian"+U(231)+"a do que um @" + dom + ". Veja o ", "E-mail Corporativo da Homehost", L_MAIL]); } } if (d.tel ? !phone(d) : false) { N.push(["info", "O telefone vai aparecer como texto, sem link para ligar. Para criar o link, digite o DDD e o n"+U(250)+"mero, com 10 ou 11 d"+U(237)+"gitos."]); } var html = el("sig").innerHTML; el("code").value = real ? html : ""; if (real ? gt(html.length, 10000) : false) { N.push(["warn", "A assinatura passou de 10.000 caracteres, o limite do Gmail. Tire algum campo opcional."]); } el("b-rich").disabled = !real; el("b-html").disabled = !real; el("b-rich").style.opacity = real ? "1" : ".5"; el("b-html").style.opacity = real ? "1" : ".5"; st.data = use; st.real = real; notes(el("notes"), N); } function flash(b, text, old) { b.textContent = text; setTimeout(function () { b.textContent = old; }, 1800); } function selectCopy(node) { try { var r = document.createRange(); r.selectNodeContents(node); var s = window.getSelection(); s.removeAllRanges(); s.addRange(r); var ok = document.execCommand("copy"); s.removeAllRanges(); return ok; } catch (e) { return false; } } function copyRich() { var b = el("b-rich"); var old = "Copiar assinatura"; if (!st.real) { return; } var html = el("sig").innerHTML; var text = plain(st.data); function fallback() { if (selectCopy(el("sig"))) { flash(b, "Copiada", old); } else { flash(b, "Selecione e copie", old); } } if ((navigator.clipboard ? navigator.clipboard.write : false) ? window.ClipboardItem : false) { try { var item = new ClipboardItem({"text/html": new Blob([html], {type: "text/html"}), "text/plain": new Blob([text], {type: "text/plain"})}); navigator.clipboard.write([item]).then(function () { flash(b, "Copiada", old); }, fallback); } catch (e) { fallback(); } } else { fallback(); } } function copyHtml() { var b = el("b-html"); var old = "Copiar c"+U(243)+"digo HTML"; if (!st.real) { return; } var html = el("sig").innerHTML; function fallback() { var t = el("code"); t.focus(); t.select(); var ok = false; try { ok = document.execCommand("copy"); } catch (e) { ok = false; } flash(b, ok ? "Copiado" : "Selecione e copie", old); } if (navigator.clipboard ? navigator.clipboard.writeText : false) { navigator.clipboard.writeText(html).then(function () { flash(b, "Copiado", old); }, fallback); } else { fallback(); } } function showHow() { var k = el("how").value; var box = el("how-out"); box.textContent = ""; for (var i = 0; i !== HOW.length; i++) { if (HOW[i][0] === k) { var ol = add(box, "ol", "", "margin:8px 0 0;padding-left:20px;font-size:14px;line-height:1.6;color:#0F172A;"); for (var s = 0; s !== HOW[i][2].length; s++) { add(ol, "li", HOW[i][2][s], "margin:0 0 2px;"); } } } } var INP = "width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid #9aa7b8;border-radius:8px;font-size:14.5px;background:#ffffff;color:#0F172A;margin:0;font-family:Arial,Helvetica,sans-serif;"; function lbl(p, text, id) { var l = add(p, "label", text, "display:block;font-weight:700;font-size:13px;color:" + NAVY + ";margin-bottom:3px;"); l.setAttribute("for", PFX + id); return l; } function sub(p, text) { return add(p, "div", text, "font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 6px;"); } function btn(p, text, primary) { var b = add(p, "button", text, primary ? "padding:9px 18px;border:1px solid " + NAVY + ";background:" + NAVY + ";color:#ffffff;border-radius:8px;cursor:pointer;font-size:14.5px;font-weight:700;margin:0;" : "padding:9px 14px;border:1px solid " + NAVY + ";background:#ffffff;color:" + NAVY + ";border-radius:8px;cursor:pointer;font-size:14px;font-weight:700;margin:0;"); b.type = "button"; return b; } add(root0, "div", "Gerador de assinatura de e-mail", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Preencha os seus dados, escolha o modelo e a cor e copie a assinatura pronta para colar no Gmail, no Outlook ou em outro programa de e-mail.", "margin:0 0 4px;line-height:1.5;font-size:14.5px;"); sub(root0, "Seus dados"); var grid = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:10px 12px;"); for (var f0 = 0; f0 !== FIELDS.length; f0++) { var F = FIELDS[f0]; var wide = F[0] === "addr" ? true : (F[0] === "logo" ? true : F[0] === "extra"); var c0 = add(grid, "div", "", "flex:1 1 " + (wide ? "100%" : "220px") + ";min-width:0;"); lbl(c0, F[1], F[0]); var i0 = add(c0, "input", "", INP); i0.id = PFX + F[0]; i0.type = F[0] === "mail" ? "email" : (F[0] === "tel" ? "tel" : "text"); i0.setAttribute("placeholder", F[2]); i0.setAttribute("autocomplete", F[3]); i0.setAttribute("spellcheck", "false"); i0.addEventListener("input", update); if (F[0] === "tel") { var wl = add(c0, "label", "", "display:inline-flex;align-items:center;gap:6px;margin-top:5px;font-size:13px;color:#0F172A;cursor:pointer;"); var wc = add(wl, "input", "", "margin:0;width:15px;height:15px;"); wc.type = "checkbox"; wc.id = PFX + "wa"; wc.checked = true; wc.addEventListener("change", update); add(wl, "span", "Esse n"+U(250)+"mero tem WhatsApp"); } if (F[0] === "logo") { add(c0, "div", "A imagem precisa estar publicada na internet. Imagens do computador n"+U(227)+"o aparecem para quem recebe o e-mail.", "font-size:12.5px;color:#475569;margin-top:3px;line-height:1.45;"); } } sub(root0, "Apar"+U(234)+"ncia"); var arow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;"); var a1 = add(arow, "div", "", "flex:1 1 180px;min-width:0;"); lbl(a1, "Modelo", "tpl"); var ts = add(a1, "select", "", INP); ts.id = PFX + "tpl"; for (var t0 = 0; t0 !== TPL.length; t0++) { add(ts, "option", TPL[t0][1]).value = TPL[t0][0]; } ts.addEventListener("change", update); var a2 = add(arow, "div", "", "flex:1 1 150px;min-width:0;"); lbl(a2, "Largura do logo", "lsize"); var ls = add(a2, "select", "", INP); ls.id = PFX + "lsize"; var LS = [56, 72, 96, 120]; for (var l0 = 0; l0 !== LS.length; l0++) { var lo = add(ls, "option", LS[l0] + " px"); lo.value = String(LS[l0]); } ls.value = "72"; ls.addEventListener("change", update); var a3 = add(arow, "div", "", "flex:2 1 260px;min-width:0;"); add(a3, "div", "Cor", "font-weight:700;font-size:13px;color:" + NAVY + ";margin-bottom:3px;"); var cw = add(a3, "div", "", "display:flex;flex-wrap:wrap;gap:6px;align-items:center;"); cw.id = PFX + "colors"; function pickColor(c) { st.color = c; var bs = cw.querySelectorAll("button"); for (var i = 0; i !== bs.length; i++) { bs[i].style.outline = bs[i].getAttribute("data-c") === c ? "3px solid #93c5fd" : "none"; bs[i].setAttribute("aria-pressed", bs[i].getAttribute("data-c") === c ? "true" : "false"); } update(); } for (var k0 = 0; k0 !== COLORS.length; k0++) { var cb = add(cw, "button", "", "width:30px;height:30px;border-radius:15px;border:2px solid #ffffff;box-shadow:0 0 0 1px #9aa7b8;background:" + COLORS[k0][0] + ";cursor:pointer;padding:0;margin:0;"); cb.type = "button"; cb.setAttribute("data-c", COLORS[k0][0]); cb.setAttribute("aria-label", "Cor " + COLORS[k0][1]); cb.setAttribute("title", COLORS[k0][1]); cb.addEventListener("click", function () { pickColor(this.getAttribute("data-c")); }); } var cp = add(cw, "input", "", "width:38px;height:32px;padding:0;border:1px solid #9aa7b8;border-radius:6px;background:#ffffff;cursor:pointer;margin:0 0 0 4px;"); cp.type = "color"; cp.id = PFX + "cpick"; cp.value = COLORS[0][0]; cp.setAttribute("aria-label", "Outra cor"); cp.addEventListener("input", function () { pickColor(cp.value); }); sub(root0, "Sua assinatura"); var demo = add(root0, "div", "Exemplo com dados fict"+U(237)+"cios. Preencha o seu nome para ver a sua assinatura.", "font-size:13px;color:#475569;margin-bottom:6px;"); demo.id = PFX + "demo"; var pv = add(root0, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:16px;overflow-x:auto;"); var sg = add(pv, "div", ""); sg.id = PFX + "sig"; var nb = add(root0, "div", ""); nb.id = PFX + "notes"; nb.setAttribute("aria-live", "polite"); var brow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;"); var b1 = btn(brow, "Copiar assinatura", true); b1.id = PFX + "b-rich"; b1.addEventListener("click", copyRich); var b2 = btn(brow, "Copiar c"+U(243)+"digo HTML", false); b2.id = PFX + "b-html"; b2.addEventListener("click", copyHtml); var ta = add(root0, "textarea", "", INP + "margin-top:10px;min-height:70px;resize:vertical;font-family:Consolas,Menlo,monospace;font-size:12px;line-height:1.4;"); ta.id = PFX + "code"; ta.setAttribute("readonly", "readonly"); ta.setAttribute("aria-label", "C"+U(243)+"digo HTML da assinatura"); ta.setAttribute("placeholder", "O c"+U(243)+"digo HTML aparece aqui depois que voc"+U(234)+" preencher o nome."); sub(root0, "Como instalar"); var hw = add(root0, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:12px 14px;"); lbl(hw, "Onde voc"+U(234)+" l"+U(234)+" os seus e-mails?", "how"); var hs = add(hw, "select", "", INP); hs.id = PFX + "how"; for (var h0 = 0; h0 !== HOW.length; h0++) { add(hs, "option", HOW[h0][1]).value = HOW[h0][0]; } hs.addEventListener("change", showHow); var ho = add(hw, "div", ""); ho.id = PFX + "how-out"; add(root0, "p", "Tudo acontece no seu navegador: os dados que voc"+U(234)+" digita n"+U(227)+"o s"+U(227)+"o enviados nem guardados.", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); pickColor(COLORS[0][0]); showHow(); })();</script>



<h2 class="wp-block-heading">O que colocar na assinatura de e-mail</h2>



<p class="wp-block-paragraph">Uma boa assinatura responde a três perguntas: quem é você, onde trabalha e como falar com você. O resto é opcional e só entra se ajudar quem recebe a mensagem.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Item</th><th>Quando incluir</th><th>Cuidado</th></tr></thead><tbody><tr><td>Nome completo</td><td>Sempre</td><td>Use o nome pelo qual os clientes conhecem você</td></tr><tr><td>Cargo e empresa</td><td>Sempre, no e-mail de trabalho</td><td>Cargo curto, sem siglas internas</td></tr><tr><td>Telefone</td><td>Sempre</td><td>Com DDD. Um número só, o que você atende</td></tr><tr><td>E-mail</td><td>Recomendado</td><td>Ele continua visível quando a mensagem é encaminhada</td></tr><tr><td>Site</td><td>Recomendado</td><td>O endereço da página inicial basta</td></tr><tr><td>Logo</td><td>Opcional</td><td>Imagem leve e publicada na internet</td></tr><tr><td>Redes sociais</td><td>Opcional</td><td>Só os perfis que a empresa mantém atualizados</td></tr><tr><td>Endereço</td><td>Quando há atendimento presencial</td><td>Uma linha só</td></tr><tr><td>Frase final</td><td>Opcional</td><td>Horário de atendimento ou um aviso curto</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/o-que-colocar-na-assinatura-de-email-777x1024.png" alt="Infográfico com o que colocar na assinatura de e-mail, dividido em itens obrigatórios, recomendados e opcionais, e três erros a evitar" class="wp-image-18667" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/o-que-colocar-na-assinatura-de-email-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/o-que-colocar-na-assinatura-de-email-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/o-que-colocar-na-assinatura-de-email-767x1012.png 767w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/o-que-colocar-na-assinatura-de-email.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">Se o telefone tem WhatsApp, o gerador cria o link que abre a conversa. Para um link com mensagem pronta ou com QR Code, use o <a href="https://www.homehost.com.br/blog/internet/link-do-whatsapp/" data-wpel-link="internal" target="_self">gerador de link do WhatsApp</a>.</p>



<h2 class="wp-block-heading">Qual modelo de assinatura escolher</h2>



<p class="wp-block-paragraph">O gerador tem três modelos, e todos usam os mesmos dados:</p>



<ul class="wp-block-list">
<li><strong>Barra lateral:</strong> o logo fica à esquerda, e os dados, à direita, separados por uma linha na cor que você escolheu. Sem logo, entram as iniciais do nome. Combina com quem fala com clientes e quer destacar a marca.</li>



<li><strong>Clássica:</strong> o logo fica em cima, e os dados, em uma coluna só. Funciona bem em telas estreitas, como a do celular.</li>



<li><strong>Compacta:</strong> nome, cargo e contatos em duas ou três linhas, sem logo e sem endereço. Serve para respostas e para quem troca muitas mensagens por dia.</li>
</ul>



<p class="wp-block-paragraph">O Gmail e o Outlook aceitam mais de uma assinatura e deixam escolher uma para as mensagens novas e outra para as respostas. Uma combinação comum é usar o modelo completo nas mensagens novas e o compacto nas respostas.</p>



<h2 class="wp-block-heading">Como colocar a assinatura no e-mail</h2>



<p class="wp-block-paragraph">O caminho muda conforme o programa. Em quase todos, basta clicar em <strong>Copiar assinatura</strong> no gerador e colar no campo de assinatura.</p>



<h3 class="wp-block-heading">Gmail</h3>



<ol class="wp-block-list">
<li>Clique na engrenagem e em <strong>Ver todas as configurações</strong>.</li>



<li>Na aba <strong>Geral</strong>, vá até a seção <strong>Assinatura</strong> e clique em <strong>Criar nova</strong>.</li>



<li>Dê um nome e cole a assinatura na caixa, com Ctrl + V.</li>



<li>Em <strong>Padrões de assinatura</strong>, escolha a assinatura para os novos e-mails e, se quiser, para as respostas.</li>



<li>No fim da página, clique em <strong>Salvar alterações</strong>.</li>
</ol>



<p class="wp-block-paragraph">O Gmail aceita assinaturas de até 10.000 caracteres, e a formatação também entra nessa conta. O gerador avisa se a sua passar desse limite.</p>



<h3 class="wp-block-heading">Outlook novo e Outlook na web</h3>



<ol class="wp-block-list">
<li>Clique na engrenagem, que abre as configurações.</li>



<li>Abra <strong>Contas</strong> e depois <strong>Assinaturas</strong>. Em algumas versões da web, o caminho é <strong>Email</strong> e depois <strong>Redigir e responder</strong>.</li>



<li>Clique em <strong>Nova assinatura</strong>, dê um nome e cole com Ctrl + V.</li>



<li>Escolha a assinatura padrão para as mensagens novas e para as respostas.</li>



<li>Clique em <strong>Salvar</strong>.</li>
</ol>



<p class="wp-block-paragraph">O tutorial de <a href="https://www.homehost.com.br/blog/contas-de-email/assinatura-outlook/" data-wpel-link="internal" target="_self">assinatura no Outlook</a> mostra essas telas com mais detalhes.</p>



<h3 class="wp-block-heading">Outlook clássico</h3>



<ol class="wp-block-list">
<li>Abra <strong>Arquivo</strong>, depois <strong>Opções</strong>, <strong>Email</strong> e <strong>Assinaturas</strong>.</li>



<li>Clique em <strong>Novo</strong> e dê um nome à assinatura.</li>



<li>Cole a assinatura na caixa de edição.</li>



<li>Em <strong>Escolher assinatura padrão</strong>, selecione-a para as novas mensagens e clique em <strong>OK</strong>.</li>
</ol>



<h3 class="wp-block-heading">Mail do Mac</h3>



<ol class="wp-block-list">
<li>Abra o menu <strong>Mail</strong>, depois <strong>Ajustes</strong> e <strong>Assinaturas</strong>.</li>



<li>Selecione a conta na coluna da esquerda.</li>



<li>Clique no botão de adicionar, com o sinal de mais, e dê um nome.</li>



<li>Cole a assinatura na coluna da direita, com Command + V.</li>
</ol>



<p class="wp-block-paragraph">Se a janela mostrar a opção de sempre usar a fonte padrão da mensagem, desmarque-a. Com ela marcada, o Mail troca as cores e os tamanhos da assinatura.</p>



<h3 class="wp-block-heading">Thunderbird</h3>



<p class="wp-block-paragraph">O Thunderbird pede o código da assinatura. Por isso, use o botão <strong>Copiar código HTML</strong>.</p>



<ol class="wp-block-list">
<li>Abra o menu e clique em <strong>Configurações da conta</strong>.</li>



<li>Selecione a conta na coluna da esquerda.</li>



<li>Marque a opção <strong>Usar HTML</strong>.</li>



<li>Cole o código no campo <strong>Texto de assinatura</strong>.</li>
</ol>



<h3 class="wp-block-heading">Webmail da hospedagem</h3>



<p class="wp-block-paragraph">No webmail Roundcube, que acompanha as hospedagens com cPanel, a assinatura fica nas identidades:</p>



<ol class="wp-block-list">
<li>Abra <strong>Configurações</strong> e depois <strong>Identidades</strong>.</li>



<li>Clique no seu endereço de e-mail.</li>



<li>No campo <strong>Assinatura</strong>, ative a opção de assinatura em HTML e cole a assinatura.</li>



<li>Clique em <strong>Salvar</strong>.</li>



<li>Em <strong>Preferências</strong>, na parte <strong>Redigir mensagens</strong>, deixe <strong>Criar mensagens em HTML</strong> em <strong>Sempre</strong> e salve.</li>
</ol>



<p class="wp-block-paragraph">Sem o último passo, o webmail escreve as mensagens em texto simples, e a assinatura sai sem cores e sem logo. O <a href="https://www.homehost.com.br/blog/tutoriais/como-criar-uma-assinatura-personalizada-para-seu-email/" data-wpel-link="internal" target="_self">tutorial de assinatura no webmail</a> mostra o caminho em vídeo.</p>



<h3 class="wp-block-heading">Celular</h3>



<p class="wp-block-paragraph">Nos aplicativos de e-mail do celular, a assinatura é configurada à parte, dentro das configurações do próprio aplicativo, e em geral aceita só texto simples. Use ali uma versão curta, com nome, cargo, empresa e telefone.</p>



<h2 class="wp-block-heading">Como colocar o logo na assinatura</h2>



<p class="wp-block-paragraph">O gerador não recebe o arquivo do logo: ele pede o endereço da imagem. Isso acontece porque a imagem da assinatura precisa estar publicada na internet para aparecer no e-mail de quem recebe. Uma imagem que está só no seu computador não chega ao destinatário.</p>



<p class="wp-block-paragraph">Para conseguir esse endereço:</p>



<ul class="wp-block-list">
<li><strong>Site em WordPress:</strong> envie o logo para a Biblioteca de mídia, clique na imagem e copie o campo <strong>URL do arquivo</strong>.</li>



<li><strong>Hospedagem com cPanel:</strong> envie o logo pelo Gerenciador de Arquivos para a pasta <code>public_html</code>. O endereço fica no formato <code>https://www.seusite.com.br/logo.png</code>.</li>
</ul>



<p class="wp-block-paragraph">Alguns cuidados com a imagem:</p>



<ul class="wp-block-list">
<li><strong>O endereço começa com https.</strong> Imagens em endereços sem https podem ser bloqueadas pelo programa de e-mail.</li>



<li><strong>A imagem é pequena e leve.</strong> O gerador oferece larguras de 56 a 120 pixels. Um arquivo PNG ou JPG com o dobro da largura escolhida fica nítido sem pesar.</li>



<li><strong>O fundo não é transparente.</strong> Em programas com tema escuro, um logo de letras escuras com fundo transparente pode sumir. Uma versão com fundo branco aparece nos dois temas.</li>



<li><strong>A assinatura faz sentido sem o logo.</strong> Vários programas só mostram imagens externas depois que o destinatário autoriza. Por isso o gerador escreve o nome, o telefone e os links em texto, e nunca dentro da imagem.</li>
</ul>



<h2 class="wp-block-heading">Erros comuns na assinatura de e-mail</h2>



<ul class="wp-block-list">
<li><strong>Assinatura feita de uma imagem só.</strong> Se o programa bloquear a imagem, não aparece nada. Além disso, ninguém consegue copiar o telefone, e os leitores de tela não leem o conteúdo.</li>



<li><strong>Informação demais.</strong> Três telefones, todas as redes sociais e uma citação no fim tiram a atenção do que importa. Deixe um canal de cada tipo.</li>



<li><strong>Muitas cores e fontes.</strong> Uma cor de destaque basta. O gerador usa a fonte Arial porque ela existe em praticamente qualquer aparelho. Uma fonte instalada só no seu computador é trocada por outra na tela de quem recebe.</li>



<li><strong>Logo grande ou pesado.</strong> A imagem empurra a mensagem para baixo e demora para abrir em conexões lentas.</li>



<li><strong>Assinatura completa em toda resposta.</strong> Numa conversa longa, o bloco repetido atrapalha a leitura. Use o modelo compacto nas respostas.</li>



<li><strong>Endereço gratuito em nome da empresa.</strong> Um <a href="mailto:contato@suaempresa.com.br">contato@suaempresa.com.br</a> na assinatura passa mais confiança do que um endereço @gmail.com. O guia de <a href="https://www.homehost.com.br/blog/contas-de-email/email-corporativo/" data-wpel-link="internal" target="_self">e-mail corporativo</a> explica como criar o seu, e o passo a passo para <a href="https://www.homehost.com.br/blog/dominio/como-ter-seu-proprio-dominio-de-e-mail/" data-wpel-link="internal" target="_self">ter o seu próprio domínio de e-mail</a> mostra quanto custa.</li>
</ul>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Assine com o e-mail da sua empresa</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">No E-mail Corporativo da Homehost, as contas usam o seu domínio, como contato@suaempresa.com.br, e funcionam no webmail, no Outlook, no Gmail e no celular. Os servidores ficam no Brasil, a migração das contas atuais é gratuita e o suporte atende pelo WhatsApp.</p>
<a href="https://www.homehost.com.br/hospedagem-de-e-mails/" style="display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Ver planos de e-mail</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>Como criar uma assinatura de e-mail?</strong><br>Preencha o nome, o cargo, a empresa e os contatos no gerador desta página, escolha o modelo e a cor e clique em Copiar assinatura. Depois, abra as configurações de assinatura do seu programa de e-mail, cole e salve. O caminho para o Gmail, o Outlook, o Mail do Mac, o Thunderbird e o webmail está neste guia.</p>



<p class="wp-block-paragraph"><strong>O gerador de assinatura de e-mail é grátis?</strong><br>Sim. A ferramenta é gratuita, não pede cadastro e não coloca nenhuma marca na sua assinatura. Tudo é feito no navegador: os dados que você digita não são enviados nem guardados.</p>



<p class="wp-block-paragraph"><strong>O que colocar na assinatura de e-mail profissional?</strong><br>Nome completo, cargo, empresa e um telefone com DDD. O e-mail e o site são recomendados. Logo, redes sociais e endereço são opcionais e só entram se ajudarem quem recebe a mensagem.</p>



<p class="wp-block-paragraph"><strong>Como colocar o logo na assinatura de e-mail?</strong><br>Publique a imagem na internet, por exemplo na Biblioteca de mídia do WordPress ou na pasta public_html da hospedagem, e cole o endereço dela no campo do logo. O endereço precisa começar com https e abrir a imagem direto no navegador.</p>



<p class="wp-block-paragraph"><strong>Por que a imagem da assinatura não aparece para quem recebe?</strong><br>As causas mais comuns são três: a imagem está só no seu computador, o endereço dela não começa com https ou o programa de quem recebe bloqueia imagens externas até a pessoa autorizar. Nos dois primeiros casos, publique a imagem na internet e gere a assinatura de novo.</p>



<p class="wp-block-paragraph"><strong>Como colocar assinatura no Gmail?</strong><br>Clique na engrenagem, em Ver todas as configurações e, na aba Geral, vá até Assinatura. Clique em Criar nova, cole a assinatura, escolha-a em Padrões de assinatura e clique em Salvar alterações no fim da página.</p>



<p class="wp-block-paragraph"><strong>Como colocar assinatura no Outlook?</strong><br>No Outlook novo, abra as configurações, depois Contas e Assinaturas, clique em Nova assinatura, cole e salve. No Outlook clássico, o caminho é Arquivo, Opções, Email e Assinaturas.</p>



<p class="wp-block-paragraph"><strong>A assinatura funciona no celular?</strong><br>Quem recebe vê a assinatura normalmente no celular. Para enviar com assinatura pelo aplicativo do celular, é preciso configurá-la dentro do próprio aplicativo, que em geral aceita só texto simples.</p>



<p class="wp-block-paragraph"><strong>Posso usar a assinatura com um e-mail @gmail.com?</strong><br>Pode. A assinatura funciona com qualquer endereço. Para uma empresa, um endereço com o próprio domínio, como <a href="mailto:contato@suaempresa.com.br">contato@suaempresa.com.br</a>, passa mais confiança do que um endereço gratuito.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Como criar uma assinatura de e-mail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Preencha o nome, o cargo, a empresa e os contatos no gerador desta página, escolha o modelo e a cor e clique em Copiar assinatura. Depois, abra as configurações de assinatura do seu programa de e-mail, cole e salve. O caminho para o Gmail, o Outlook, o Mail do Mac, o Thunderbird e o webmail está neste guia."
      }
    },
    {
      "@type": "Question",
      "name": "O gerador de assinatura de e-mail é grátis?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sim. A ferramenta é gratuita, não pede cadastro e não coloca nenhuma marca na sua assinatura. Tudo é feito no navegador: os dados que você digita não são enviados nem guardados."
      }
    },
    {
      "@type": "Question",
      "name": "O que colocar na assinatura de e-mail profissional?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Nome completo, cargo, empresa e um telefone com DDD. O e-mail e o site são recomendados. Logo, redes sociais e endereço são opcionais e só entram se ajudarem quem recebe a mensagem."
      }
    },
    {
      "@type": "Question",
      "name": "Como colocar o logo na assinatura de e-mail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Publique a imagem na internet, por exemplo na Biblioteca de mídia do WordPress ou na pasta public_html da hospedagem, e cole o endereço dela no campo do logo. O endereço precisa começar com https e abrir a imagem direto no navegador."
      }
    },
    {
      "@type": "Question",
      "name": "Por que a imagem da assinatura não aparece para quem recebe?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "As causas mais comuns são três: a imagem está só no seu computador, o endereço dela não começa com https ou o programa de quem recebe bloqueia imagens externas até a pessoa autorizar. Nos dois primeiros casos, publique a imagem na internet e gere a assinatura de novo."
      }
    },
    {
      "@type": "Question",
      "name": "Como colocar assinatura no Gmail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Clique na engrenagem, em Ver todas as configurações e, na aba Geral, vá até Assinatura. Clique em Criar nova, cole a assinatura, escolha-a em Padrões de assinatura e clique em Salvar alterações no fim da página."
      }
    },
    {
      "@type": "Question",
      "name": "Como colocar assinatura no Outlook?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No Outlook novo, abra as configurações, depois Contas e Assinaturas, clique em Nova assinatura, cole e salve. No Outlook clássico, o caminho é Arquivo, Opções, Email e Assinaturas."
      }
    },
    {
      "@type": "Question",
      "name": "A assinatura funciona no celular?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Quem recebe vê a assinatura normalmente no celular. Para enviar com assinatura pelo aplicativo do celular, é preciso configurá-la dentro do próprio aplicativo, que em geral aceita só texto simples."
      }
    },
    {
      "@type": "Question",
      "name": "Posso usar a assinatura com um e-mail @gmail.com?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Pode. A assinatura funciona com qualquer endereço. Para uma empresa, um endereço com o próprio domínio, como contato@suaempresa.com.br, passa mais confiança do que um endereço gratuito."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Uma assinatura de e-mail bem-feita é curta: nome, cargo, empresa e os canais em que você de fato responde. Gere a sua, instale no programa que você usa e envie uma mensagem de teste para outro endereço, de preferência aberto no celular, para ver como ela chega. Se a empresa ainda usa um endereço gratuito, o próximo passo é criar o e-mail com o domínio próprio.</p>
<p>O post <a href="https://www.homehost.com.br/blog/contas-de-email/gerador-de-assinatura-de-e-mail/" data-wpel-link="internal" target="_self">Gerador de assinatura de e-mail grátis: crie a sua</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18665</post-id>	</item>
		<item>
		<title>Gerador de nomes de domínio com consulta grátis</title>
		<link>https://www.homehost.com.br/blog/dominio/gerador-de-nomes-de-dominio/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Sun, 08 Nov 2026 17:33:02 +0000</pubDate>
				<category><![CDATA[Domínio]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18637</guid>

					<description><![CDATA[<p>Digite de uma a três palavras sobre o seu negócio e o gerador monta 40 ideias de nome de domínio, combinando as palavras com prefixos e sufixos em português e em inglês. Ele também consulta na hora se os nomes estão livres no .com.br, no .com e em outras extensões. Achar um nome livre ficou [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/gerador-de-nomes-de-dominio/" data-wpel-link="internal" target="_self">Gerador de nomes de domínio com consulta grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Digite de uma a três palavras sobre o seu negócio e o gerador monta 40 ideias de nome de domínio, combinando as palavras com prefixos e sufixos em português e em inglês. Ele também consulta na hora se os nomes estão livres no .com.br, no .com e em outras extensões.</strong></p>



<p class="wp-block-paragraph">Achar um nome livre ficou difícil: só no .com.br há mais de 5,5 milhões de domínios registrados, segundo as <a href="https://www.homehost.com.br/blog/registro-de-dominios/estatisticas-dominios-br/" data-wpel-link="internal" target="_self">estatísticas do .br</a>. Os nomes de uma palavra só quase sempre já têm dono, e o caminho é combinar palavras até achar uma que seja curta, fácil de dizer e esteja disponível.</p>



<div class="hh-nom" id="hh-nom" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-nom"); if (!root0) { return; } var AMP = String.fromCharCode(38); var S2 = "/" + "/"; var PFX = "hh-nom-"; function U(n) { return String.fromCharCode(n); } function H(h, p) { return "https:" + S2 + h + p; } var ELL = U(8230); var DOT = " " + U(183) + " "; var NAVY = "#0b3d91"; var REG = H("www.homehost.com.br", "/registro-de-dominio/"); var GUIA = H("www.homehost.com.br", "/blog/dominio/nome-de-dominio/"); var INPI = H("busca.inpi.gov.br", "/pePI/"); var GDNS = H("dns.google", "/resolve?name="); var CFDNS = H("cloudflare-dns.com", "/dns-query?name="); var RDAP = {br: H("rdap.registro.br", "/"), com: H("rdap.verisign.com", "/com/v1/"), online: H("rdap.radix.host", "/rdap/"), shop: H("rdap.gmoregistry.net", "/rdap/")}; var EXTS = [["com.br", true], ["com", true], ["net.br", false], ["online", false], ["shop", false]]; var MONO = "font-family:Consolas,Menlo,monospace;"; var COL = {free: ["#15803d", "#e8f5ec", U(10004), "Livre"], likely: ["#b45309", "#fff4e5", U(10004), "Provavelmente livre"], taken: ["#b42318", "#fdecec", U(10006), "Registrado"], bad: ["#b45309", "#fff4e5", U(9888), "N"+U(227)+"o permitido"], unknown: ["#475569", "#eef1f5", "?", "Sem resposta"], wait: ["#475569", "#f1f5f9", ELL, "Na fila"]}; var STOP = ["de", "da", "do", "das", "dos", "e", "a", "o", "as", "os", "para", "pra", "com", "em", "no", "na", "nos", "nas", "um", "uma", "the", "and", "of"]; var MASC = ["dia", "mapa", "sofa", "planeta", "cometa", "guia", "pijama", "clima", "sistema", "programa", "problema", "tema", "idioma", "drama", "cinema", "esquema", "poema", "diploma", "aroma", "fantasma", "panorama", "cafe", "doce", "chocolate", "leite", "sorvete", "lanche", "pet", "sabor", "amor", "bar", "mar", "sol", "chef", "burger", "hamburguer", "salao", "pao", "pastel", "hotel", "papel", "jardim", "som", "tom", "estudio", "atelie", "hostel", "game", "show", "shop", "web", "app", "site", "blog", "cliente", "dente", "vinho", "queijo", "carro", "carne", "peixe", "frete", "grill", "bistro", "verde"]; var FEM = ["arte", "flor", "saude", "mulher", "cor", "luz", "paz", "pele", "mente", "gente", "sorte", "noite", "parte", "casa", "loja", "moda", "beleza", "festa", "massa", "pizza", "cerveja", "academia", "clinica", "escola", "fazenda", "padaria", "doceria", "confeitaria", "papelaria", "farmacia", "oficina", "viagem", "imagem", "cidade", "saudade", "rede", "nuvem", "lente", "fonte", "ponte", "chave"]; var PT_PRE = ["super", "mega", "top", "mais", "multi"]; var CONN = ["mundo", "casa", "clube", "cantinho", "espaco", "universo"]; var POSS = [["meu", "minha"], ["seu", "sua"]]; var PT_SUF = ["mania", "facil", "ja", "aqui", "mais", "brasil", "online", "digital", "total", "top"]; var EN_PRE = ["get", "go", "my", "the", "use", "try", "hey", "we"]; var EN_SUF = ["hub", "lab", "box", "pro", "plus", "now", "club", "shop", "studio", "ly", "ify", "app", "hq"]; var FAM = ["full", "join", "single", "rev", "ptsuf", "poss", "ptpre", "conn", "ensuf", "enpre", "blend"]; var BASE = {full: 95, join: 100, single: 92, rev: 82, ptsuf: 80, poss: 80, ptpre: 78, conn: 76, ensuf: 74, enpre: 72, blend: 60}; var VOW = "aeiou"; var BATCH = 10; var st = {gen: 0, items: [], checked: 0, words: null}; var brChain = Promise.resolve(); var brDelay = 650; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function isV(c) { return has(VOW, c) ? c !== "" : false; } function isBr(t) { return t.slice(-2) === "br"; } function sleep(ms) { return new Promise(function (r) { setTimeout(r, ms); }); } function fold(s) { var n = String(s).toLowerCase(); n = n.normalize ? n.normalize("NFD") : n; var out = ""; for (var i = 0; i !== n.length; i++) { var c = n.charCodeAt(i); if (ge(c, 768) ? lt(c, 880) : false) { continue; } var ch = n.charAt(i); if (has("abcdefghijklmnopqrstuvwxyz0123456789", ch)) { out += ch; } else { out += " "; } } return out; } function readWords(v) { var raw = fold(v).split(" "); var all = []; for (var i = 0; i !== raw.length; i++) { if (raw[i]) { all.push(raw[i]); } } var content = []; for (var k = 0; k !== all.length; k++) { if (STOP.indexOf(all[k]) === -1 ? gt(all[k].length, 1) : false) { content.push(all[k]); } } var cut = gt(content.length, 3); return {all: all.slice(0, 6), words: content.slice(0, 3), cut: cut}; } function gender(w) { if (MASC.indexOf(w) !== -1) { return "m"; } if (FEM.indexOf(w) !== -1) { return "f"; } var e2 = w.slice(-2); var e3 = w.slice(-3); var e4 = w.slice(-4); if (e3 === "ema") { return "m"; } if (e4 === "dade" ? true : (e3 === "gem" ? true : (e3 === "cao" ? true : (e3 === "sao" ? true : e4 === "tude")))) { return "f"; } if (e2 === "os") { return "mp"; } if (e2 === "as") { return "fp"; } var last = w.charAt(w.length - 1); if (last === "o") { return "m"; } if (last === "a") { return "f"; } return ""; } function art(g) { return g === "m" ? "do" : (g === "f" ? "da" : (g === "mp" ? "dos" : "das")); } function head(w) { for (var i = 0; i !== w.length - 1; i++) { if (isV(w.charAt(i)) ? !isV(w.charAt(i + 1)) : false) { var h = w.slice(0, i + 1); if (ge(h.length, 3)) { return gt(h.length, 5) ? "" : h; } } } return ""; } function joinOk(a, b) { var s = a + b; for (var i = 0; i !== s.length - 2; i++) { if (s.charAt(i) === s.charAt(i + 1) ? s.charAt(i + 1) === s.charAt(i + 2) : false) { return false; } } return true; } function cluster(a, b) { var s = a.slice(-2) + b.slice(0, 2); var run = 0; var mx = 0; for (var i = 0; i !== s.length; i++) { if (isV(s.charAt(i))) { run = 0; } else { run++; if (gt(run, mx)) { mx = run; } } } return mx; } function generate(W, opt) { var words = W.words; var C = []; function push(name, fam, a, b, pen) { if (!name) { return; } if (a !== undefined ? !joinOk(a, b) : false) { return; } var sc = BASE[fam] - (pen ? pen : 0); var L = name.length; if (gt(L, 12)) { sc -= (L - 12) * 5; } if (lt(L, 5)) { sc -= 6; } if (a !== undefined) { if (ge(cluster(a, b), 3)) { sc -= 10; } if (a.charAt(a.length - 1) === b.charAt(0)) { sc -= 4; } } for (var i = 0; i !== L; i++) { if (has("0123456789", name.charAt(i))) { sc -= 10; break; } } C.push({n: name, f: fam, s: sc}); var la = a !== undefined ? a.charAt(a.length - 1) : ""; var mg = fam === "ptsuf" ? true : (fam === "ensuf" ? true : (fam === "join" ? true : fam === "rev")); if (mg ? (la ? (isV(la) ? la === b.charAt(0) : false) : false) : false) { C.push({n: a + b.slice(1), f: fam, s: sc + 2}); } } var w1 = words[0]; var w2 = or(words[1], ""); var w3 = or(words[2], ""); if (gt(W.all.length, words.length) ? gt(words.length, 1) : false) { push(W.all.join(""), "full"); } if (w2) { push(words.join(""), "join", w1, w2 + w3); } if (w2) { push(w2 + w1, "rev", w2, w1); } if (w3) { push(w1 + w3, "join", w1, w3); push(w2 + w3, "join", w2, w3); } for (var i = 0; i !== words.length; i++) { push(words[i], "single"); } var bases = words.slice(); var joined = w2 ? lt((w1 + w2).length, 11) : false; if (joined) { bases.push(w1 + w2); } var pt = opt.style !== "en"; var en = opt.style !== "pt"; for (var b = 0; b !== bases.length; b++) { var x = bases[b]; var isJ = joined ? b === bases.length - 1 : false; var pen = (b === 0 ? true : isJ) ? 0 : 8; if (pt) { for (var p = 0; p !== PT_PRE.length; p++) { push(PT_PRE[p] + x, "ptpre", PT_PRE[p], x, pen); } for (var s = 0; s !== PT_SUF.length; s++) { push(x + PT_SUF[s], "ptsuf", x, PT_SUF[s], pen); } var g = isJ ? gender(w1) : gender(x); if (g) { for (var c = 0; c !== CONN.length; c++) { push(CONN[c] + art(g) + x, "conn", CONN[c] + art(g), x, pen); } if (g === "m" ? true : g === "f") { for (var q = 0; q !== POSS.length; q++) { var pr = g === "m" ? POSS[q][0] : POSS[q][1]; push(pr + x, "poss", pr, x, pen); } } } } if (en) { for (var e = 0; e !== EN_PRE.length; e++) { push(EN_PRE[e] + x, "enpre", EN_PRE[e], x, pen); } for (var f = 0; f !== EN_SUF.length; f++) { var sf = EN_SUF[f]; var last = x.charAt(x.length - 1); if (sf === "ly") { if (!isV(last)) { push(x + sf, "ensuf", x, sf, pen); } continue; } if (sf === "ify") { var stem = x; while (gt(stem.length, 2) ? isV(stem.charAt(stem.length - 1)) : false) { stem = stem.slice(0, -1); } push(stem + sf, "ensuf", stem, sf, pen); continue; } push(x + sf, "ensuf", x, sf, pen); } } } if (w2) { var h1 = gt(w1.length, 5) ? head(w1) : ""; var h2 = gt(w2.length, 5) ? head(w2) : ""; if (h1) { push(h1 + w2, "blend", h1, w2); } if (h1 ? h2 : false) { push(h1 + h2, "blend", h1, h2); } } var seen = {}; var byFam = {}; for (var k = 0; k !== C.length; k++) { var it = C[k]; if (gt(it.n.length, opt.max) ? true : lt(it.n.length, 2)) { continue; } if (seen[it.n]) { if (gt(it.s, seen[it.n].s)) { seen[it.n].s = it.s; } continue; } seen[it.n] = it; if (!byFam[it.f]) { byFam[it.f] = []; } byFam[it.f].push(it); } var fams = []; for (var z = 0; z !== FAM.length; z++) { if (byFam[FAM[z]]) { byFam[FAM[z]].sort(function (m, n) { return n.s - m.s; }); fams.push(FAM[z]); } } fams.sort(function (m, n) { return byFam[n][0].s - byFam[m][0].s; }); var out = []; var idx = {}; var more = true; while (more ? lt(out.length, 40) : false) { more = false; for (var y = 0; y !== fams.length; y++) { var fl = byFam[fams[y]]; var j = or(idx[fams[y]], 0); if (lt(j, fl.length)) { out.push(fl[j]); idx[fams[y]] = j + 1; more = true; if (out.length === 40) { break; } } } } return out; } function getJson(url, acc) { var ctl = window.AbortController ? new AbortController() : null; var opt = {credentials: "omit"}; if (acc) { opt.headers = {"accept": acc}; } if (ctl) { opt.signal = ctl.signal; } var tm = setTimeout(function () { if (ctl) { ctl.abort(); } }, 10000); return fetch(url, opt).then(function (r) { return r.text().then(function (t) { clearTimeout(tm); var j = null; try { j = JSON.parse(t); } catch (e) { j = null; } return {st: r.status, j: j}; }); }).catch(function () { clearTimeout(tm); return {st: -1, j: null}; }); } async function dnsCheck(d) { var r = await getJson(GDNS + encodeURIComponent(d) + AMP + "type=NS", ""); if (r.st !== 200 ? true : !r.j) { r = await getJson(CFDNS + encodeURIComponent(d) + AMP + "type=NS", "application/dns-json"); } if (r.st !== 200 ? true : !r.j) { return "unknown"; } if (r.j.Status === 3) { return "likely"; } if (r.j.Status === 0 ? true : r.j.Status === 2) { return "taken"; } return "unknown"; } async function rdapCheck(name, ext) { var tl = ext.split(".").pop(); var r = await getJson(RDAP[tl] + "domain/" + name + "." + ext, "application/rdap+json"); if (r.st === 404) { return "free"; } if (r.st === 200) { return "taken"; } if (r.st === 400 ? true : r.st === 422) { return "bad"; } return ""; } function brRule(name) { if (lt(name.length, 2) ? true : gt(name.length, 26)) { return true; } var dig = true; for (var i = 0; i !== name.length; i++) { if (!has("0123456789", name.charAt(i))) { dig = false; } } return dig; } function checkBr(name, ext, g) { var p = brChain.then(async function () { if (g !== st.gen) { return "skip"; } var k = await rdapCheck(name, ext); if (k === "") { await sleep(2500); k = await rdapCheck(name, ext); if (k === "") { brDelay = 1500; } } await sleep(brDelay); if (k === "") { var z = await dnsCheck(name + "." + ext); return z === "likely" ? "likely" : z; } return k; }); brChain = p.then(function () { return null; }, function () { return null; }); return p; } async function checkOne(name, ext, g) { if (isBr(ext)) { if (brRule(name)) { return "bad"; } return checkBr(name, ext, g); } var k = await rdapCheck(name, ext); if (k) { return k; } return dnsCheck(name + "." + ext); } function selExts() { var o = []; for (var i = 0; i !== EXTS.length; i++) { if (el("x-" + i).checked) { o.push(EXTS[i][0]); } } return o; } function opts() { return {style: el("style").value, max: parseInt(el("max").value, 10)}; } function setBadge(b, k, name, ext) { var c = COL[k]; b.textContent = ""; b.setAttribute("data-k", k); b.setAttribute("style", "display:inline-flex;align-items:center;gap:5px;margin:3px 6px 3px 0;padding:3px 8px;border-radius:7px;font-size:12.5px;line-height:1.4;background:" + c[1] + ";color:" + c[0] + ";border:1px solid " + c[1] + ";"); add(b, "span", "." + ext, "font-weight:800;" + MONO); add(b, "span", c[2] + " " + c[3], "font-weight:700;"); if (k === "free" ? true : k === "likely") { var a = add(b, "a", "Registrar", "color:" + NAVY + ";font-weight:800;text-decoration:underline;margin-left:2px;"); a.href = REG; a.target = "_blank"; a.rel = "noopener"; a.setAttribute("aria-label", "Registrar " + name + "." + ext); } } function applyFilter() { var only = el("only").checked; var rows = el("list").children; var shown = 0; for (var i = 0; i !== rows.length; i++) { var r = rows[i]; var hide = only ? r.getAttribute("data-free") !== "1" : false; r.style.display = hide ? "none" : "flex"; if (!hide) { shown++; } } el("empty").style.display = only ? (shown === 0 ? "block" : "none") : "none"; } function rowState(it) { var bs = it.row.querySelectorAll("[data-k]"); var free = false; var done = true; for (var i = 0; i !== bs.length; i++) { var k = bs[i].getAttribute("data-k"); if (k === "free" ? true : k === "likely") { free = true; } if (k === "wait") { done = false; } } it.row.setAttribute("data-free", free ? "1" : (done ? "0" : "w")); } async function checkBatch() { var g = st.gen; var exts = st.exts; var from = st.checked; var to = Math.min(st.items.length, from + BATCH); st.checked = to; el("more").style.display = "none"; el("st").textContent = "Consultando a disponibilidade" + ELL; var jobs = []; for (var i = from; i !== to; i++) { var it = st.items[i]; for (var e = 0; e !== exts.length; e++) { var b = it.badges[e]; setBadge(b, "wait", it.n, exts[e]); jobs.push([it, b, exts[e]]); } } var nb = []; var br = []; for (var j = 0; j !== jobs.length; j++) { (isBr(jobs[j][2]) ? br : nb).push(jobs[j]); } var idx = 0; function worker() { if (!lt(idx, nb.length)) { return Promise.resolve(); } var jb = nb[idx]; idx++; return checkOne(jb[0].n, jb[2], g).then(function (k) { if (g === st.gen) { setBadge(jb[1], k, jb[0].n, jb[2]); rowState(jb[0]); applyFilter(); } }).then(worker); } var ps = [worker(), worker(), worker()]; for (var q = 0; q !== br.length; q++) { (function (jb) { ps.push(checkOne(jb[0].n, jb[2], g).then(function (k) { if (g === st.gen ? k !== "skip" : false) { setBadge(jb[1], k, jb[0].n, jb[2]); rowState(jb[0]); applyFilter(); } })); })(br[q]); } await Promise.all(ps); if (g !== st.gen) { return; } el("st").textContent = ""; el("more").style.display = lt(st.checked, st.items.length) ? "inline-block" : "none"; el("more").textContent = "Verificar mais " + Math.min(BATCH, st.items.length - st.checked) + " nomes"; } function render() { var list = el("list"); list.textContent = ""; var exts = st.exts; for (var i = 0; i !== st.items.length; i++) { var it = st.items[i]; var r = add(list, "div", "", "display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;padding:9px 0;border-top:" + (i === 0 ? "0" : "1px solid #eef1f5") + ";"); r.setAttribute("data-free", "w"); r.setAttribute("data-name", it.n); var nm = add(r, "div", "", "flex:0 0 190px;min-width:0;"); add(nm, "div", it.n, "font-weight:800;font-size:15.5px;color:#0F172A;overflow-wrap:anywhere;" + MONO); add(nm, "div", it.n.length + " caracteres", "font-size:12px;color:#64748b;"); var bx = add(r, "div", "", "flex:1 1 260px;min-width:0;display:flex;flex-wrap:wrap;"); it.row = r; it.badges = []; for (var e = 0; e !== exts.length; e++) { var b = add(bx, "span", ""); b.setAttribute("data-k", "none"); b.setAttribute("style", "display:inline-flex;align-items:center;gap:5px;margin:3px 6px 3px 0;padding:3px 8px;border-radius:7px;font-size:12.5px;line-height:1.4;background:#ffffff;color:#64748b;border:1px dashed #c9d2dd;"); add(b, "span", "." + exts[e], "font-weight:800;" + MONO); it.badges.push(b); } } } function run() { var W = readWords(el("in").value); var stl = el("st"); stl.style.color = "#475569"; if (!W.words.length) { st.gen++; el("res").style.display = "none"; stl.style.color = "#b42318"; stl.textContent = "Digite uma ou mais palavras sobre o neg"+U(243)+"cio, como bolo caseiro ou advocacia trabalhista."; return; } var exts = selExts(); if (!exts.length) { st.gen++; el("res").style.display = "none"; stl.style.color = "#b42318"; stl.textContent = "Marque pelo menos uma extens"+U(227)+"o."; return; } var o = opts(); st.gen++; st.items = generate(W, o); st.checked = 0; st.exts = exts; st.words = W; el("res").style.display = "block"; el("only").checked = false; render(); var info = st.items.length + " nomes com at"+U(233)+" " + o.max + " caracteres, feitos com " + W.words.join(", ") + "."; if (W.cut) { info += " Usei s"+U(243)+" as tr"+U(234)+"s primeiras palavras."; } el("sum").textContent = info; applyFilter(); if (st.items.length) { checkBatch(); } else { stl.textContent = "Nenhum nome coube no tamanho m"+U(225)+"ximo. Aumente o limite ou use palavras mais curtas."; } } function copyFree() { var lines = []; for (var i = 0; i !== st.items.length; i++) { var it = st.items[i]; if (!it.badges) { continue; } for (var e = 0; e !== it.badges.length; e++) { var k = it.badges[e].getAttribute("data-k"); if (k === "free" ? true : k === "likely") { lines.push(it.n + "." + st.exts[e]); } } } var btn = el("copy"); if (!lines.length) { btn.textContent = "Nenhum nome livre ainda"; setTimeout(function () { btn.textContent = "Copiar nomes livres"; }, 1800); return; } var txt = lines.join(U(10)); function done() { btn.textContent = "Copiado: " + lines.length; setTimeout(function () { btn.textContent = "Copiar nomes livres"; }, 1800); } if (navigator.clipboard ? navigator.clipboard.writeText : false) { navigator.clipboard.writeText(txt).then(done, function () { btn.textContent = "N"+U(227)+"o deu para copiar"; }); } else { btn.textContent = "N"+U(227)+"o deu para copiar"; } } function btn(p, text, primary) { var b = add(p, "button", text, primary ? "padding:9px 18px;border:1px solid " + NAVY + ";background:" + NAVY + ";color:#ffffff;border-radius:8px;cursor:pointer;font-size:14.5px;font-weight:700;margin:0;" : "padding:6px 12px;border:1px solid " + NAVY + ";background:#ffffff;color:" + NAVY + ";border-radius:7px;cursor:pointer;font-size:13px;font-weight:700;margin:0;"); b.type = "button"; return b; } function lbl(p, text, id) { var l = add(p, "label", text, "display:block;font-weight:700;font-size:13.5px;color:" + NAVY + ";margin-bottom:4px;"); if (id) { l.setAttribute("for", PFX + id); } return l; } var SEL = "width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid #9aa7b8;border-radius:8px;font-size:14.5px;background:#ffffff;color:#0F172A;margin:0;"; add(root0, "div", "Gerador de nomes de dom"+U(237)+"nio", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Digite de uma a tr"+U(234)+"s palavras sobre o seu neg"+U(243)+"cio. A ferramenta combina as palavras com prefixos e sufixos, monta ideias de nome e consulta se elas est"+U(227)+"o livres nas extens"+U(245)+"es que voc"+U(234)+" escolher.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); lbl(root0, "Palavras sobre o neg"+U(243)+"cio", "in"); var frow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;"); var inp = add(frow, "input", "", "flex:1 1 220px;min-width:0;box-sizing:border-box;padding:9px 11px;border:1px solid #9aa7b8;border-radius:8px;font-size:15px;background:#ffffff;color:#0F172A;margin:0;"); inp.id = PFX + "in"; inp.type = "text"; inp.setAttribute("placeholder", "ex.: bolo caseiro"); inp.setAttribute("autocomplete", "off"); inp.setAttribute("spellcheck", "false"); var go = btn(frow, "Gerar nomes", true); go.id = PFX + "go"; var orow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:12px;margin-top:12px;"); var c1 = add(orow, "div", "", "flex:2 1 280px;min-width:0;"); add(c1, "div", "Extens"+U(245)+"es", "font-weight:700;font-size:13.5px;color:" + NAVY + ";margin-bottom:4px;"); var xw = add(c1, "div", "", "display:flex;flex-wrap:wrap;gap:6px;"); for (var x0 = 0; x0 !== EXTS.length; x0++) { var xl = add(xw, "label", "", "display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid #c9d2dd;border-radius:8px;background:#ffffff;cursor:pointer;font-size:13.5px;"); var xc = add(xl, "input", "", "margin:0;width:15px;height:15px;"); xc.type = "checkbox"; xc.id = PFX + "x-" + x0; xc.checked = EXTS[x0][1]; add(xl, "span", "." + EXTS[x0][0], "font-weight:700;" + MONO); } var c2 = add(orow, "div", "", "flex:1 1 200px;min-width:0;"); lbl(c2, "Estilo", "style"); var ss = add(c2, "select", "", SEL); ss.id = PFX + "style"; var SO = [["both", "Portugu"+U(234)+"s e ingl"+U(234)+"s"], ["pt", "S"+U(243)+" portugu"+U(234)+"s"], ["en", "S"+U(243)+" ingl"+U(234)+"s"]]; for (var s0 = 0; s0 !== SO.length; s0++) { add(ss, "option", SO[s0][1]).value = SO[s0][0]; } var c3 = add(orow, "div", "", "flex:1 1 170px;min-width:0;"); lbl(c3, "Tamanho m"+U(225)+"ximo", "max"); var ms = add(c3, "select", "", SEL); ms.id = PFX + "max"; var MO = [10, 12, 15, 20]; for (var m0 = 0; m0 !== MO.length; m0++) { var mo = add(ms, "option", "At"+U(233)+" " + MO[m0] + " caracteres"); mo.value = String(MO[m0]); } ms.value = "15"; var stl0 = add(root0, "div", "", "margin-top:10px;font-size:13.5px;color:#475569;min-height:18px;"); stl0.id = PFX + "st"; stl0.setAttribute("aria-live", "polite"); var res = add(root0, "div", "", "display:none;"); res.id = PFX + "res"; var top0 = add(res, "div", "", "display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;"); var sum = add(top0, "div", "", "font-size:13.5px;color:#334155;flex:1 1 240px;min-width:0;"); sum.id = PFX + "sum"; var ctl0 = add(top0, "div", "", "display:flex;flex-wrap:wrap;align-items:center;gap:8px;"); var ol = add(ctl0, "label", "", "display:inline-flex;align-items:center;gap:5px;font-size:13.5px;cursor:pointer;"); var oc = add(ol, "input", "", "margin:0;width:15px;height:15px;"); oc.type = "checkbox"; oc.id = PFX + "only"; add(ol, "span", "S"+U(243)+" nomes com extens"+U(227)+"o livre"); var cp = btn(ctl0, "Copiar nomes livres", false); cp.id = PFX + "copy"; var lw = add(res, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:2px 14px;margin-top:8px;"); var list0 = add(lw, "div", ""); list0.id = PFX + "list"; list0.setAttribute("aria-live", "polite"); var emp = add(lw, "div", "Nenhum nome livre entre os consultados at"+U(233)+" agora. Verifique mais nomes ou mude as palavras.", "display:none;padding:12px 0;font-size:13.5px;color:#475569;"); emp.id = PFX + "empty"; var mw = add(res, "div", "", "margin-top:10px;"); var mb = btn(mw, "Verificar mais nomes", false); mb.id = PFX + "more"; mb.style.display = "none"; var foot = add(root0, "p", "", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.55;"); foot.appendChild(document.createTextNode("A disponibilidade "+U(233)+" consultada no servi"+U(231)+"o oficial de cada extens"+U(227)+"o (RDAP), direto do seu navegador. No .br, as consultas v"+U(227)+"o uma por vez, por isso demoram alguns segundos. Quando o servi"+U(231)+"o n"+U(227)+"o responde, a consulta "+U(233)+" feita pelo DNS, e o resultado vira provavelmente livre. Antes de registrar, fa"+U(231)+"a os testes do ")); var a1 = add(foot, "a", "guia de nome de dom"+U(237)+"nio", "color:#1d4ed8;font-weight:700;"); a1.href = GUIA; foot.appendChild(document.createTextNode(" e procure a marca na ")); var a2 = add(foot, "a", "busca do INPI", "color:#1d4ed8;font-weight:700;"); a2.href = INPI; a2.target = "_blank"; a2.rel = "noopener"; foot.appendChild(document.createTextNode(".")); go.addEventListener("click", run); inp.addEventListener("keydown", function (e) { if (e.key === "Enter") { run(); } }); mb.addEventListener("click", checkBatch); oc.addEventListener("change", applyFilter); cp.addEventListener("click", copyFree); function rerun() { if (el("res").style.display === "block") { run(); } } ss.addEventListener("change", rerun); ms.addEventListener("change", rerun); for (var x1 = 0; x1 !== EXTS.length; x1++) { el("x-" + x1).addEventListener("change", rerun); } })();</script>



<h2 class="wp-block-heading">Gere ideias de nome para o seu domínio</h2>



<p class="wp-block-paragraph">Escolha as extensões, o estilo e o tamanho máximo. A ferramenta mostra 40 ideias e consulta as 10 primeiras; o botão abaixo da lista consulta as próximas. Cada extensão aparece com um destes resultados:</p>



<ul class="wp-block-list">
<li><strong>Livre:</strong> o serviço oficial da extensão não encontrou registro com esse nome.</li>



<li><strong>Provavelmente livre:</strong> o serviço oficial não respondeu, e a consulta foi feita pelo DNS. Confirme antes de contar com o nome.</li>



<li><strong>Registrado:</strong> o nome já tem dono nessa extensão.</li>



<li><strong>Não permitido:</strong> o nome não segue as regras da extensão, como um nome .br feito só de números.</li>
</ul>



<h2 class="wp-block-heading">Como o gerador monta os nomes</h2>



<p class="wp-block-paragraph">O gerador usa as técnicas mais comuns na criação de nomes de marca. Com as palavras &#8220;bolo caseiro&#8221;, elas ficam assim:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Técnica</th><th>Exemplo</th><th>Quando funciona bem</th></tr></thead><tbody><tr><td>Juntar as palavras</td><td>bolocaseiro</td><td>Quando o nome junto ainda é curto</td></tr><tr><td>Inverter a ordem</td><td>caseirobolo</td><td>Quando a segunda palavra soa melhor no começo</td></tr><tr><td>Prefixo</td><td>superbolo, meubolo</td><td>Para dar um tom de destaque ou de proximidade</td></tr><tr><td>Sufixo</td><td>bolomania, bolofacil</td><td>Para indicar variedade ou praticidade</td></tr><tr><td>Lugar ou grupo</td><td>mundodobolo, casadobolo</td><td>Para dar cara de loja ou de comunidade</td></tr><tr><td>Inglês</td><td>getbolo, bolohub</td><td>Para público jovem ou de tecnologia</td></tr><tr><td>Mistura de palavras</td><td>sorvearte, de &#8220;sorveteria artesanal&#8221;</td><td>Para criar uma palavra nova, que costuma estar livre</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tecnicas-nome-de-dominio-777x1024.png" alt="Infográfico com sete técnicas para criar um nome de domínio, como juntar palavras, usar prefixo ou sufixo e misturar palavras, com um exemplo de cada" class="wp-image-18639" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tecnicas-nome-de-dominio-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tecnicas-nome-de-dominio-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tecnicas-nome-de-dominio-767x1012.png 767w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tecnicas-nome-de-dominio.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">Nos nomes com &#8220;meu&#8221;, &#8220;minha&#8221;, &#8220;do&#8221; e &#8220;da&#8221;, o gerador tenta acertar o gênero da palavra: &#8220;meubolo&#8221;, mas &#8220;minhaloja&#8221;. Quando não dá para saber, como em palavras no plural terminadas em -es, ele deixa essas combinações de fora.</p>



<p class="wp-block-paragraph">O gerador também não cria nomes com hífen nem com acento. Os dois atrapalham na hora de dizer o endereço em voz alta, e no .br eles nem formam um nome novo, como mostra a seção sobre as regras.</p>



<h2 class="wp-block-heading">Outras formas de chegar a um nome</h2>



<p class="wp-block-paragraph">O gerador cobre as combinações de palavras, mas alguns caminhos dependem de você:</p>



<ul class="wp-block-list">
<li><strong>O seu nome ou o da família.</strong> Funciona bem para serviços pessoais, como consultórios, escritórios e ateliês, e costuma estar livre quando combinado com a atividade.</li>



<li><strong>Uma palavra inventada.</strong> Leva mais tempo para pegar, mas é a que tem mais chance de estar livre em todas as extensões e de virar marca registrada.</li>



<li><strong>A cidade ou o bairro.</strong> Ajuda quem atende só uma região, mas limita o negócio se ele crescer para outros lugares.</li>



<li><strong>Uma sigla.</strong> Só funciona quando a sigla já é conhecida pelos clientes.</li>
</ul>



<h2 class="wp-block-heading">Antes de registrar</h2>



<p class="wp-block-paragraph">Um nome livre ainda pode ser um nome ruim. Antes de registrar, passe as ideias favoritas pelos cinco testes do <a href="https://www.homehost.com.br/blog/dominio/nome-de-dominio/" data-wpel-link="internal" target="_self">guia de nome de domínio</a>: o do telefone, o da marca registrada, o das redes sociais, o da leitura acidental e o dos dez anos.</p>



<p class="wp-block-paragraph">Dois deles merecem atenção especial:</p>



<ul class="wp-block-list">
<li><strong>Marca registrada.</strong> Domínio disponível não é o mesmo que nome que você pode usar. Procure o nome na <a href="https://busca.inpi.gov.br/pePI/" data-wpel-link="external" target="_blank" rel="external noopener">busca do INPI</a>, que é gratuita, e veja se existe marca igual ou parecida no seu ramo.</li>



<li><strong>Leitura acidental.</strong> Junte as palavras e leia sem espaços, em voz alta. Nomes compostos às vezes formam outra palavra sem querer.</li>
</ul>



<p class="wp-block-paragraph">Se o orçamento permitir, registre o mesmo nome no .com.br e no .com. Isso evita que outra pessoa use a outra extensão com o nome da sua marca.</p>



<h2 class="wp-block-heading">Regras para nomes .br</h2>



<p class="wp-block-paragraph">As regras para nomes .br estão na <a href="https://cgi.br/resolucoes/documento/2008/CGI.br_Resolucao_2008_008.pdf" data-wpel-link="external" target="_blank" rel="external noopener">Resolução CGI.br 2008/008</a>:</p>



<ul class="wp-block-list">
<li>O nome precisa ter de 2 a 26 caracteres, sem contar a extensão.</li>



<li>Pode ter letras, números, hífen e as letras acentuadas à, á, â, ã, é, ê, í, ó, ô, õ, ú, ü e ç.</li>



<li>Não pode ser formado só por números nem começar ou terminar com hífen.</li>



<li>O nome vai para quem pede primeiro e cumpre as exigências da categoria.</li>
</ul>



<p class="wp-block-paragraph">Há também a regra de equivalência: para o Registro.br, acentos, cedilha e hífen não criam um nome novo. Se bolocaseiro.com.br já está registrado, outra pessoa não consegue registrar bolo-caseiro.com.br. O mesmo vale para os acentos: açaí.com.br e acai.com.br são equivalentes. O <a href="https://www.homehost.com.br/blog/dominio/dominio-com-acento/" data-wpel-link="internal" target="_self">guia de domínio com acento</a> explica como isso funciona.</p>



<h2 class="wp-block-heading">O nome que você queria está registrado. E agora?</h2>



<p class="wp-block-paragraph">Antes de desistir, vale tentar estes caminhos:</p>



<ul class="wp-block-list">
<li><strong>Outra extensão.</strong> Se o .com.br está ocupado, o .com, o .net.br ou uma categoria como .app.br ou .blog.br podem estar livres.</li>



<li><strong>Uma palavra a mais.</strong> É o que o gerador faz: um prefixo ou sufixo curto costuma liberar o nome sem perder o sentido.</li>



<li><strong>Ver se ele vai vencer.</strong> Domínios .br que não são renovados passam por um processo de liberação e podem voltar a ficar disponíveis. Os prazos estão no guia sobre <a href="https://www.homehost.com.br/blog/registro-de-dominios/dominio-br-vencido-prazos/" data-wpel-link="internal" target="_self">domínio .br vencido</a>.</li>



<li><strong>Ver quem é o dono.</strong> A <a href="https://www.homehost.com.br/whois-registro/" data-wpel-link="external" target="_blank" rel="external noopener">busca WHOIS da Homehost</a> mostra os dados públicos de um domínio registrado.</li>
</ul>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Registre o seu domínio na Homehost</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">A Homehost é registradora credenciada pelo Registro.br, com domínios .com.br, .com e outras extensões. Com um plano anual de hospedagem, o domínio sai grátis no primeiro ano.</p>
<a href="https://www.homehost.com.br/registro-de-dominio/" style="display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Registrar domínio</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>Como criar um nome de domínio?</strong><br>Comece com as palavras que descrevem o negócio e combine-as com prefixos e sufixos curtos até achar um nome curto, fácil de dizer e livre. O gerador desta página faz essas combinações e consulta a disponibilidade. Depois, passe as melhores ideias pelos testes do guia de nome de domínio e pela busca de marcas do INPI.</p>



<p class="wp-block-paragraph"><strong>O gerador de nomes de domínio é grátis?</strong><br>Sim. A ferramenta é gratuita, não pede cadastro e funciona direto no navegador. As consultas vão para os serviços oficiais de cada extensão, e nada do que você digita fica salvo.</p>



<p class="wp-block-paragraph"><strong>Como saber se um domínio está disponível?</strong><br>Digite as palavras no gerador ou o nome completo no verificador de nome de domínio. As duas ferramentas consultam o serviço oficial da extensão, que informa se o nome já tem dono. No .br, a confirmação final acontece na hora do registro.</p>



<p class="wp-block-paragraph"><strong>Posso usar hífen ou acento no nome de domínio?</strong><br>Pode, mas não convém. O hífen e o acento se perdem quando o endereço é dito em voz alta, e no .br eles não formam um nome novo: bolo-caseiro.com.br equivale a bolocaseiro.com.br.</p>



<p class="wp-block-paragraph"><strong>Quantos caracteres pode ter um domínio .com.br?</strong><br>De 2 a 26 caracteres, sem contar o .com.br. Na prática, os nomes mais fáceis de lembrar ficam entre 6 e 15 caracteres.</p>



<p class="wp-block-paragraph"><strong>Vale registrar o .com e o .com.br?</strong><br>Para uma marca, sim. O .com.br transmite confiança para o público brasileiro, e registrar também o .com impede que outra pessoa use o mesmo nome na outra extensão.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Como criar um nome de domínio?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Comece com as palavras que descrevem o negócio e combine-as com prefixos e sufixos curtos até achar um nome curto, fácil de dizer e livre. O gerador desta página faz essas combinações e consulta a disponibilidade. Depois, passe as melhores ideias pelos testes do guia de nome de domínio e pela busca de marcas do INPI."
      }
    },
    {
      "@type": "Question",
      "name": "O gerador de nomes de domínio é grátis?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sim. A ferramenta é gratuita, não pede cadastro e funciona direto no navegador. As consultas vão para os serviços oficiais de cada extensão, e nada do que você digita fica salvo."
      }
    },
    {
      "@type": "Question",
      "name": "Como saber se um domínio está disponível?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Digite as palavras no gerador ou o nome completo no verificador de nome de domínio. As duas ferramentas consultam o serviço oficial da extensão, que informa se o nome já tem dono. No .br, a confirmação final acontece na hora do registro."
      }
    },
    {
      "@type": "Question",
      "name": "Posso usar hífen ou acento no nome de domínio?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Pode, mas não convém. O hífen e o acento se perdem quando o endereço é dito em voz alta, e no .br eles não formam um nome novo: bolo-caseiro.com.br equivale a bolocaseiro.com.br."
      }
    },
    {
      "@type": "Question",
      "name": "Quantos caracteres pode ter um domínio .com.br?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "De 2 a 26 caracteres, sem contar o .com.br. Na prática, os nomes mais fáceis de lembrar ficam entre 6 e 15 caracteres."
      }
    },
    {
      "@type": "Question",
      "name": "Vale registrar o .com e o .com.br?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Para uma marca, sim. O .com.br transmite confiança para o público brasileiro, e registrar também o .com impede que outra pessoa use o mesmo nome na outra extensão."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Um bom nome de domínio quase nunca é a primeira ideia: ele sai de várias combinações até aparecer uma curta, fácil de dizer e livre. Use o gerador para levantar as opções, passe as favoritas pelos testes do guia e pela busca do INPI, e registre o nome escolhido antes que outra pessoa faça isso.</p>



<p class="wp-block-paragraph"></p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/gerador-de-nomes-de-dominio/" data-wpel-link="internal" target="_self">Gerador de nomes de domínio com consulta grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18637</post-id>	</item>
		<item>
		<title>DNSSEC: o que é, como ativar e verificador grátis</title>
		<link>https://www.homehost.com.br/blog/dominio/dnssec/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Fri, 06 Nov 2026 19:38:52 +0000</pubDate>
				<category><![CDATA[Domínio]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18625</guid>

					<description><![CDATA[<p>O DNSSEC é uma extensão de segurança do DNS que assina digitalmente as respostas do seu domínio, para que ninguém consiga falsificar o endereço para onde ele aponta. Com o verificador abaixo, você confere se o DNSSEC está ativo, se a cadeia de confiança está completa e se o registro DS confere com as chaves [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/dnssec/" data-wpel-link="internal" target="_self">DNSSEC: o que é, como ativar e verificador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>O DNSSEC é uma extensão de segurança do DNS que assina digitalmente as respostas do seu domínio, para que ninguém consiga falsificar o endereço para onde ele aponta. Com o verificador abaixo, você confere se o DNSSEC está ativo, se a cadeia de confiança está completa e se o registro DS confere com as chaves publicadas.</strong></p>



<p class="wp-block-paragraph">No Brasil, 1.898.861 domínios .br usam DNSSEC, 31,8% do total, segundo as <a href="https://www.homehost.com.br/blog/registro-de-dominios/estatisticas-dominios-br/" data-wpel-link="internal" target="_self">estatísticas de domínios .br</a>. Quem usa os servidores DNS do Registro.br já tem o recurso ligado sem fazer nada. Nos outros casos, a ativação leva poucos passos.</p>



<h2 class="wp-block-heading">Verifique o DNSSEC do seu domínio</h2>



<p class="wp-block-paragraph">Digite o domínio e clique em Verificar. A ferramenta consulta o DNS público do Google e da Cloudflare, que validam DNSSEC, e mostra o resultado, a cadeia de confiança da raiz até o domínio, os detalhes do registro DS e das chaves, e o que fazer em seguida.</p>



<div class="hh-dsec" id="hh-dsec" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-dsec"); if (!root0) { return; } var AMP = String.fromCharCode(38); var S2 = "/" + "/"; var PFX = "hh-dsec-"; function U(n) { return String.fromCharCode(n); } var ELL = U(8230); var DOT = " " + U(183) + " "; var GURL = "https:" + S2 + "dns.google/resolve?name="; var CURL = "https:" + S2 + "cloudflare-dns.com/dns-query?name="; var RES = [{name: "Google", ip: "8.8.8.8", url: GURL, cf: false}, {name: "Cloudflare", ip: "1.1.1.1", url: CURL, cf: true}]; var NAVY = "#0b3d91"; var COL = {ok: ["#15803d", "#e8f5ec", U(10004)], warn: ["#b45309", "#fff4e5", U(9888)], err: ["#b42318", "#fdecec", U(10006)], info: ["#1d4ed8", "#eef3ff", U(8505)], off: ["#475569", "#f1f5f9", U(8212)]}; var RANK = {err: 0, warn: 1, ok: 2, info: 3}; var MONO = "font-family:Consolas,Menlo,monospace;font-size:12.5px;overflow-wrap:anywhere;word-break:break-all;"; var HOST = "abcdefghijklmnopqrstuvwxyz0123456789-_"; var DIGS = "0123456789"; var DNSFAIL = "N"+U(227)+"o deu para acessar o servi"+U(231)+"o de DNS. Um firewall, uma rede corporativa ou uma extens"+U(227)+"o do navegador pode estar bloqueando. Tente outra rede ou uma janela an"+U(244)+"nima com as extens"+U(245)+"es desligadas."; var ALG = {1: ["RSA/MD5", "bad"], 3: ["DSA/SHA-1", "bad"], 5: ["RSA/SHA-1", "sha1"], 6: ["DSA/SHA-1 com NSEC3", "bad"], 7: ["RSA/SHA-1 com NSEC3", "sha1"], 8: ["RSA/SHA-256", "rec"], 10: ["RSA/SHA-512", "ok"], 12: ["GOST R 34.10-2001", "bad"], 13: ["ECDSA P-256 com SHA-256", "rec"], 14: ["ECDSA P-384 com SHA-384", "ok"], 15: ["Ed25519", "rec"], 16: ["Ed448", "ok"], 17: ["SM2 com SM3", "ok"], 23: ["GOST R 34.10-2012", "ok"]}; var DIG = {1: ["SHA-1", "sha1"], 2: ["SHA-256", "rec"], 3: ["GOST R 34.11-94", "bad"], 4: ["SHA-384", "ok"], 5: ["GOST R 34.11-2012", "ok"], 6: ["SM3", "ok"]}; var HASH = {1: "SHA-1", 2: "SHA-256", 4: "SHA-384"}; var ROOTK = {20326: "KSK-2017", 38696: "KSK-2024"}; var EDE = {1: "algoritmo de chave n"+U(227)+"o suportado", 2: "tipo de resumo do DS n"+U(227)+"o suportado", 5: "valida"+U(231)+U(227)+"o inconclusiva", 6: "assinatura inv"+U(225)+"lida", 7: "assinatura vencida", 8: "assinatura que ainda n"+U(227)+"o come"+U(231)+"ou a valer", 9: "nenhuma chave da zona confere com o DS", 10: "faltam assinaturas", 11: "chave sem a marca"+U(231)+U(227)+"o de chave de zona", 12: "falta a prova de inexist"+U(234)+"ncia (NSEC)", 27: "n"+U(250)+"mero de itera"+U(231)+U(245)+"es do NSEC3 n"+U(227)+"o suportado"}; var busy = false; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function plural(n, one, many) { return n === 1 ? one : many; } function nm(s) { s = String(or(s, "")).trim().toLowerCase(); while (gt(s.length, 1) ? s.charAt(s.length - 1) === "." : false) { s = s.slice(0, -1); } return s ? s : "."; } function ends(h, s) { if (s === ".") { return true; } if (h === s) { return true; } return gt(h.length, s.length) ? h.slice(h.length - s.length - 1) === "." + s : false; } function parent(z) { if (z === ".") { return ""; } var i = z.indexOf("."); return i === -1 ? "." : z.slice(i + 1); } function zname(z) { return z === "." ? "a raiz" : z; } function emZ(z) { return z === "." ? "na raiz" : "em " + z; } function listPt(a) { if (a.length === 0) { return ""; } if (a.length === 1) { return a[0]; } return a.slice(0, a.length - 1).join(", ") + " e " + a[a.length - 1]; } function two(n) { return lt(n, 10) ? "0" + n : String(n); } function fmtDate(sec) { var d = new Date(sec * 1000); return two(d.getDate()) + "/" + two(d.getMonth() + 1) + "/" + d.getFullYear() + ", " + two(d.getHours()) + "h" + two(d.getMinutes()); } function dur(s) { s = Math.round(Number(s)); if (isNaN(s) ? true : lt(s, 0)) { return ""; } if (lt(s, 60)) { return s + plural(s, " segundo", " segundos"); } if (lt(s, 3600)) { var m = Math.round(s / 60); return m + plural(m, " minuto", " minutos"); } if (lt(s, 86400)) { var h = Math.round(s / 3600); return h + plural(h, " hora", " horas"); } var d = Math.round(s / 86400); return d + plural(d, " dia", " dias"); } function algName(a) { var x = ALG[a]; return x ? x[0] : "algoritmo " + a; } function algFull(a) { var x = ALG[a]; return x ? x[0] + " (algoritmo " + a + ")" : "algoritmo " + a; } function digName(t) { var x = DIG[t]; return x ? x[0] : "tipo " + t; } function fetchJson(url, cf) { var ctl = window.AbortController ? new AbortController() : null; var opt = {credentials: "omit"}; if (cf) { opt.headers = {"accept": "application/dns-json"}; } if (ctl) { opt.signal = ctl.signal; } var timer = setTimeout(function () { if (ctl) { ctl.abort(); } }, 9000); return fetch(url, opt).then(function (r) { clearTimeout(timer); return r.json(); }, function (e) { clearTimeout(timer); throw e; }); } function rows(x) { var o = []; var a = or(x, []); for (var i = 0; i !== a.length; i++) { o.push({n: nm(a[i].name), t: a[i].type, ttl: a[i].TTL, d: String(or(a[i].data, "")).trim()}); } return o; } async function ask(r, name, type, cd) { try { var j = await fetchJson(r.url + encodeURIComponent(name) + AMP + "type=" + type + (cd ? AMP + "do=1" + AMP + "cd=1" : ""), r.cf); var cm = j.Comment; if (cm ? typeof cm !== "string" : false) { cm = cm.join(" "); } return {st: typeof j.Status === "number" ? j.Status : -1, ad: j.AD === true, ans: rows(j.Answer), au: rows(j.Authority), cm: String(or(cm, ""))}; } catch (e) { return {st: -1, ad: false, ans: [], au: [], cm: ""}; } } async function askAny(name, type) { var r = await ask(RES[0], name, type, true); if (r.st === -1) { r = await ask(RES[1], name, type, true); } return r; } function clean(v) { var s = String(or(v, "")).trim().toLowerCase(); var p = s.indexOf(S2); if (p !== -1) { s = s.slice(p + 2); } var cut = ["/", "?", "#", " "]; for (var i = 0; i !== cut.length; i++) { var k = s.indexOf(cut[i]); if (k !== -1) { s = s.slice(0, k); } } var at = s.lastIndexOf("@"); if (at !== -1) { s = s.slice(at + 1); } var co = s.indexOf(":"); if (co !== -1) { s = s.slice(0, co); } while (s.charAt(s.length - 1) === ".") { s = s.slice(0, -1); } while (s.charAt(0) === ".") { s = s.slice(1); } if (!s) { return {err: "Digite um dom"+U(237)+"nio, como seusite.com.br."}; } var show = s; var ascii = true; for (var c = 0; c !== s.length; c++) { if (gt(s.charCodeAt(c), 127)) { ascii = false; } } if (!ascii) { try { s = new URL("http:" + S2 + s).hostname; } catch (e) { return {err: show + " n"+U(227)+"o "+U(233)+" um nome de dom"+U(237)+"nio v"+U(225)+"lido."}; } } if (s.indexOf("www.") === 0 ? gt(s.split(".").length, 2) : false) { s = s.slice(4); if (show.indexOf("www.") === 0) { show = show.slice(4); } } var L = s.split("."); if (lt(L.length, 2)) { return {err: "Digite o dom"+U(237)+"nio completo, com a extens"+U(227)+"o, como seusite.com.br."}; } if (gt(s.length, 253)) { return {err: "O nome passa de 253 caracteres, o limite do DNS."}; } var num = true; for (var j = 0; j !== L.length; j++) { var lab = L[j]; if (!lab ? true : gt(lab.length, 63)) { return {err: show + " n"+U(227)+"o "+U(233)+" um nome de dom"+U(237)+"nio v"+U(225)+"lido."}; } if (lab.charAt(0) === "-" ? true : lab.charAt(lab.length - 1) === "-") { return {err: show + " n"+U(227)+"o "+U(233)+" um nome de dom"+U(237)+"nio v"+U(225)+"lido."}; } for (var q = 0; q !== lab.length; q++) { if (!has(HOST, lab.charAt(q))) { return {err: show + " n"+U(227)+"o "+U(233)+" um nome de dom"+U(237)+"nio v"+U(225)+"lido: tem um caractere que n"+U(227)+"o pode aparecer em dom"+U(237)+"nios."}; } if (!has(DIGS, lab.charAt(q))) { num = false; } } } if (num) { return {err: "Digite um dom"+U(237)+"nio, e n"+U(227)+"o um endere"+U(231)+"o IP. O DNSSEC vale para nomes de dom"+U(237)+"nio."}; } return {name: s, show: show}; } function b64(s) { try { var bin = atob(String(s).split(" ").join("")); var o = []; for (var i = 0; i !== bin.length; i++) { o.push(bin.charCodeAt(i)); } return o; } catch (e) { return null; } } function keyTag(rd) { var ac = 0; for (var i = 0; i !== rd.length; i++) { ac += i % 2 === 0 ? rd[i] * 256 : rd[i]; } ac += Math.floor(ac / 65536) % 65536; return ac % 65536; } function parseKey(d) { var p = d.split(" "); if (lt(p.length, 4)) { return null; } var f = parseInt(p[0], 10); var pr = parseInt(p[1], 10); var a = parseInt(p[2], 10); var kb = b64(p.slice(3).join("")); if (!kb ? true : isNaN(f + pr + a)) { return null; } var rd = [Math.floor(f / 256), f % 256, pr, a].concat(kb); return {flags: f, alg: a, rd: rd, tag: keyTag(rd), sep: f % 2 === 1, zone: Math.floor(f / 256) % 2 === 1, rev: Math.floor(f / 128) % 2 === 1}; } function parseDs(d) { var p = d.split(" "); if (lt(p.length, 4)) { return null; } var t = parseInt(p[0], 10); var a = parseInt(p[1], 10); var dt = parseInt(p[2], 10); if (isNaN(t + a + dt)) { return null; } return {tag: t, alg: a, dt: dt, dig: p.slice(3).join("").toLowerCase()}; } function tm(x) { x = String(x); if (x.length === 14) { return Date.UTC(parseInt(x.slice(0, 4), 10), parseInt(x.slice(4, 6), 10) - 1, parseInt(x.slice(6, 8), 10), parseInt(x.slice(8, 10), 10), parseInt(x.slice(10, 12), 10), parseInt(x.slice(12, 14), 10)) / 1000; } return parseInt(x, 10); } function parseSig(d) { var p = d.split(" "); if (lt(p.length, 8)) { return null; } return {cov: p[0].toLowerCase(), alg: parseInt(p[1], 10), ottl: parseInt(p[3], 10), exp: tm(p[4]), inc: tm(p[5]), tag: parseInt(p[6], 10), signer: nm(p[7])}; } function wire(z) { var o = []; if (z !== ".") { var L = z.split("."); for (var i = 0; i !== L.length; i++) { o.push(L[i].length); for (var k = 0; k !== L[i].length; k++) { o.push(L[i].charCodeAt(k)); } } } o.push(0); return o; } function hexs(buf) { var b = new Uint8Array(buf); var s = ""; for (var i = 0; i !== b.length; i++) { s += ("0" + b[i].toString(16)).slice(-2); } return s; } async function dsCheck(zone, d, keys) { var cand = null; for (var i = 0; i !== keys.length; i++) { var k = keys[i]; if (k.tag === d.tag ? k.alg === d.alg : false) { cand = k; var h = HASH[d.dt]; var sub = window.crypto ? window.crypto.subtle : null; if (!h ? true : !sub) { return {st: "unk", key: k}; } try { var buf = await sub.digest(h, new Uint8Array(wire(zone).concat(k.rd))); if (hexs(buf) === d.dig) { return {st: "ok", key: k}; } } catch (e) { return {st: "unk", key: k}; } } } return {st: cand ? "bad" : "none", key: cand}; } async function zoneInfo(z) { var r = await Promise.all([askAny(z, 48), z === "." ? null : askAny(z, 43)]); var kr = r[0]; var dr = r[1]; var o = {z: z, keys: [], ksig: [], ds: [], chk: [], dsig: [], dsTtl: 0, kst: kr.st, dst: dr ? dr.st : 0}; for (var i = 0; i !== kr.ans.length; i++) { var a = kr.ans[i]; if (a.n !== z) { continue; } if (a.t === 48) { var k = parseKey(a.d); if (k) { o.keys.push(k); } } if (a.t === 46) { var s = parseSig(a.d); if (s ? s.cov === "dnskey" : false) { o.ksig.push(s); } } } if (dr) { for (var j = 0; j !== dr.ans.length; j++) { var b = dr.ans[j]; if (b.n !== z) { continue; } if (b.t === 43) { var d = parseDs(b.d); if (d) { o.ds.push(d); o.dsTtl = b.ttl; } } if (b.t === 46) { var s2 = parseSig(b.d); if (s2 ? s2.cov === "ds" : false) { o.dsig.push(s2); if (s2.ottl) { o.dsTtl = s2.ottl; } } } } } for (var m = 0; m !== o.ds.length; m++) { o.chk.push(await dsCheck(z, o.ds[m], o.keys)); } o.match = 0; for (var n = 0; n !== o.chk.length; n++) { if (o.chk[n].st === "ok") { o.match++; } } return o; } async function findApex(name) { var cur = name; for (var n = 0; n !== 12; n++) { var r = await askAny(cur, 6); if (r.st === -1) { return {v: "fail"}; } if (r.st === 3) { return {v: "nx"}; } if (r.st !== 0) { return {v: "srv"}; } var cn = false; var soa = false; for (var i = 0; i !== r.ans.length; i++) { if (r.ans[i].n === cur) { if (r.ans[i].t === 5) { cn = true; } if (r.ans[i].t === 6) { soa = true; } } } if (soa ? !cn : false) { return {apex: cur}; } var hint = ""; for (var k = 0; k !== r.au.length; k++) { if (r.au[k].t === 6) { hint = r.au[k].n; } } if (cn ? false : (hint ? (hint !== cur ? (hint !== "." ? ends(cur, hint) : false) : false) : false)) { cur = hint; continue; } var p = parent(cur); if (!p ? true : p === ".") { return {v: "nx"}; } cur = p; } return {v: "fail"}; } function sigNotes(N, label, sigs, now) { if (!sigs.length) { return null; } var s = sigs[0]; for (var i = 1; i !== sigs.length; i++) { if (gt(sigs[i].exp, s.exp)) { s = sigs[i]; } } if (lt(s.exp, now)) { N.push(["err", "A assinatura do registro " + label + " venceu em " + fmtDate(s.exp) + ". Os resolvedores recusam assinaturas vencidas: a zona precisa ser assinada de novo."]); } else if (lt(s.exp - now, 3 * 86400) ? gt(s.exp - s.inc, 7 * 86400) : false) { N.push(["warn", "A assinatura do registro " + label + " vence em " + dur(s.exp - now) + ", em " + fmtDate(s.exp) + ". O servidor DNS costuma renovar antes disso. Se n"+U(227)+"o renovar, o dom"+U(237)+"nio sai do ar para quem valida DNSSEC."]); } if (gt(s.inc, now + 3600)) { N.push(["warn", "A assinatura do registro " + label + " s"+U(243)+" come"+U(231)+"a a valer em " + fmtDate(s.inc) + ". Confira o rel"+U(243)+"gio do servidor DNS."]); } return s; } async function analyze(name) { var ap = await findApex(name); if (!ap.apex) { return ap; } var apex = ap.apex; var anc = []; var p = parent(apex); while (p ? p !== "." : false) { anc.push(p); p = parent(p); } var soas = await Promise.all(anc.map(function (x) { return askAny(x, 6); })); var chain = ["."]; for (var i = anc.length - 1; i !== -1; i--) { var isz = false; for (var k = 0; k !== soas[i].ans.length; k++) { if (soas[i].ans[k].t === 6 ? soas[i].ans[k].n === anc[i] : false) { isz = true; } } if (isz) { chain.push(anc[i]); } } chain.push(apex); var both = await Promise.all([Promise.all(chain.map(function (z) { return zoneInfo(z); })), ask(RES[0], apex, 6, false), ask(RES[1], apex, 6, false), askAny(apex, 6), askAny(apex, 51)]); var infos = both[0]; var vals = [both[1], both[2]]; var A = infos[infos.length - 1]; var P = infos[infos.length - 2]; var R = {apex: apex, chain: chain, infos: infos, vals: vals, A: A, P: P, N: [], br: ends(apex, "br")}; var now = Date.now() / 1000; var soaSig = []; for (var s = 0; s !== both[3].ans.length; s++) { var x = both[3].ans[s]; if (x.n === apex ? x.t === 46 : false) { var ps = parseSig(x.d); if (ps ? ps.cov === "soa" : false) { soaSig.push(ps); } } } R.n3 = null; for (var q = 0; q !== both[4].ans.length; q++) { var y = both[4].ans[q]; if (y.n === apex ? y.t === 51 : false) { var py = y.d.split(" "); R.n3 = {it: parseInt(py[2], 10), salt: or(py[3], "-")}; } } var net = 0; var bog = false; var ad = false; for (var v = 0; v !== 2; v++) { if (vals[v].st === -1) { net++; } else { if (vals[v].st === 2) { bog = true; } if (vals[v].ad) { ad = true; } } } var upOff = ""; for (var u = 1; u !== infos.length - 1; u++) { if (infos[u].keys.length === 0 ? infos[u].kst === 0 : false) { if (!upOff) { upOff = infos[u].z; } } } R.upOff = upOff; R.v = net === 2 ? "fail" : (bog ? "bogus" : (ad ? "secure" : (upOff ? "tldoff" : (A.ds.length ? "unconf" : (A.keys.length ? "half" : "off"))))); var N = R.N; var reg = R.br ? "no Registro.br" : "no site onde o dom"+U(237)+"nio foi registrado"; R.reg = reg; R.cause = ""; if (A.ds.length) { if (!A.keys.length) { R.cause = "nokey"; N.push(["err", "H"+U(225)+" registro DS " + emZ(P.z) + ", mas a zona " + apex + " n"+U(227)+"o publica nenhuma chave DNSKEY. Isso acontece quando o DNSSEC "+U(233)+" desligado no servidor DNS, ou quando o dom"+U(237)+"nio troca de servidor DNS, sem tirar o DS " + reg + "."]); } else { for (var c = 0; c !== A.ds.length; c++) { var d = A.ds[c]; var ck = A.chk[c]; if (ck.st === "none" ? true : ck.st === "bad") { if (A.match) { N.push(["warn", "O DS com tag " + d.tag + " n"+U(227)+"o corresponde a nenhuma chave publicada. Deve ser de uma chave antiga: remova-o " + reg + "."]); } else { R.cause = "nomatch"; N.push(["err", "O DS com tag " + d.tag + " n"+U(227)+"o corresponde a nenhuma chave publicada na zona" + (ck.st === "bad" ? ": a tag bate com uma chave, mas o resumo "+U(233)+" diferente" : "") + ". "+U(201)+" isso que quebra a valida"+U(231)+U(227)+"o. Troque o DS " + reg + " pelo da chave atual."]); } } if (ck.st === "unk") { N.push(["info", "N"+U(227)+"o deu para conferir no navegador o DS com tag " + d.tag + ", que usa resumo " + digName(d.dt) + "."]); } if (d.dt === 1) { N.push(["warn", "O DS com tag " + d.tag + " usa resumo SHA-1 (tipo 1). Desde a RFC 9905, de 2025, SHA-1 n"+U(227)+"o deve mais ser usado para criar DS. Cadastre um DS com SHA-256 (tipo 2) no lugar."]); } else if (DIG[d.dt] ? DIG[d.dt][1] === "bad" : false) { N.push(["err", "O DS com tag " + d.tag + " usa resumo " + digName(d.dt) + ", que os resolvedores n"+U(227)+"o aceitam mais."]); } } } } var seen = {}; for (var e = 0; e !== A.keys.length; e++) { var al = A.keys[e].alg; if (seen[al]) { continue; } seen[al] = true; var st = ALG[al] ? ALG[al][1] : "unk"; if (st === "sha1") { N.push(["warn", "A zona "+U(233)+" assinada com " + algFull(al) + ". Desde a RFC 9905, de 2025, algoritmos com SHA-1 n"+U(227)+"o devem mais ser usados para assinar. Troque pelo algoritmo 13 (ECDSA P-256 com SHA-256)."]); } if (st === "bad") { N.push(["err", "A zona "+U(233)+" assinada com " + algFull(al) + ", que os resolvedores n"+U(227)+"o aceitam mais."]); } if (st === "unk") { N.push(["info", "A zona usa o algoritmo " + al + ", que a ferramenta n"+U(227)+"o reconhece."]); } } R.soaSig = sigNotes(N, "SOA", soaSig, now); R.keySig = sigNotes(N, "DNSKEY", A.ksig, now); if (R.soaSig ? lt(R.soaSig.exp, now) : false) { R.cause = R.cause ? R.cause : "exp"; } if (R.keySig ? lt(R.keySig.exp, now) : false) { R.cause = R.cause ? R.cause : "exp"; } if (R.n3) { if (gt(R.n3.it, 0)) { N.push(["warn", "A zona usa NSEC3 com " + R.n3.it + plural(R.n3.it, " itera"+U(231)+U(227)+"o", " itera"+U(231)+U(245)+"es") + ". A RFC 9276, de 2022, manda usar 0. Com mais, os resolvedores podem tratar a zona como se n"+U(227)+"o tivesse DNSSEC, ou recusar as respostas." + (R.v === "secure" ? " O Google e a Cloudflare ainda aceitam, mas o ideal "+U(233)+" zerar as itera"+U(231)+U(245)+"es no servi"+U(231)+"o de DNS." : "")]); } if (R.n3.salt !== "-") { N.push(["info", "A zona usa NSEC3 com salt. A RFC 9276 recomenda n"+U(227)+"o usar salt."]); } } if (vals[0].st !== -1 ? vals[1].st !== -1 : false) { var g2 = vals[0].st === 2; var c2 = vals[1].st === 2; if (g2 !== c2) { N.push(["info", "O Google e a Cloudflare discordaram: " + (g2 ? "o Google recusou e a Cloudflare aceitou" : "a Cloudflare recusou e o Google aceitou") + " as respostas. Isso costuma indicar um algoritmo que s"+U(243)+" um deles suporta, ou um problema em parte dos servidores DNS do dom"+U(237)+"nio."]); } } if (net === 1) { N.push(["info", vals[0].st === -1 ? "O Google n"+U(227)+"o respondeu. O resultado usa s"+U(243)+" a Cloudflare." : "A Cloudflare n"+U(227)+"o respondeu. O resultado usa s"+U(243)+" o Google."]); } return R; } function notes(box, arr) { arr = arr.slice().sort(function (a, b) { return RANK[a[0]] - RANK[b[0]]; }); for (var i = 0; i !== arr.length; i++) { var c = COL[arr[i][0]]; var d = add(box, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:8px 11px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(arr[i][1])); } } function sub(p, text) { return add(p, "div", text, "font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 6px;"); } function line(box, kind, title, detail, first) { var c = COL[kind]; var r = add(box, "div", "", "display:flex;gap:10px;align-items:flex-start;padding:9px 0;" + (first ? "" : "border-top:1px solid #eef1f5;")); add(r, "span", c[2], "flex:0 0 22px;height:22px;border-radius:11px;background:" + c[1] + ";color:" + c[0] + ";font-weight:800;font-size:13px;line-height:22px;text-align:center;"); var t = add(r, "div", "", "min-width:0;flex:1 1 auto;"); add(t, "div", title, "font-weight:800;font-size:14.5px;color:#0F172A;overflow-wrap:anywhere;"); if (detail) { add(t, "div", detail, "font-size:13.5px;color:#334155;line-height:1.5;margin-top:1px;overflow-wrap:anywhere;"); } return t; } function whiteBox(p) { return add(p, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:2px 14px;"); } function mainAlg(info) { for (var i = 0; i !== info.chk.length; i++) { if (info.chk[i].st === "ok") { return info.chk[i].key.alg; } } return info.keys.length ? info.keys[0].alg : 0; } function ede(cm) { var i = cm.indexOf("EDE("); if (i === -1) { return ""; } var n = parseInt(cm.slice(i + 4), 10); return EDE[n] ? EDE[n] + " (c"+U(243)+"digo " + n + ")" : "c"+U(243)+"digo " + n; } function verdict(c, R) { var d = R.apex === c.name ? c.show : R.apex; var okNames = []; for (var i = 0; i !== 2; i++) { if (R.vals[i].ad) { okNames.push(RES[i].name === "Google" ? "do Google" : "da Cloudflare"); } } var T = { secure: ["ok", "DNSSEC ativo e funcionando", "A cadeia de confian"+U(231)+"a est"+U(225)+" completa, da raiz at"+U(233)+" " + d + ", e " + (okNames.length === 2 ? "os resolvedores do Google e da Cloudflare confirmaram" : "o resolvedor " + okNames[0] + " confirmou") + " as assinaturas."], bogus: ["err", "DNSSEC com erro", "Os resolvedores que validam DNSSEC recusam as respostas de " + d + ". Para quem usa o DNS do Google, da Cloudflare ou de v"+U(225)+"rios provedores de internet, o site e o e-mail do dom"+U(237)+"nio ficam fora do ar."], off: ["info", "DNSSEC desativado", d + " funciona normalmente, mas as respostas do DNS n"+U(227)+"o s"+U(227)+"o assinadas. N"+U(227)+"o h"+U(225)+" como confirmar que elas vieram do servidor certo."], half: ["warn", "DNSSEC pela metade", "A zona " + d + " est"+U(225)+" assinada, mas falta o registro DS " + emZ(R.P.z) + ". Sem ele, ningu"+U(233)+"m valida as assinaturas, e o dom"+U(237)+"nio funciona como se n"+U(227)+"o tivesse DNSSEC."], tldoff: ["info", "A extens"+U(227)+"o ." + R.upOff + " n"+U(227)+"o usa DNSSEC", "Sem DNSSEC na extens"+U(227)+"o, n"+U(227)+"o h"+U(225)+" como montar a cadeia de confian"+U(231)+"a at"+U(233)+" " + d + ". Isso s"+U(243)+" muda se o operador da extens"+U(227)+"o adotar o DNSSEC."], unconf: ["warn", "DNSSEC n"+U(227)+"o confirmado", "H"+U(225)+" registro DS e chaves publicadas, mas os resolvedores n"+U(227)+"o confirmaram as assinaturas de " + d + ". Veja os avisos abaixo."] }; return T[R.v]; } function nextStep(R) { var reg = R.reg; var ttl = R.A.dsTtl ? dur(R.A.dsTtl) : "um ou dois dias"; if (R.v === "secure") { return "Nada a corrigir. Se for trocar o dom"+U(237)+"nio de servidor DNS, remova antes o DS " + reg + " e espere " + ttl + ", o tempo que os resolvedores guardam o DS. Se a troca acontecer com o DS antigo ainda publicado, o dom"+U(237)+"nio sai do ar para quem valida DNSSEC."; } if (R.v === "off") { return R.br ? "Com o DNS na hospedagem, ative o DNSSEC no cPanel, em Editor de Zona, e cadastre o DS no Registro.br. Na Cloudflare, o caminho "+U(233)+" o mesmo: ativar o DNSSEC l"+U(225)+" e cadastrar o DS. Quem usa os servidores DNS do pr"+U(243)+"prio Registro.br j"+U(225)+" tem o DNSSEC ligado automaticamente. O passo a passo est"+U(225)+" mais abaixo." : "Ative o DNSSEC no servi"+U(231)+"o que responde pelo DNS do dom"+U(237)+"nio (no cPanel, em Editor de Zona) e cadastre o DS no site onde o dom"+U(237)+"nio foi registrado. O passo a passo est"+U(225)+" mais abaixo."; } if (R.v === "half") { return "Copie os dados do DS no servi"+U(231)+"o de DNS (no cPanel, em Editor de Zona, bot"+U(227)+"o DNSSEC; na Cloudflare, no quadro DNSSEC) e cadastre-os " + reg + ". Depois de publicado, rode o teste de novo."; } if (R.v === "bogus") { if (R.cause === "nokey" ? true : R.cause === "nomatch") { return "Atualize o DS " + reg + " com os dados da chave atual ou, se o dom"+U(237)+"nio n"+U(227)+"o usa mais DNSSEC, remova o DS. At"+U(233)+" a corre"+U(231)+U(227)+"o, quem valida DNSSEC n"+U(227)+"o consegue acessar o dom"+U(237)+"nio. Depois da mudan"+U(231)+"a, os resolvedores podem levar at"+U(233)+" " + ttl + " para enxergar o DS novo."; } if (R.cause === "exp") { return "A zona precisa ser assinada de novo pelo servi"+U(231)+"o de DNS. Se o dom"+U(237)+"nio n"+U(227)+"o usa mais DNSSEC, remova o DS " + reg + "."; } return "Compare o DS publicado " + reg + " com as chaves do servidor DNS e confira as assinaturas. Se n"+U(227)+"o encontrar o erro, remover o DS faz o dom"+U(237)+"nio voltar a funcionar, sem DNSSEC, depois que o DS sai do cache dos resolvedores, em at"+U(233)+" " + ttl + "."; } if (R.v === "unconf") { return "Na maioria dos casos, a sa"+U(237)+"da "+U(233)+" gerar novas chaves com o algoritmo 13 (ECDSA P-256 com SHA-256) e trocar o DS " + reg + "."; } return ""; } function render(c, R) { var out = el("out"); out.textContent = ""; var simple = {nx: ["info", "Dom"+U(237)+"nio n"+U(227)+"o encontrado", c.show + " n"+U(227)+"o existe no DNS. Confira se o nome est"+U(225)+" certo e se o registro do dom"+U(237)+"nio est"+U(225)+" ativo."], srv: ["err", "Os servidores DNS do dom"+U(237)+"nio n"+U(227)+"o responderam", "Nem com a valida"+U(231)+U(227)+"o desligada deu para obter uma resposta de " + c.show + ". O problema est"+U(225)+" nos servidores DNS do dom"+U(237)+"nio, e n"+U(227)+"o no DNSSEC."], fail: ["err", "N"+U(227)+"o deu para consultar", DNSFAIL]}; var V = simple[R.v] ? simple[R.v] : verdict(c, R); var col = COL[V[0]]; var card = add(out, "div", "", "background:" + col[1] + ";border:1px solid " + col[0] + ";border-radius:12px;padding:14px 16px;margin-top:12px;"); card.id = PFX + "verdict"; card.setAttribute("data-v", R.v); add(card, "div", col[2] + " " + V[1], "font-size:17px;font-weight:800;color:" + col[0] + ";line-height:1.35;overflow-wrap:anywhere;"); add(card, "div", V[2], "font-size:14px;color:#0F172A;margin-top:4px;line-height:1.5;overflow-wrap:anywhere;"); if (simple[R.v]) { return; } if (R.apex !== c.name) { add(card, "div", "O DNSSEC "+U(233)+" configurado na zona " + R.apex + ", que inclui " + c.show + ".", "font-size:13.5px;color:#334155;margin-top:6px;line-height:1.5;overflow-wrap:anywhere;"); } sub(out, "Cadeia de confian"+U(231)+"a"); var box = whiteBox(out); box.id = PFX + "chain"; for (var i = 0; i !== R.infos.length; i++) { var I = R.infos[i]; var parts = []; var kind = "ok"; if (I.z === ".") { if (I.keys.length) { var rk = I.ksig.length ? I.ksig[0].tag : 0; parts.push("assinada" + (rk ? " com a chave " + rk + (ROOTK[rk] ? " (" + ROOTK[rk] + ")" : "") : "")); parts.push("ponto de partida da valida"+U(231)+U(227)+"o"); } else { kind = "info"; parts.push("chaves n"+U(227)+"o consultadas"); } line(box, kind, "Raiz (.)", parts.join(DOT), i === 0); continue; } var pz = emZ(R.infos[i - 1].z); if (I.kst === -1 ? true : I.dst === -1) { line(box, "info", I.z, "n"+U(227)+"o deu para consultar", false); continue; } if (I.ds.length) { parts.push(I.match ? "DS " + pz + " confere com a chave" : (I.keys.length ? "DS " + pz + " n"+U(227)+"o confere com as chaves" : "DS " + pz + ", mas a zona n"+U(227)+"o tem chaves")); } else { parts.push("sem DS " + pz); } parts.push(I.keys.length ? "assinada com " + algName(mainAlg(I)) : "n"+U(227)+"o assinada"); if (I.ds.length) { kind = I.match ? "ok" : "err"; } else { kind = I.keys.length ? "warn" : "off"; } line(box, kind, I.z === R.apex ? I.z + " (seu dom"+U(237)+"nio)" : I.z, parts.join(DOT), false); } var A = R.A; sub(out, "Detalhes de " + R.apex); var det = whiteBox(out); det.id = PFX + "det"; var t1 = line(det, A.ds.length ? (A.match ? "ok" : "err") : "off", "Registro DS " + emZ(R.P.z), A.ds.length ? "O DS fica na zona de cima e aponta para a chave do dom"+U(237)+"nio." + (A.dsTtl ? " Os resolvedores guardam o DS por at"+U(233)+" " + dur(A.dsTtl) + "." : "") : "Nenhum DS publicado. Sem ele, a cadeia de confian"+U(231)+"a para em " + zname(R.P.z) + ".", true); for (var j = 0; j !== A.ds.length; j++) { var dd = A.ds[j]; var ck = A.chk[j]; var w = add(t1, "div", "", "margin-top:8px;padding:8px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;"); var mk = ck.st === "ok" ? ["ok", "confere com a chave " + ck.key.tag] : (ck.st === "unk" ? ["info", "n"+U(227)+"o conferido"] : ["err", "n"+U(227)+"o confere com nenhuma chave"]); add(w, "div", "Tag " + dd.tag + DOT + algName(dd.alg) + DOT + "resumo " + digName(dd.dt), "font-size:13.5px;font-weight:700;color:#0F172A;"); add(w, "div", COL[mk[0]][2] + " " + mk[1], "font-size:13px;font-weight:700;color:" + COL[mk[0]][0] + ";margin-top:2px;"); add(w, "div", dd.dig, MONO + "color:#334155;margin-top:3px;"); } var t2 = line(det, A.keys.length ? "ok" : "off", "Chaves (DNSKEY)", A.keys.length ? A.keys.length + plural(A.keys.length, " chave publicada na zona.", " chaves publicadas na zona.") : "A zona n"+U(227)+"o publica chaves DNSKEY.", false); var one = A.keys.length === 1; for (var k = 0; k !== A.keys.length; k++) { var K = A.keys[k]; var role = K.rev ? "revogada" : (K.sep ? (one ? "chave "+U(250)+"nica (CSK), assina chaves e registros" : "KSK, assina o conjunto de chaves") : "ZSK, assina os registros da zona"); add(t2, "div", "Tag " + K.tag + DOT + role + DOT + algFull(K.alg), "font-size:13.5px;color:#0F172A;margin-top:5px;overflow-wrap:anywhere;"); } var sg = []; if (R.soaSig) { sg.push(["SOA", R.soaSig]); } if (R.keySig) { sg.push(["DNSKEY", R.keySig]); } var nowS = Date.now() / 1000; var t3 = line(det, sg.length ? (lt(sg[0][1].exp, nowS) ? "err" : "ok") : "off", "Assinaturas (RRSIG)", sg.length ? "" : "Nenhuma assinatura encontrada.", false); for (var g = 0; g !== sg.length; g++) { var S = sg[g][1]; var left = S.exp - nowS; add(t3, "div", "Registro " + sg[g][0] + ": " + (lt(left, 0) ? "venceu em " + fmtDate(S.exp) : "v"+U(225)+"lida at"+U(233)+" " + fmtDate(S.exp) + " (faltam " + dur(left) + ")"), "font-size:13.5px;color:" + (lt(left, 0) ? COL.err[0] : "#0F172A") + ";margin-top:3px;"); } if (R.n3) { line(det, gt(R.n3.it, 0) ? "warn" : "ok", "Prova de inexist"+U(234)+"ncia", "NSEC3" + DOT + R.n3.it + plural(R.n3.it, " itera"+U(231)+U(227)+"o", " itera"+U(231)+U(245)+"es") + DOT + (R.n3.salt === "-" ? "sem salt" : "com salt"), false); } var t5 = line(det, R.v === "bogus" ? "err" : (R.v === "secure" ? "ok" : "off"), "Resolvedores que validam", "", false); for (var v = 0; v !== 2; v++) { var X = R.vals[v]; var txt = X.st === -1 ? "n"+U(227)+"o respondeu" : (X.st === 2 ? "recusou a resposta (SERVFAIL)" : (X.ad ? "validou as assinaturas" : (R.v === "unconf" ? "respondeu, mas n"+U(227)+"o confirmou as assinaturas" : "respondeu sem validar, porque o dom"+U(237)+"nio n"+U(227)+"o tem DNSSEC completo"))); var why = X.st === 2 ? ede(X.cm) : ""; add(t5, "div", RES[v].name + " (" + RES[v].ip + "): " + txt + (why ? ". Motivo informado: " + why : "") + ".", "font-size:13.5px;color:#0F172A;margin-top:3px;"); } var nb = add(out, "div", ""); nb.id = PFX + "notes"; notes(nb, R.N); var ns = nextStep(R); if (ns) { var nx = add(out, "div", "", "margin-top:14px;border:1px solid #c9d2dd;border-left:6px solid " + NAVY + ";border-radius:10px;padding:11px 14px;background:#ffffff;"); nx.id = PFX + "next"; add(nx, "div", "O que fazer", "font-weight:800;font-size:15px;color:" + NAVY + ";margin-bottom:3px;"); add(nx, "div", ns, "font-size:14px;line-height:1.55;color:#0F172A;"); } } async function run() { if (busy) { return; } var c = clean(el("in").value); var st = el("st"); var out = el("out"); if (c.err) { out.textContent = ""; st.textContent = c.err; st.style.color = COL.err[0]; return; } busy = true; el("go").disabled = true; el("go").textContent = "Verificando" + ELL; st.style.color = "#475569"; st.textContent = "Consultando a cadeia de confian"+U(231)+"a de " + c.show + ELL; out.textContent = ""; var R; try { R = await analyze(c.name); } catch (e) { R = {v: "fail"}; } st.textContent = ""; render(c, R); busy = false; el("go").disabled = false; el("go").textContent = "Verificar"; } add(root0, "div", "Verificador de DNSSEC", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Digite um dom"+U(237)+"nio para ver se o DNSSEC est"+U(225)+" ativo, se a cadeia de confian"+U(231)+"a est"+U(225)+" completa da raiz at"+U(233)+" ele e se o registro DS confere com as chaves publicadas.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); var lab = add(root0, "label", "Dom"+U(237)+"nio", "display:block;font-weight:700;font-size:14px;color:" + NAVY + ";margin-bottom:4px;"); lab.setAttribute("for", PFX + "in"); var frow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;"); var inp = add(frow, "input", "", "flex:1 1 220px;min-width:0;box-sizing:border-box;padding:9px 11px;border:1px solid #9aa7b8;border-radius:8px;font-size:15px;background:#ffffff;color:#0F172A;margin:0;"); inp.id = PFX + "in"; inp.type = "text"; inp.setAttribute("placeholder", "seudominio.com.br"); inp.setAttribute("autocomplete", "off"); inp.setAttribute("spellcheck", "false"); inp.setAttribute("autocapitalize", "off"); inp.setAttribute("inputmode", "url"); var go = add(frow, "button", "Verificar", "padding:9px 18px;border:1px solid " + NAVY + ";background:" + NAVY + ";color:#ffffff;border-radius:8px;cursor:pointer;font-size:14.5px;font-weight:700;margin:0;"); go.id = PFX + "go"; go.type = "button"; var exl = add(root0, "div", "", "margin-top:8px;font-size:13px;color:#334155;line-height:1.9;"); exl.appendChild(document.createTextNode("Exemplos: ")); var EXS = ["registro.br", "google.com", "dnssec-failed.org"]; for (var x0 = 0; x0 !== EXS.length; x0++) { var eb = add(exl, "button", EXS[x0], "margin:2px;padding:3px 8px;border:1px solid " + NAVY + ";background:#ffffff;color:" + NAVY + ";border-radius:6px;cursor:pointer;font-size:12.5px;"); eb.type = "button"; eb.setAttribute("data-d", EXS[x0]); eb.addEventListener("click", function () { inp.value = this.getAttribute("data-d"); run(); }); } var st0 = add(root0, "div", "", "margin-top:10px;font-size:13.5px;color:#475569;min-height:18px;"); st0.id = PFX + "st"; st0.setAttribute("aria-live", "polite"); var out0 = add(root0, "div", ""); out0.id = PFX + "out"; out0.setAttribute("aria-live", "polite"); add(root0, "p", "A consulta usa o DNS p"+U(250)+"blico do Google (8.8.8.8) e da Cloudflare (1.1.1.1), que validam DNSSEC. A ferramenta tamb"+U(233)+"m confere, no seu navegador, se o DS bate com as chaves publicadas e at"+U(233)+" quando as assinaturas valem.", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); go.addEventListener("click", run); inp.addEventListener("keydown", function (e) { if (e.key === "Enter") { run(); } }); })();</script>



<h2 class="wp-block-heading">O que é DNSSEC</h2>



<p class="wp-block-paragraph">Quando alguém digita o endereço do seu site, um resolvedor de DNS, como o do provedor de internet ou o <a href="https://www.homehost.com.br/blog/internet/dns-do-google/" data-wpel-link="internal" target="_self">DNS do Google</a>, descobre o IP do servidor e guarda a resposta em cache. O DNS original não tem como provar de onde veio essa resposta. Um atacante que consiga colocar uma resposta falsa no cache, no ataque chamado envenenamento de cache, manda os visitantes para um site falso ou desvia os e-mails do domínio.</p>



<p class="wp-block-paragraph">O DNSSEC (Domain Name System Security Extensions) resolve isso com assinaturas digitais. Quem responde pelo domínio assina os registros com uma chave privada e publica a chave pública no próprio DNS. O resolvedor confere a assinatura antes de usar a resposta e, se ela não bate, descarta a resposta.</p>



<p class="wp-block-paragraph">O DNSSEC garante duas coisas: que a resposta veio de quem responde pelo domínio e que ela não foi alterada no caminho. Ele não faz o resto:</p>



<ul class="wp-block-list">
<li><strong>Não criptografa as consultas.</strong> Quem está no caminho ainda vê quais domínios você consulta. Isso é papel do DNS sobre HTTPS (DoH) e do DNS sobre TLS (DoT).</li>



<li><strong>Não substitui o certificado SSL.</strong> O DNSSEC protege o endereço, e o <a href="https://www.homehost.com.br/blog/ssl/certificado-ssl/" data-wpel-link="internal" target="_self">certificado SSL</a> protege a conexão com o site. Os dois se complementam.</li>



<li><strong>Não protege a conta do domínio.</strong> Quem invade a sua conta no Registro.br consegue trocar os servidores DNS e o DS. Para isso, o que vale é senha forte e autenticação em dois fatores.</li>
</ul>



<h2 class="wp-block-heading">Como funciona a cadeia de confiança</h2>



<p class="wp-block-paragraph">O DNSSEC usa quatro tipos de registro:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Registro</th><th>Onde fica</th><th>Para que serve</th></tr></thead><tbody><tr><td>DNSKEY</td><td>Na zona do domínio</td><td>Publica as chaves públicas da zona</td></tr><tr><td>RRSIG</td><td>Na zona do domínio</td><td>Guarda a assinatura de cada conjunto de registros</td></tr><tr><td>DS</td><td>Na zona de cima, como a com.br</td><td>Aponta para a chave do domínio e liga um elo da cadeia ao outro</td></tr><tr><td>NSEC ou NSEC3</td><td>Na zona do domínio</td><td>Prova, com assinatura, que um nome não existe</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A validação começa pela raiz da internet, cuja chave já vem configurada nos resolvedores. A raiz assina o DS do .br, o .br assina o DS do com.br, e o com.br assina o DS do seu domínio. O DS confere com a chave publicada no DNSKEY do domínio, e essa chave assina os registros. Se um elo falha, o resolvedor recusa a resposta inteira.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/cadeia-de-confianca-dnssec-777x1024.png" alt="Infográfico da cadeia de confiança do DNSSEC, da raiz ao .br, ao com.br e ao domínio, com o registro DS ligando cada etapa e o resultado quando tudo confere ou quando um elo falha" class="wp-image-18627" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/cadeia-de-confianca-dnssec-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/cadeia-de-confianca-dnssec-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/cadeia-de-confianca-dnssec-768x1013.png 768w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/cadeia-de-confianca-dnssec.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">Muitas zonas usam duas chaves: a KSK, que assina só o conjunto de chaves e é para onde o DS aponta, e a ZSK, que assina os demais registros. Outras usam uma chave única, a CSK, que faz as duas coisas.</p>



<p class="wp-block-paragraph">A raiz também troca de chave de tempos em tempos. Em 11 de outubro de 2026, ela passou a ser assinada só com a chave KSK-2024, de tag 38696, segundo a <a href="https://www.icann.org/en/blogs/details/preparing-for-the-root-zone-ksk-rollover-what-you-need-to-know-27-07-2026-en" data-wpel-link="external" target="_blank" rel="external noopener">ICANN</a>. É a chave que aparece na primeira linha da cadeia no verificador.</p>



<h2 class="wp-block-heading">O que significa cada resultado</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Resultado</th><th>O que quer dizer</th><th>O que fazer</th></tr></thead><tbody><tr><td>DNSSEC ativo e funcionando</td><td>A cadeia está completa e os resolvedores confirmaram as assinaturas</td><td>Nada. Só tome cuidado ao trocar de servidor DNS</td></tr><tr><td>DNSSEC desativado</td><td>O domínio não tem DS nem chaves</td><td>Ativar, se quiser a proteção</td></tr><tr><td>DNSSEC pela metade</td><td>A zona está assinada, mas falta o DS</td><td>Cadastrar o DS no registro do domínio</td></tr><tr><td>DNSSEC com erro</td><td>Os resolvedores recusam as respostas</td><td>Corrigir ou remover o DS com urgência</td></tr><tr><td>DNSSEC não confirmado</td><td>Há DS e chaves, mas a validação não se completa, como acontece com algoritmos SHA-1</td><td>Refazer as chaves com o algoritmo 13</td></tr><tr><td>A extensão não usa DNSSEC</td><td>A extensão do domínio não é assinada</td><td>Nada a fazer no domínio</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">O resultado com erro é o mais grave. Para o resolvedor que valida DNSSEC, como o do Google, o da Cloudflare e o de vários provedores de internet, a resposta vira um erro SERVFAIL: o site não abre e os e-mails não chegam. Quem usa um resolvedor que não valida continua acessando, e é por isso que o problema às vezes parece acontecer só para parte dos usuários.</p>



<h2 class="wp-block-heading">Como ativar o DNSSEC</h2>



<p class="wp-block-paragraph">A ativação tem sempre duas partes: assinar a zona no serviço que responde pelo DNS do domínio e cadastrar o DS no registro do domínio. O caminho depende de onde fica o DNS. Para saber quais são os servidores DNS do seu domínio, consulte o registro NS no <a href="https://www.homehost.com.br/blog/internet/nslookup/" data-wpel-link="internal" target="_self">nslookup online</a>.</p>



<h3 class="wp-block-heading">Com os servidores DNS do Registro.br</h3>



<p class="wp-block-paragraph">Não há nada a fazer. Nos servidores DNS do próprio Registro.br, o DNSSEC é obrigatório e ativado automaticamente, segundo as <a href="https://registro.br/tecnologia/dnssec/dns-e-dnssec/" data-wpel-link="external" target="_blank" rel="external noopener">perguntas sobre DNS e DNSSEC do Registro.br</a>.</p>



<h3 class="wp-block-heading">Com o DNS na hospedagem (cPanel)</h3>



<p class="wp-block-paragraph">Se o domínio usa os servidores DNS da hospedagem, a chave é criada no cPanel:</p>



<ol class="wp-block-list">
<li>No cPanel, abra o <strong>Editor de Zona</strong> e clique em <strong>DNSSEC</strong> ao lado do domínio.</li>



<li>Crie a chave. Se houver a opção de escolher o algoritmo, use o 13 (ECDSA P-256 com SHA-256).</li>



<li>Ative a chave e copie os dados do registro DS, principalmente o <strong>Key Tag</strong> e o <strong>Digest</strong> do tipo SHA-256.</li>



<li>No painel do Registro.br, abra o domínio e clique em <strong>Alterar servidores DNS</strong>, como no <a href="https://www.homehost.com.br/blog/tutoriais/como-transferir-seu-site/como-alterar-o-dns-de-um-dominio-pelo-registro-br/" data-wpel-link="internal" target="_self">tutorial de troca de DNS no Registro.br</a>. Na mesma tela, use a opção <strong>DNSSEC</strong> para informar o Keytag e o Digest. O Registro.br confere o DS antes de publicar.</li>



<li>Volte ao verificador e confira se o resultado mudou para DNSSEC ativo.</li>
</ol>



<h3 class="wp-block-heading">Com o DNS na Cloudflare</h3>



<p class="wp-block-paragraph">Na Cloudflare, o DNSSEC fica nas configurações de DNS do domínio. Ao ativar, ela assina a zona com o algoritmo 13 e mostra os dados do registro DS, conforme a <a href="https://developers.cloudflare.com/dns/dnssec/" data-wpel-link="external" target="_blank" rel="external noopener">documentação da Cloudflare</a>. Copie o Keytag e o Digest para o Registro.br, como no passo 4 acima, e confira o resultado no verificador.</p>



<h3 class="wp-block-heading">Domínios fora do .br</h3>



<p class="wp-block-paragraph">O processo é o mesmo: assinar a zona no serviço de DNS e cadastrar o DS no site onde o domínio foi registrado. Alguns registradores leem o DS sozinhos. O registro de domínios da própria Cloudflare, por exemplo, publica o DS automaticamente, o que pode levar um ou dois dias.</p>



<h2 class="wp-block-heading">Cuidados para não tirar o domínio do ar</h2>



<p class="wp-block-paragraph">O DNSSEC protege, mas também é mais uma peça que pode quebrar. Os erros mais comuns são estes:</p>



<ul class="wp-block-list">
<li><strong>Trocar de servidor DNS com o DS antigo publicado.</strong> O novo servidor não tem as chaves para onde o DS aponta, e o domínio sai do ar para quem valida. O certo é remover o DS, esperar ele sair do <a href="https://www.homehost.com.br/blog/perguntas-frequentes/o-que-e-propagacao-de-dns/" data-wpel-link="internal" target="_self">cache dos resolvedores</a>, trocar os servidores DNS e só então ativar o DNSSEC no novo serviço e cadastrar o DS novo. O verificador mostra esse tempo nos detalhes do DS: no .com.br, é de uma hora, e no .com, de um dia.</li>



<li><strong>Trocar a chave sem trocar o DS.</strong> Sempre que a chave muda, o DS precisa ser atualizado. Cadastre o DS novo antes de apagar a chave antiga.</li>



<li><strong>Deixar as assinaturas vencerem.</strong> Cada assinatura tem data de validade. Os serviços que assinam a zona automaticamente renovam sozinhos, mas uma zona assinada à mão para de funcionar quando elas vencem.</li>



<li><strong>Usar algoritmos com SHA-1.</strong> A <a href="https://www.rfc-editor.org/rfc/rfc9905.html" data-wpel-link="external" target="_blank" rel="external noopener">RFC 9905</a>, de novembro de 2025, proíbe os algoritmos 5 e 7 e o DS com resumo SHA-1 em assinaturas novas. Prefira o algoritmo 13 e o DS com SHA-256.</li>



<li><strong>Usar NSEC3 com iterações.</strong> A <a href="https://www.rfc-editor.org/rfc/rfc9276.html" data-wpel-link="external" target="_blank" rel="external noopener">RFC 9276</a> manda usar 0 iterações e recomenda não usar salt. Com valores maiores, os resolvedores podem tratar o domínio como se não tivesse DNSSEC.</li>
</ul>



<p class="wp-block-paragraph">Para desligar o DNSSEC, a ordem é a inversa: primeiro remova o DS no registro do domínio, espere ele sair do cache e só depois desative a assinatura no serviço de DNS.</p>



<h2 class="wp-block-heading">DNSSEC vale a pena?</h2>



<p class="wp-block-paragraph">Para a maioria dos domínios, sim, quando o serviço de DNS cuida da assinatura sozinho, como o Registro.br, o cPanel e a Cloudflare. No Registro.br não há custo adicional, a ativação é rápida, e a proteção vale para todos os visitantes que usam resolvedores que validam. E, entre os domínios .br que usam DNSSEC, 99,93% estão com a assinatura funcionando corretamente, segundo os mesmos dados do Registro.br.</p>



<p class="wp-block-paragraph">O cuidado é com as trocas: de servidor DNS, de chave e de hospedagem. Um erro nessas horas tira o domínio do ar para boa parte dos usuários, o que não aconteceria sem DNSSEC.</p>



<p class="wp-block-paragraph">Em algumas <a href="https://www.homehost.com.br/blog/tutoriais/outros/conheca-todas-as-categorias-do-registro-br/" data-wpel-link="internal" target="_self">categorias do Registro.br</a>, não é escolha: o DNSSEC é obrigatório nos domínios .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br.</p>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Domínio e hospedagem na Homehost</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">Registre o seu domínio na Homehost e hospede o site com cPanel, onde o DNSSEC é ativado pelo Editor de Zona.</p>
<a href="https://www.homehost.com.br/registro-de-dominio/" style="display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Registrar domínio</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>O que é DNSSEC?</strong><br>É uma extensão de segurança do DNS que assina digitalmente as respostas de um domínio. Com ela, os resolvedores conseguem confirmar que a resposta veio de quem responde pelo domínio e que não foi alterada, o que impede o envenenamento de cache.</p>



<p class="wp-block-paragraph"><strong>Como saber se o meu domínio tem DNSSEC?</strong><br>Use o verificador desta página. Ele mostra se o DNSSEC está ativo, desativado, pela metade ou com erro, e confere a cadeia de confiança da raiz até o domínio. No terminal, o comando dig com a opção +dnssec mostra as assinaturas.</p>



<p class="wp-block-paragraph"><strong>O DNSSEC é obrigatório para domínios .br?</strong><br>Só nas categorias .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br. Nos demais domínios .br, é opcional e sem custo adicional. Quem usa os servidores DNS do Registro.br já tem o DNSSEC ativado automaticamente.</p>



<p class="wp-block-paragraph"><strong>O DNSSEC substitui o certificado SSL?</strong><br>Não. O DNSSEC garante que o endereço do domínio é verdadeiro, e o certificado SSL protege a conexão entre o visitante e o site. Os dois se complementam, e nenhum deles criptografa as consultas de DNS.</p>



<p class="wp-block-paragraph"><strong>O que acontece se o DNSSEC der erro?</strong><br>Os resolvedores que validam DNSSEC, como os do Google e da Cloudflare, recusam as respostas do domínio, e o site e os e-mails param de funcionar para quem usa esses resolvedores. A correção é atualizar o DS no registro do domínio ou, em último caso, removê-lo.</p>



<p class="wp-block-paragraph"><strong>Preciso desativar o DNSSEC para trocar de hospedagem?</strong><br>Só se a troca incluir os servidores DNS do domínio. Nesse caso, remova o DS no registro do domínio, espere ele sair do cache, troque os servidores DNS e ative o DNSSEC de novo no novo serviço. Se os servidores DNS continuarem os mesmos, nada muda.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "O que é DNSSEC?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É uma extensão de segurança do DNS que assina digitalmente as respostas de um domínio. Com ela, os resolvedores conseguem confirmar que a resposta veio de quem responde pelo domínio e que não foi alterada, o que impede o envenenamento de cache."
      }
    },
    {
      "@type": "Question",
      "name": "Como saber se o meu domínio tem DNSSEC?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Use o verificador desta página. Ele mostra se o DNSSEC está ativo, desativado, pela metade ou com erro, e confere a cadeia de confiança da raiz até o domínio. No terminal, o comando dig com a opção +dnssec mostra as assinaturas."
      }
    },
    {
      "@type": "Question",
      "name": "O DNSSEC é obrigatório para domínios .br?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Só nas categorias .b.br, .bet.br, .def.br, .jus.br, .leg.br, .mp.br e .tc.br. Nos demais domínios .br, é opcional e sem custo adicional. Quem usa os servidores DNS do Registro.br já tem o DNSSEC ativado automaticamente."
      }
    },
    {
      "@type": "Question",
      "name": "O DNSSEC substitui o certificado SSL?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não. O DNSSEC garante que o endereço do domínio é verdadeiro, e o certificado SSL protege a conexão entre o visitante e o site. Os dois se complementam, e nenhum deles criptografa as consultas de DNS."
      }
    },
    {
      "@type": "Question",
      "name": "O que acontece se o DNSSEC der erro?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Os resolvedores que validam DNSSEC, como os do Google e da Cloudflare, recusam as respostas do domínio, e o site e os e-mails param de funcionar para quem usa esses resolvedores. A correção é atualizar o DS no registro do domínio ou, em último caso, removê-lo."
      }
    },
    {
      "@type": "Question",
      "name": "Preciso desativar o DNSSEC para trocar de hospedagem?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Só se a troca incluir os servidores DNS do domínio. Nesse caso, remova o DS no registro do domínio, espere ele sair do cache, troque os servidores DNS e ative o DNSSEC de novo no novo serviço. Se os servidores DNS continuarem os mesmos, nada muda."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">O DNSSEC fecha uma brecha antiga do DNS: a falta de um jeito de provar de onde vem uma resposta. Com a assinatura, os resolvedores descartam respostas falsas, e o domínio fica protegido contra o envenenamento de cache. Ative pelo serviço que cuida do seu DNS, cadastre o DS no registro do domínio e use o verificador sempre que mexer em servidores DNS ou em chaves.</p>



<p class="wp-block-paragraph"></p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/dnssec/" data-wpel-link="internal" target="_self">DNSSEC: o que é, como ativar e verificador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18625</post-id>	</item>
		<item>
		<title>Robots.txt: o que é, como criar e gerador grátis</title>
		<link>https://www.homehost.com.br/blog/seo/robots-txt/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Thu, 05 Nov 2026 21:53:56 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18613</guid>

					<description><![CDATA[<p>O robots.txt é um arquivo de texto na raiz do site que diz aos robôs dos buscadores e das empresas de IA o que eles podem rastrear. Com o gerador abaixo, você monta o arquivo para WordPress, WooCommerce ou site em HTML, decide o que fazer com os robôs de IA e testa qualquer endereço [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/seo/robots-txt/" data-wpel-link="internal" target="_self">Robots.txt: o que é, como criar e gerador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>O robots.txt é um arquivo de texto na raiz do site que diz aos robôs dos buscadores e das empresas de IA o que eles podem rastrear. Com o gerador abaixo, você monta o arquivo para WordPress, WooCommerce ou site em HTML, decide o que fazer com os robôs de IA e testa qualquer endereço antes de publicar.</strong></p>



<p class="wp-block-paragraph">Um aviso antes, porque é o erro mais comum: o robots.txt controla o rastreamento, não o que aparece no Google. Para tirar uma página da busca, o caminho é outro, explicado mais abaixo.</p>



<h2 class="wp-block-heading">Gere e teste o seu robots.txt</h2>



<p class="wp-block-paragraph">Escolha a plataforma, informe o endereço do site para a linha do sitemap e decida o que fazer com os robôs de IA. Na parte de baixo, teste um endereço ou cole o robots.txt atual do seu site para conferir se ele tem algum erro.</p>



<div class="hh-rob" id="hh-rob" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-rob"); if (!root0) { return; } var S2 = "/" + "/"; var PFX = "hh-rob-"; function U(n) { return String.fromCharCode(n); } var NL = U(10); var NAVY = "#0b3d91"; var MONO = "font-family:Consolas,Menlo,monospace;"; var COL = {ok: ["#15803d", "#e8f5ec", U(10004)], warn: ["#b45309", "#fff4e5", U(9888)], err: ["#b42318", "#fdecec", U(10006)], info: ["#1d4ed8", "#eef3ff", U(8505)]}; var RANK = {err: 0, warn: 1, ok: 2, info: 3}; var INP = "width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid #9aa7b8;border-radius:8px;font-size:15px;background:#ffffff;color:#0F172A;margin:0;font-family:Arial,Helvetica,sans-serif;"; var NAO = "N" + U(227) + "o"; var BOTS = [ ["GPTBot", "OpenAI", "Treinamento dos modelos de IA", "train"], ["ClaudeBot", "Anthropic", "Treinamento dos modelos de IA", "train"], ["Google-Extended", "Google", "Uso do conte" + U(250) + "do no Gemini. " + NAO + " afeta a busca do Google", "train"], ["Applebot-Extended", "Apple", "Treinamento dos modelos da Apple. " + NAO + " afeta a busca", "train"], ["Meta-ExternalAgent", "Meta", "Treinamento de IA e indexa" + U(231) + U(227) + "o", "train"], ["CCBot", "Common Crawl", "Arquivo p" + U(250) + "blico da web, reaproveitado por terceiros", "train"], ["OAI-SearchBot", "OpenAI", "Busca do ChatGPT", "search"], ["Claude-SearchBot", "Anthropic", "Busca do Claude", "search"], ["PerplexityBot", "Perplexity", "Busca do Perplexity", "search"], ["Meta-WebIndexer", "Meta", "Busca da Meta AI", "search"], ["ChatGPT-User", "OpenAI", "Visitas pedidas por usu" + U(225) + "rios do ChatGPT. Pode ignorar o robots.txt", "user"], ["Claude-User", "Anthropic", "Visitas pedidas por usu" + U(225) + "rios do Claude", "user"], ["Perplexity-User", "Perplexity", "Visitas pedidas por usu" + U(225) + "rios. Costuma ignorar o robots.txt", "user"], ["Meta-ExternalFetcher", "Meta", "Visitas pedidas por usu" + U(225) + "rios. Pode ignorar o robots.txt", "user"] ]; var TEST_BOTS = ["Googlebot", "Bingbot", "GPTBot", "OAI-SearchBot", "ChatGPT-User", "ClaudeBot", "Claude-SearchBot", "Google-Extended", "PerplexityBot", "Applebot", "Applebot-Extended", "CCBot", "Meta-ExternalAgent"]; var SITEMAPS = { wp: [["wp", "Do pr" + U(243) + "prio WordPress (wp-sitemap.xml)"], ["yoast", "Yoast SEO (sitemap_index.xml)"], ["rank", "Rank Math (sitemap_index.xml)"], ["aio", "All in One SEO (sitemap.xml)"], ["custom", "Outro endere" + U(231) + "o"], ["none", "Sem sitemap"]], html: [["root", "sitemap.xml na raiz do site"], ["custom", "Outro endere" + U(231) + "o"], ["none", "Sem sitemap"]] }; var SMPATH = {wp: "/wp-sitemap.xml", yoast: "/sitemap_index.xml", rank: "/sitemap_index.xml", aio: "/sitemap.xml", root: "/sitemap.xml"}; var st = {dirty: false, gen: ""}; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function val(id) { var e = el(id); return e ? String(or(e.value, "")).trim() : ""; } function lines(s) { var r = []; var p = String(or(s, "")).split(NL); for (var i = 0; i !== p.length; i++) { var t = p[i].trim(); if (t) { r.push(t); } } return r; } function origin(s) { s = String(s).trim(); if (!s) { return ""; } if (s.indexOf("http:" + S2) !== 0 ? s.indexOf("https:" + S2) !== 0 : false) { s = "https:" + S2 + s; } var a = s.indexOf(S2) + 2; var host = s.slice(a).split("/")[0].split("?")[0].split("#")[0]; if (!has(host, ".") ? true : has(host, " ")) { return ""; } return s.slice(0, a) + host.toLowerCase(); } function toPath(s) { s = String(s).trim(); if (!s) { return "/"; } if (s.indexOf("http:" + S2) === 0 ? true : s.indexOf("https:" + S2) === 0) { var a = s.indexOf(S2) + 2; var rest = s.slice(a); var k = rest.indexOf("/"); s = k === -1 ? "/" : rest.slice(k); } s = s.split("#")[0]; if (s.charAt(0) !== "/") { s = "/" + s; } return s; } function notes(box, arr) { box.textContent = ""; arr = arr.slice().sort(function (a, b) { return RANK[a[0]] - RANK[b[0]]; }); for (var i = 0; i !== arr.length; i++) { var c = COL[arr[i][0]]; var d = add(box, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:7px 10px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(arr[i][1])); } } function blockedBots() { var mode = ""; var R = document.getElementsByName(PFX + "ai"); for (var i = 0; i !== R.length; i++) { if (R[i].checked) { mode = R[i].value; } } var out = []; for (var j = 0; j !== BOTS.length; j++) { var b = BOTS[j]; var on = mode === "train" ? b[3] === "train" : (mode === "all" ? true : (mode === "pick" ? el("b-" + j).checked : false)); if (on) { out.push(b[0]); } } return {mode: mode, list: out}; } function generate() { var N = []; var plat = val("plat"); var wp = plat !== "html"; var L = []; var whole = el("whole").checked; var ai = blockedBots(); L.push("User-agent: *"); if (whole) { L.push("Disallow: /"); N.push(["warn", "Com essa op" + U(231) + U(227) + "o, nenhum buscador rastreia o site. Use s" + U(243) + " enquanto o site est" + U(225) + " em constru" + U(231) + U(227) + "o e lembre de tirar depois."]); } else { var dis = 0; if (wp) { L.push("Disallow: /wp-admin/"); L.push("Allow: /wp-admin/admin-ajax.php"); dis++; } if (wp ? el("search").checked : false) { L.push("Disallow: /?s="); L.push("Disallow: /search/"); dis++; } if (plat === "woo" ? el("cart").checked : false) { L.push("Disallow: /" + "*add-to-cart="); dis++; } var ex = lines(val("extra")); for (var i = 0; i !== ex.length; i++) { var p = ex[i]; if (p.indexOf("http:" + S2) === 0 ? true : p.indexOf("https:" + S2) === 0) { p = toPath(p); } if (p.charAt(0) !== "/" ? p.charAt(0) !== "*" : false) { p = "/" + p; } if (has(p, " ")) { N.push(["warn", "Endere" + U(231) + "os n" + U(227) + "o podem ter espa" + U(231) + "os e ficaram de fora: " + ex[i]]); continue; } L.push("Disallow: " + p); dis++; } if (dis === 0) { L.push("Allow: /"); } if (ai.list.length) { L.push(""); L.push("# Rob" + U(244) + "s de IA bloqueados"); for (var k = 0; k !== ai.list.length; k++) { L.push("User-agent: " + ai.list[k]); } L.push("Disallow: /"); } } var sm = val("sm"); var sUrl = ""; if (sm === "custom") { var cu = val("smurl"); if (cu ? (cu.indexOf("http:" + S2) === 0 ? true : cu.indexOf("https:" + S2) === 0) : false) { sUrl = cu; } else if (cu) { N.push(["warn", "O endere" + U(231) + "o do sitemap precisa ser completo, come" + U(231) + "ando com https:" + S2 + "."]); } else { N.push(["warn", "Informe o endere" + U(231) + "o completo do sitemap."]); } } else if (sm !== "none") { var o = origin(val("site")); if (o) { sUrl = o + SMPATH[sm]; } else { N.push(["warn", "Informe o endere" + U(231) + "o do site para montar a linha do sitemap."]); } } else { N.push(["info", "Sem a linha do sitemap, os buscadores precisam achar o sitemap de outro jeito, como pelo Search Console."]); } if (sUrl) { L.push(""); L.push("Sitemap: " + sUrl); } if (plat === "woo") { N.push(["info", "O WooCommerce j" + U(225) + " marca as p" + U(225) + "ginas de carrinho, finalizar compra e minha conta como noindex. N" + U(227) + "o precisa bloque" + U(225) + "-las aqui."]); } if (ai.mode === "train") { N.push(["info", "Bloquear o Google-Extended n" + U(227) + "o tira o site da busca do Google, e bloquear o Applebot-Extended n" + U(227) + "o tira o site da busca da Apple. Os dois s" + U(243) + " controlam o uso do conte" + U(250) + "do pela IA."]); } if (ai.mode === "all") { N.push(["warn", "Bloquear os rob" + U(244) + "s de busca com IA tira o site das respostas do ChatGPT, do Claude, do Perplexity e da Meta AI. E alguns rob" + U(244) + "s que visitam a pedido do usu" + U(225) + "rio podem ignorar o robots.txt."]); } if (ai.mode === "pick" ? ai.list.length === 0 : false) { N.push(["info", "Marque os rob" + U(244) + "s de IA que quer bloquear."]); } N.push(["info", "Depois de publicar, as mudan" + U(231) + "as podem levar at" + U(233) + " 24 horas para valer, porque os rob" + U(244) + "s guardam o arquivo em cache."]); return {txt: L.join(NL) + NL, N: N}; } function parse(txt) { var t = String(txt); var I = []; if (t.charCodeAt(0) === 65279) { t = t.slice(1); I.push(["info", "O arquivo come" + U(231) + "a com um caractere invis" + U(237) + "vel (BOM). O Google ignora, mas o ideal " + U(233) + " salvar em UTF-8 sem BOM."]); } var size = window.TextEncoder ? new TextEncoder().encode(t).length : t.length; if (gt(size, 512000)) { I.push(["warn", "O arquivo passa de 500 KiB. O Google ignora tudo o que vem depois desse limite."]); } var raw = t.split(NL); var groups = []; var cur = null; var lastWasAgent = false; var sitemaps = []; var known = {"user-agent": 1, "allow": 1, "disallow": 1, "sitemap": 1}; for (var i = 0; i !== raw.length; i++) { var line = raw[i]; var hash = line.indexOf("#"); if (hash !== -1) { line = line.slice(0, hash); } line = line.trim(); if (!line) { continue; } var c = line.indexOf(":"); if (c === -1) { I.push(["warn", "Linha " + (i + 1) + " n" + U(227) + "o tem dois-pontos e foi ignorada: " + line]); continue; } var key = line.slice(0, c).trim().toLowerCase(); var v = line.slice(c + 1).trim(); if (key === "user-agent") { if (lastWasAgent ? cur : false) { cur.agents.push(v); } else { cur = {agents: [v], rules: [], line: i + 1}; groups.push(cur); } lastWasAgent = true; continue; } lastWasAgent = false; if (key === "sitemap") { sitemaps.push(v); if (v.indexOf("http:" + S2) !== 0 ? v.indexOf("https:" + S2) !== 0 : false) { I.push(["warn", "Linha " + (i + 1) + ": o sitemap precisa de um endere" + U(231) + "o completo, come" + U(231) + "ando com https:" + S2 + "."]); } continue; } if (key === "allow" ? true : key === "disallow") { if (!cur) { I.push(["warn", "Linha " + (i + 1) + ": a regra vem antes de qualquer User-agent e " + U(233) + " ignorada."]); continue; } if (v ? (v.charAt(0) !== "/" ? v.charAt(0) !== "*" : false) : false) { I.push(["warn", "Linha " + (i + 1) + ": o caminho precisa come" + U(231) + "ar com / ou *. Assim como est" + U(225) + ", o Google ignora a regra: " + v]); continue; } cur.rules.push({type: key, path: v, line: i + 1}); if (key === "disallow" ? (v === "/wp-content/" ? true : (v === "/wp-includes/" ? true : v === "/wp-content/plugins/")) : false) { I.push(["warn", "Linha " + (i + 1) + ": bloquear " + v + " pode esconder do Google o CSS e o JavaScript do site, e ele precisa deles para entender as p" + U(225) + "ginas."]); } continue; } if (key === "crawl-delay") { I.push(["info", "Linha " + (i + 1) + ": o Google ignora o Crawl-delay. Outros rob" + U(244) + "s, como o ClaudeBot e o CCBot, respeitam."]); continue; } if (key === "noindex") { I.push(["warn", "Linha " + (i + 1) + ": o Google n" + U(227) + "o aceita noindex no robots.txt. Use a meta tag robots na pr" + U(243) + "pria p" + U(225) + "gina."]); continue; } if (!known[key]) { I.push(["info", "Linha " + (i + 1) + ": o Google n" + U(227) + "o reconhece o campo " + line.slice(0, c).trim() + " e o ignora."]); } } for (var g = 0; g !== groups.length; g++) { var gr = groups[g]; var star = false; for (var a = 0; a !== gr.agents.length; a++) { if (gr.agents[a] === "*") { star = true; } } if (star) { for (var r = 0; r !== gr.rules.length; r++) { if (gr.rules[r].type === "disallow" ? gr.rules[r].path === "/" : false) { I.push(["warn", "Linha " + gr.rules[r].line + ": Disallow: / no grupo User-agent: * bloqueia o site inteiro para todos os buscadores."]); } } } } if (!groups.length) { I.push(["info", "N" + U(227) + "o h" + U(225) + " nenhum grupo User-agent: o arquivo n" + U(227) + "o bloqueia nada."]); } if (!sitemaps.length) { I.push(["info", "O arquivo n" + U(227) + "o tem a linha Sitemap."]); } return {groups: groups, sitemaps: sitemaps, I: I}; } function wild(path, pat) { var anch = pat.charAt(pat.length - 1) === "$"; if (anch) { pat = pat.slice(0, -1); } var parts = pat.split("*"); if (path.indexOf(parts[0]) !== 0) { return false; } var pos = parts[0].length; for (var i = 1; i !== parts.length; i++) { if (i === parts.length - 1 ? anch : false) { var last = parts[i]; return ge(path.length - last.length, pos) ? path.slice(path.length - last.length) === last : false; } var f = path.indexOf(parts[i], pos); if (f === -1) { return false; } pos = f + parts[i].length; } return anch ? pos === path.length : true; } function decide(P, bot, path) { var b = bot.toLowerCase(); var rules = []; var agent = ""; for (var g = 0; g !== P.groups.length; g++) { for (var a = 0; a !== P.groups[g].agents.length; a++) { if (P.groups[g].agents[a].toLowerCase() === b) { rules = rules.concat(P.groups[g].rules); agent = P.groups[g].agents[a]; } } } if (!agent) { for (var h = 0; h !== P.groups.length; h++) { for (var c = 0; c !== P.groups[h].agents.length; c++) { if (P.groups[h].agents[c] === "*") { rules = rules.concat(P.groups[h].rules); agent = "*"; } } } } var best = null; for (var i = 0; i !== rules.length; i++) { var r = rules[i]; if (!r.path) { continue; } if (!wild(path, r.path)) { continue; } var len = r.path.length; if (!best ? true : (gt(len, best.path.length) ? true : (len === best.path.length ? r.type === "allow" : false))) { best = r; } } return {agent: agent, rule: best, allowed: best ? best.type === "allow" : true}; } function test() { var txt = el("t-txt").value; var P = parse(txt); var bot = val("t-bot") === "other" ? or(val("t-other"), "*") : val("t-bot"); var path = toPath(val("t-url")); var d = decide(P, bot, path); var box = el("t-res"); box.textContent = ""; var ok = d.allowed; var c = ok ? COL.ok : COL.err; var card = add(box, "div", "", "background:" + c[1] + ";border:1px solid " + c[0] + ";border-radius:10px;padding:12px 14px;margin-top:12px;"); add(card, "div", c[2] + " " + (ok ? "Permitido" : "Bloqueado"), "font-weight:800;font-size:17px;color:" + c[0] + ";"); var line1 = add(card, "div", "", "font-size:14px;color:#0F172A;margin-top:4px;line-height:1.5;overflow-wrap:anywhere;"); line1.appendChild(document.createTextNode("O " + bot + (ok ? " pode acessar " : " n" + U(227) + "o pode acessar "))); add(line1, "span", path, MONO + "font-weight:700;"); line1.appendChild(document.createTextNode(".")); var why = d.rule ? "Regra que decidiu: " + (d.rule.type === "allow" ? "Allow" : "Disallow") + ": " + d.rule.path + " (linha " + d.rule.line + "), no grupo User-agent: " + d.agent + "." : (d.agent ? "Nenhuma regra do grupo User-agent: " + d.agent + " se aplica a esse endere" + U(231) + "o, ent" + U(227) + "o o acesso fica liberado." : "Nenhum grupo vale para esse rob" + U(244) + ", ent" + U(227) + "o o acesso fica liberado."); add(card, "div", why, "font-size:13.5px;color:#334155;margin-top:4px;line-height:1.5;overflow-wrap:anywhere;"); var extra = []; var bl = bot.toLowerCase(); if (bl === "google-extended" ? true : bl === "applebot-extended") { extra.push(["info", "O " + bot + " n" + U(227) + "o visita o site: " + U(233) + " s" + U(243) + " um nome usado no robots.txt para controlar o uso do conte" + U(250) + "do pela IA. Quem rastreia " + U(233) + " o " + (bl === "google-extended" ? "Googlebot" : "Applebot") + "."]); } if (bl === "chatgpt-user" ? true : (bl === "perplexity-user" ? true : bl === "meta-externalfetcher")) { extra.push(["warn", "Esse rob" + U(244) + " age a pedido de um usu" + U(225) + "rio e pode ignorar o robots.txt."]); } notes(el("t-notes"), P.I.concat(extra)); } function update() { var r = generate(); st.gen = r.txt; el("out").textContent = r.txt; notes(el("notes"), r.N); if (!st.dirty) { el("t-txt").value = r.txt; } test(); } function syncPlat() { var plat = val("plat"); var key = plat === "html" ? "html" : "wp"; var s = el("sm"); var cur = s.value; s.textContent = ""; var opts = SITEMAPS[key]; var keep = false; for (var i = 0; i !== opts.length; i++) { var o = add(s, "option", opts[i][1]); o.value = opts[i][0]; if (opts[i][0] === cur) { keep = true; } } s.value = keep ? cur : opts[0][0]; el("search-w").style.display = key === "wp" ? "flex" : "none"; el("cart-w").style.display = plat === "woo" ? "flex" : "none"; syncSm(); } function syncSm() { el("smurl-w").style.display = val("sm") === "custom" ? "block" : "none"; } function syncAi() { var m = blockedBots().mode; el("pick").style.display = m === "pick" ? "block" : "none"; } function label(p, text, id) { var l = add(p, "label", text, "display:block;font-weight:700;font-size:13.5px;color:" + NAVY + ";margin-bottom:4px;"); if (id) { l.setAttribute("for", PFX + id); } return l; } function sub(p, text) { return add(p, "div", text, "font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 6px;"); } function row(p) { return add(p, "div", "", "display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;"); } function col(p, flex) { return add(p, "div", "", "flex:" + or(flex, "1 1 220px") + ";min-width:0;"); } function check(p, id, text, on, hint) { var w = add(p, "label", "", "display:flex;align-items:flex-start;gap:8px;margin-top:8px;cursor:pointer;font-size:14px;color:#0F172A;line-height:1.45;"); w.id = PFX + id + "-w"; var c = add(w, "input", "", "margin:2px 0 0;width:17px;height:17px;flex:0 0 auto;"); c.type = "checkbox"; c.id = PFX + id; c.checked = on; var tx = add(w, "span", ""); add(tx, "span", text, "font-weight:700;"); if (hint) { add(tx, "span", " " + hint, "color:#475569;"); } c.addEventListener("change", update); return c; } function btn(p, text, primary) { var b = add(p, "button", text, primary ? "padding:9px 18px;border:0;border-radius:8px;background:" + NAVY + ";color:#ffffff;font-size:14.5px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;" : "padding:6px 12px;border:1px solid " + NAVY + ";border-radius:7px;background:#ffffff;color:" + NAVY + ";font-size:13px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;"); b.type = "button"; return b; } add(root0, "div", "Gerador de robots.txt", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Escolha a plataforma, decida o que fazer com os rob" + U(244) + "s de IA e copie o arquivo pronto. Depois, teste qualquer endere" + U(231) + "o do site para ver se um rob" + U(244) + " pode acess" + U(225) + "-lo.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); var r1 = row(root0); var c1 = col(r1); label(c1, "Plataforma", "plat"); var plat = add(c1, "select", "", INP); plat.id = PFX + "plat"; var PL = [["wp", "WordPress"], ["woo", "WordPress com WooCommerce"], ["html", "Site em HTML ou outra plataforma"]]; for (var p0 = 0; p0 !== PL.length; p0++) { add(plat, "option", PL[p0][1]).value = PL[p0][0]; } var c2 = col(r1); label(c2, "Endere" + U(231) + "o do site", "site"); var site = add(c2, "input", "", INP); site.type = "url"; site.id = PFX + "site"; site.setAttribute("placeholder", "https:" + S2 + "www.seusite.com.br"); site.setAttribute("autocomplete", "off"); var r2 = row(root0); var c3 = col(r2); label(c3, "Sitemap", "sm"); var sm = add(c3, "select", "", INP); sm.id = PFX + "sm"; var c4 = col(r2); c4.id = PFX + "smurl-w"; label(c4, "Endere" + U(231) + "o do sitemap", "smurl"); var smu = add(c4, "input", "", INP); smu.type = "url"; smu.id = PFX + "smurl"; smu.setAttribute("placeholder", "https:" + S2 + "www.seusite.com.br/sitemap.xml"); smu.setAttribute("autocomplete", "off"); sub(root0, "O que bloquear para todos os rob" + U(244) + "s"); check(root0, "search", "Bloquear a busca interna do site", true, "(/?s= e /search/). Essas p" + U(225) + "ginas n" + U(227) + "o t" + U(234) + "m conte" + U(250) + "do pr" + U(243) + "prio e gastam rastreamento."); check(root0, "cart", "Bloquear os links de adicionar ao carrinho", true, "(add-to-cart=). Cada produto gera v" + U(225) + "rios desses links."); var r3 = row(root0); var c5 = col(r3, "1 1 100%"); label(c5, "Outras pastas ou p" + U(225) + "ginas (uma por linha)", "extra"); var ex = add(c5, "textarea", "", INP + "min-height:64px;resize:vertical;line-height:1.45;" + MONO + "font-size:14px;"); ex.id = PFX + "extra"; ex.setAttribute("placeholder", "/area-do-cliente/" + NL + "/" + "*.pdf$"); add(c5, "div", "Use * para qualquer sequ" + U(234) + "ncia de caracteres e $ para marcar o fim do endere" + U(231) + "o.", "font-size:12.5px;color:#475569;margin-top:3px;"); sub(root0, "Rob" + U(244) + "s de IA"); var aiw = add(root0, "div", "", "display:flex;flex-direction:column;gap:6px;"); var AIO = [["allow", "Permitir todos", "Nenhuma regra extra para IA."], ["train", "Bloquear s" + U(243) + " o treinamento de IA", "O site continua aparecendo nas buscas com IA, como a do ChatGPT."], ["all", "Bloquear treinamento e buscas com IA", "Tira o site tamb" + U(233) + "m das respostas dos assistentes."], ["pick", "Escolher um por um", ""]]; for (var a0 = 0; a0 !== AIO.length; a0++) { var lw = add(aiw, "label", "", "display:flex;align-items:flex-start;gap:8px;cursor:pointer;font-size:14px;color:#0F172A;line-height:1.45;"); var rd = add(lw, "input", "", "margin:2px 0 0;width:17px;height:17px;flex:0 0 auto;"); rd.type = "radio"; rd.name = PFX + "ai"; rd.value = AIO[a0][0]; rd.id = PFX + "ai-" + AIO[a0][0]; rd.checked = a0 === 0; rd.addEventListener("change", function () { syncAi(); update(); }); var lt0 = add(lw, "span", ""); add(lt0, "span", AIO[a0][1], "font-weight:700;"); if (AIO[a0][2]) { add(lt0, "span", " " + AIO[a0][2], "color:#475569;"); } } var pick = add(root0, "div", "", "display:none;background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:4px 12px;margin-top:8px;"); pick.id = PFX + "pick"; for (var b0 = 0; b0 !== BOTS.length; b0++) { var bw = add(pick, "label", "", "display:flex;align-items:flex-start;gap:8px;padding:7px 0;cursor:pointer;" + (b0 === 0 ? "" : "border-top:1px solid #eef1f5;")); var bc = add(bw, "input", "", "margin:2px 0 0;width:17px;height:17px;flex:0 0 auto;"); bc.type = "checkbox"; bc.id = PFX + "b-" + b0; bc.checked = BOTS[b0][3] === "train"; bc.addEventListener("change", update); var bt = add(bw, "span", "", "font-size:13.5px;line-height:1.45;color:#334155;min-width:0;"); add(bt, "span", BOTS[b0][0], "font-weight:800;color:#0F172A;" + MONO); bt.appendChild(document.createTextNode(" " + U(183) + " " + BOTS[b0][1] + " " + U(183) + " " + BOTS[b0][2])); } var wh = add(root0, "div", "", "margin-top:14px;"); check(wh, "whole", "Bloquear o site inteiro", false, "(site em constru" + U(231) + U(227) + "o). Nenhum buscador rastreia nada."); var nt = add(root0, "div", ""); nt.id = PFX + "notes"; nt.setAttribute("aria-live", "polite"); sub(root0, "Seu robots.txt"); var pre = add(root0, "pre", "", "margin:0;background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:10px 12px;font-size:13px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;color:#0F172A;" + MONO); pre.id = PFX + "out"; var bts = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;"); var cp = btn(bts, "Copiar", true); cp.id = PFX + "copy"; cp.addEventListener("click", function () { function done() { cp.textContent = "Copiado"; setTimeout(function () { cp.textContent = "Copiar"; }, 1500); } function manual() { cp.textContent = "Selecione e copie"; } if (navigator.clipboard ? navigator.clipboard.writeText : false) { navigator.clipboard.writeText(st.gen).then(done, manual); } else { manual(); } }); var dl = btn(bts, "Baixar robots.txt", false); dl.id = PFX + "dl"; dl.addEventListener("click", function () { var u = URL.createObjectURL(new Blob([st.gen], {type: "text/plain"})); var a = document.createElement("a"); a.href = u; a.download = "robots.txt"; a.style.display = "none"; document.body.appendChild(a); a.click(); setTimeout(function () { URL.revokeObjectURL(u); a.remove(); }, 4000); }); add(root0, "p", "O arquivo vai na raiz do site, no endere" + U(231) + "o seusite.com.br/robots.txt. No cPanel, " + U(233) + " a pasta public_html.", "margin:10px 0 0;font-size:13.5px;color:#334155;line-height:1.5;"); var tw = add(root0, "div", "", "margin-top:22px;padding-top:16px;border-top:1px solid #d5dce5;"); add(tw, "div", "Teste um endere" + U(231) + "o", "font-weight:800;font-size:17px;color:" + NAVY + ";margin-bottom:4px;"); add(tw, "p", "O teste usa o arquivo gerado acima. Para testar o robots.txt atual do seu site, abra seusite.com.br/robots.txt, copie o conte" + U(250) + "do e cole aqui.", "margin:0 0 8px;font-size:14px;line-height:1.5;color:#334155;"); var tt = add(tw, "textarea", "", INP + "min-height:150px;resize:vertical;line-height:1.5;font-size:13.5px;" + MONO); tt.id = PFX + "t-txt"; tt.setAttribute("aria-label", "Conte" + U(250) + "do do robots.txt para testar"); tt.setAttribute("spellcheck", "false"); tt.addEventListener("input", function () { st.dirty = true; el("t-reset").style.display = "inline-block"; test(); }); var rs = btn(add(tw, "div", "", "margin-top:6px;"), "Voltar ao arquivo gerado", false); rs.id = PFX + "t-reset"; rs.style.display = "none"; rs.addEventListener("click", function () { st.dirty = false; rs.style.display = "none"; el("t-txt").value = st.gen; test(); }); var r4 = row(tw); var c6 = col(r4, "2 1 260px"); label(c6, "Endere" + U(231) + "o ou caminho", "t-url"); var tu = add(c6, "input", "", INP + MONO); tu.type = "text"; tu.id = PFX + "t-url"; tu.value = "/wp-admin/"; tu.setAttribute("autocomplete", "off"); tu.setAttribute("spellcheck", "false"); tu.addEventListener("input", test); var c7 = col(r4, "1 1 200px"); label(c7, "Rob" + U(244), "t-bot"); var tb = add(c7, "select", "", INP); tb.id = PFX + "t-bot"; for (var t0 = 0; t0 !== TEST_BOTS.length; t0++) { add(tb, "option", TEST_BOTS[t0]).value = TEST_BOTS[t0]; } add(tb, "option", "Outro rob" + U(244) + U(8230)).value = "other"; var c8 = col(r4, "1 1 180px"); c8.id = PFX + "t-other-w"; c8.style.display = "none"; label(c8, "Nome do rob" + U(244), "t-other"); var to = add(c8, "input", "", INP + MONO); to.type = "text"; to.id = PFX + "t-other"; to.setAttribute("placeholder", "Bytespider"); to.setAttribute("autocomplete", "off"); to.addEventListener("input", test); tb.addEventListener("change", function () { c8.style.display = tb.value === "other" ? "block" : "none"; test(); }); var tr = add(tw, "div", ""); tr.id = PFX + "t-res"; tr.setAttribute("aria-live", "polite"); var tn = add(tw, "div", ""); tn.id = PFX + "t-notes"; add(root0, "p", "Tudo acontece no seu navegador. O teste segue as regras de prioridade do Google: vale a regra mais espec" + U(237) + "fica e, no empate, a que libera.", "margin:16px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); plat.addEventListener("change", function () { syncPlat(); update(); }); site.addEventListener("input", update); sm.addEventListener("change", function () { syncSm(); update(); }); smu.addEventListener("input", update); ex.addEventListener("input", update); syncPlat(); syncAi(); update(); })();</script>



<h2 class="wp-block-heading">O que é o robots.txt</h2>



<p class="wp-block-paragraph">O robots.txt fica sempre no mesmo lugar: na raiz do site, em <code>seusite.com.br/robots.txt</code>. Antes de rastrear as páginas, os robôs dos buscadores leem esse arquivo para saber o que podem visitar. O Google o usa principalmente para controlar o tráfego de robôs, para não sobrecarregar o servidor e para não gastar rastreamento com páginas sem importância.</p>



<p class="wp-block-paragraph">Cada endereço tem o seu arquivo. Um subdomínio, como loja.seusite.com.br, precisa de um robots.txt próprio, e o mesmo vale para versões com outro protocolo ou porta.</p>



<p class="wp-block-paragraph">Os robôs dos grandes buscadores e das grandes empresas de IA seguem o arquivo, mas ele é só um pedido: robôs mal-intencionados simplesmente ignoram. Por isso, o robots.txt não serve para proteger nada.</p>



<p class="wp-block-paragraph">Ele também não deve ser confundido com dois arquivos parecidos. O sitemap.xml lista as páginas do site, e o llms.txt indica aos modelos de IA o que mais importa. A <a href="https://www.homehost.com.br/blog/seo/llms-txt/" data-wpel-link="internal" target="_self">comparação entre robots.txt, sitemap.xml e llms.txt</a> mostra a função de cada um.</p>



<h2 class="wp-block-heading">Como funcionam as regras do arquivo</h2>



<p class="wp-block-paragraph">O arquivo é formado por grupos. Cada grupo começa com uma ou mais linhas <code>User-agent</code>, que dizem a quais robôs ele vale, seguidas das regras.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Linha</th><th>O que faz</th><th>Exemplo</th></tr></thead><tbody><tr><td>User-agent</td><td>Define a qual robô as regras valem. O asterisco vale para todos</td><td><code>User-agent: Googlebot</code></td></tr><tr><td>Disallow</td><td>Bloqueia um caminho</td><td><code>Disallow: /wp-admin/</code></td></tr><tr><td>Allow</td><td>Libera um caminho dentro de outro bloqueado</td><td><code>Allow: /wp-admin/admin-ajax.php</code></td></tr><tr><td>Sitemap</td><td>Informa o endereço completo do sitemap</td><td><code>Sitemap: https://www.seusite.com.br/sitemap.xml</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Nos caminhos, o asterisco vale por qualquer sequência de caracteres, e o cifrão marca o fim do endereço. <code>Disallow: /*.pdf$</code> bloqueia todos os PDFs. Os caminhos diferenciam maiúsculas de minúsculas: <code>/Fotos/</code> e <code>/fotos/</code> são pastas diferentes para o robots.txt.</p>



<p class="wp-block-paragraph">Quando as regras se cruzam, o Google segue duas regras de prioridade, descritas na <a href="https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt" data-wpel-link="external" target="_blank" rel="external noopener">documentação do Google sobre o robots.txt</a>:</p>



<ul class="wp-block-list">
<li><strong>Cada robô segue um grupo só:</strong> o que tem o nome dele ou, se não houver, o do asterisco. Um robô com grupo próprio ignora as regras do grupo geral.</li>



<li><strong>Dentro do grupo, vale a regra mais específica,</strong> ou seja, a de caminho mais longo. Se <code>Allow</code> e <code>Disallow</code> empatam, vale a que libera.</li>
</ul>



<p class="wp-block-paragraph">É por isso que <code>Allow: /wp-admin/admin-ajax.php</code> funciona mesmo com <code>Disallow: /wp-admin/</code> logo acima: a regra que libera é mais longa.</p>



<p class="wp-block-paragraph">Alguns limites práticos: o arquivo precisa estar em UTF-8, o Google lê só os primeiros 500 KiB e guarda o arquivo em cache por até 24 horas. O Google ignora a linha <code>Crawl-delay</code>, que outros robôs, como o ClaudeBot e o CCBot, respeitam.</p>



<h2 class="wp-block-heading">Modelos prontos de robots.txt</h2>



<h3 class="wp-block-heading">WordPress</h3>



<pre class="wp-block-code"><code>User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/

Sitemap: https://www.seusite.com.br/wp-sitemap.xml</code></pre>



<p class="wp-block-paragraph">As três primeiras linhas são as que o próprio WordPress usa no robots.txt virtual que ele gera quando não existe um arquivo de verdade. As duas seguintes bloqueiam as páginas de busca interna, que não têm conteúdo próprio. O sitemap muda conforme o plugin: o Yoast e o Rank Math usam <code>sitemap_index.xml</code>, e o gerador já monta o endereço certo.</p>



<p class="wp-block-paragraph">Não bloqueie as pastas <code>/wp-content/</code> e <code>/wp-includes/</code>. Elas guardam o CSS e o JavaScript do site, e o Google precisa deles para entender as páginas.</p>



<h3 class="wp-block-heading">WooCommerce</h3>



<pre class="wp-block-code"><code>User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/
Disallow: /*add-to-cart=

Sitemap: https://www.seusite.com.br/wp-sitemap.xml</code></pre>



<p class="wp-block-paragraph">A linha a mais bloqueia os links de adicionar ao carrinho, que se multiplicam a cada produto. Não é preciso bloquear as páginas de carrinho, finalizar compra e minha conta: o WooCommerce já as marca como noindex.</p>



<h3 class="wp-block-heading">Site em HTML</h3>



<pre class="wp-block-code"><code>User-agent: *
Allow: /

Sitemap: https://www.seusite.com.br/sitemap.xml</code></pre>



<p class="wp-block-paragraph">Libera tudo e indica o sitemap. Se houver uma pasta que não deve ser rastreada, acrescente uma linha <code>Disallow</code> para ela.</p>



<h2 class="wp-block-heading">Como bloquear os robôs de IA no robots.txt</h2>



<p class="wp-block-paragraph">As empresas de IA usam robôs diferentes para coisas diferentes. Uns coletam conteúdo para treinar os modelos. Outros montam o índice da busca com IA, como a do ChatGPT. E há os que visitam uma página na hora em que um usuário pede, e esses nem sempre seguem o robots.txt.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Robô</th><th>Empresa</th><th>Para que serve</th></tr></thead><tbody><tr><td>GPTBot</td><td>OpenAI</td><td>Treinamento dos modelos</td></tr><tr><td>OAI-SearchBot</td><td>OpenAI</td><td>Busca do ChatGPT</td></tr><tr><td>ChatGPT-User</td><td>OpenAI</td><td>Visitas pedidas por usuários. Pode ignorar o robots.txt</td></tr><tr><td>ClaudeBot</td><td>Anthropic</td><td>Treinamento dos modelos</td></tr><tr><td>Claude-SearchBot</td><td>Anthropic</td><td>Busca do Claude</td></tr><tr><td>Claude-User</td><td>Anthropic</td><td>Visitas pedidas por usuários</td></tr><tr><td>Google-Extended</td><td>Google</td><td>Uso do conteúdo no Gemini</td></tr><tr><td>Applebot-Extended</td><td>Apple</td><td>Treinamento dos modelos da Apple</td></tr><tr><td>PerplexityBot</td><td>Perplexity</td><td>Busca do Perplexity</td></tr><tr><td>Perplexity-User</td><td>Perplexity</td><td>Visitas pedidas por usuários. Costuma ignorar o robots.txt</td></tr><tr><td>Meta-ExternalAgent</td><td>Meta</td><td>Treinamento de IA e indexação</td></tr><tr><td>Meta-WebIndexer</td><td>Meta</td><td>Busca da Meta AI</td></tr><tr><td>CCBot</td><td>Common Crawl</td><td>Arquivo público da web, reaproveitado por terceiros</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/robos-de-ia-robots-txt-777x1024.png" alt="Infográfico com os três tipos de robôs de IA, de treinamento, de busca e a pedido do usuário, e o que acontece ao bloquear cada um" class="wp-image-18615" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/robos-de-ia-robots-txt-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/robos-de-ia-robots-txt-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/robos-de-ia-robots-txt-768x1013.png 768w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/robos-de-ia-robots-txt.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">O Google-Extended e o Applebot-Extended não são robôs que visitam o site. São nomes usados só no robots.txt para controlar o uso do conteúdo pela IA, e bloqueá-los não tira o site da busca do Google nem da busca da Apple, segundo a <a href="https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers" data-wpel-link="external" target="_blank" rel="external noopener">lista de rastreadores do Google</a> e a <a href="https://support.apple.com/en-ae/119829" data-wpel-link="external" target="_blank" rel="external noopener">página do Applebot</a>.</p>



<p class="wp-block-paragraph">Para bloquear só o treinamento, junte os robôs em um grupo:</p>



<pre class="wp-block-code"><code>User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: Meta-ExternalAgent
User-agent: CCBot
Disallow: /</code></pre>



<p class="wp-block-paragraph">A decisão é sua. Bloquear o treinamento não afeta a busca tradicional. Já bloquear os robôs de busca, como o OAI-SearchBot e o PerplexityBot, tira o site das respostas desses assistentes, que hoje também mandam visitantes para os sites que citam.</p>



<h2 class="wp-block-heading">O que o robots.txt não faz</h2>



<ul class="wp-block-list">
<li><strong>Não tira páginas do Google.</strong> Uma página bloqueada ainda pode aparecer na busca, sem descrição, se outros sites apontarem para ela. Para tirar uma página do Google, use a <a href="https://www.homehost.com.br/blog/tutoriais/meta-tag/" data-wpel-link="internal" target="_self">meta tag</a> robots com noindex e deixe a página liberada no robots.txt, porque o Google precisa visitá-la para ler o noindex.</li>



<li><strong>Não protege conteúdo.</strong> O arquivo é público, e qualquer pessoa pode ler o que você bloqueou. Para uma área restrita, <a href="https://www.homehost.com.br/blog/tutoriais/como-proteger-uma-pasta-seu-site-com-login-e-senha/" data-wpel-link="internal" target="_self">proteja a pasta com senha</a>.</li>



<li><strong>Não melhora a posição no Google.</strong> Um robots.txt bem feito evita problemas de rastreamento, mas não faz o site subir.</li>
</ul>



<h2 class="wp-block-heading">Como editar o robots.txt no WordPress e no cPanel</h2>



<p class="wp-block-paragraph">O WordPress cria um robots.txt virtual quando não existe um arquivo de verdade na raiz do site. Para trocar por um arquivo seu, há três caminhos:</p>



<ul class="wp-block-list">
<li><strong>Yoast SEO:</strong> em SEO › Ferramentas › Editor de arquivos.</li>



<li><strong>Rank Math:</strong> em Rank Math › Configurações gerais › Editar robots.txt.</li>



<li><strong>Gerenciador de Arquivos do cPanel:</strong> crie o arquivo robots.txt na pasta public_html e cole o conteúdo. Um arquivo de verdade sempre substitui o virtual do WordPress.</li>
</ul>



<p class="wp-block-paragraph">Depois de salvar, abra <code>seusite.com.br/robots.txt</code> no navegador para confirmar que o arquivo novo está no ar.</p>



<h2 class="wp-block-heading">Como testar o robots.txt</h2>



<p class="wp-block-paragraph">O testador do gerador mostra se um robô pode acessar um endereço e qual regra decidiu, seguindo a mesma prioridade do Google. Para testar o arquivo que já está no ar, abra o robots.txt do seu site, copie o conteúdo e cole no testador.</p>



<p class="wp-block-paragraph">No Google Search Console, o relatório robots.txt, em Configurações, mostra as versões que o Google baixou, os erros que encontrou e permite pedir uma nova leitura do arquivo. Ele substituiu o antigo testador de robots.txt, aposentado em 2023. Para uma página específica, a Inspeção de URL diz se ela está bloqueada.</p>



<h2 class="wp-block-heading">Erros comuns no robots.txt</h2>



<ul class="wp-block-list">
<li><strong>Esquecer o <code>Disallow: /</code> depois de lançar o site.</strong> É comum bloquear tudo durante a construção e esquecer de liberar depois.</li>



<li><strong>Bloquear CSS e JavaScript.</strong> Sem eles, o Google não vê a página como o visitante vê.</li>



<li><strong>Usar o robots.txt para tirar páginas do Google.</strong> Além de não funcionar, impede o Google de ler o noindex.</li>



<li><strong>Escrever o caminho sem a barra inicial.</strong> <code>Disallow: privado</code> não vale nada; o certo é <code>Disallow: /privado</code>.</li>



<li><strong>Colocar o sitemap com endereço relativo.</strong> A linha Sitemap precisa do endereço completo, com https.</li>



<li><strong>Usar noindex ou Crawl-delay para o Google.</strong> O Google não aceita nenhuma das duas linhas.</li>
</ul>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Hospedagem com cPanel na Homehost</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">Servidores LiteSpeed, certificado SSL grátis e o robots.txt e os outros arquivos do site sempre à mão, no Gerenciador de Arquivos do cPanel.</p>
<a href="https://www.homehost.com.br/hospedagem-de-sites/" style="display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Ver planos de hospedagem</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>O que é robots.txt?</strong><br>É um arquivo de texto na raiz do site que diz aos robôs dos buscadores e das empresas de IA o que eles podem rastrear. Ele fica em seusite.com.br/robots.txt e é lido antes do rastreamento. Os grandes buscadores seguem o arquivo, mas ele é só um pedido, e não uma proteção.</p>



<p class="wp-block-paragraph"><strong>Onde fica o robots.txt no WordPress?</strong><br>Se não existe um arquivo na raiz do site, o WordPress mostra um robots.txt virtual. Para editar, use o editor de arquivos do Yoast SEO, a opção Editar robots.txt do Rank Math ou crie o arquivo na pasta public_html pelo Gerenciador de Arquivos do cPanel. Um arquivo de verdade sempre substitui o virtual.</p>



<p class="wp-block-paragraph"><strong>Como bloquear o ChatGPT e outras IAs no robots.txt?</strong><br>Crie um grupo com os robôs de IA e a regra Disallow: /. Para bloquear só o treinamento, use GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Meta-ExternalAgent e CCBot. Para tirar o site também das buscas com IA, inclua OAI-SearchBot, Claude-SearchBot, PerplexityBot e Meta-WebIndexer. O gerador desta página monta o grupo pronto.</p>



<p class="wp-block-paragraph"><strong>Bloquear robôs de IA prejudica o site no Google?</strong><br>Bloquear o treinamento não afeta a busca do Google. O Google-Extended, por exemplo, não é usado para incluir nem para ranquear sites na busca. Já bloquear os robôs de busca com IA tira o site das respostas do ChatGPT, do Claude e do Perplexity.</p>



<p class="wp-block-paragraph"><strong>O robots.txt tira uma página do Google?</strong><br>Não. Uma página bloqueada ainda pode aparecer na busca se outros sites apontarem para ela. Para tirar uma página do Google, use a meta tag robots com noindex e deixe a página liberada no robots.txt, para que o Google consiga ler o noindex.</p>



<p class="wp-block-paragraph"><strong>Todo site precisa de robots.txt?</strong><br>Não é obrigatório. Sem o arquivo, os buscadores entendem que podem rastrear tudo. Mesmo assim, vale ter um, nem que seja só para indicar o sitemap e para decidir o que fazer com os robôs de IA.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "O que é robots.txt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É um arquivo de texto na raiz do site que diz aos robôs dos buscadores e das empresas de IA o que eles podem rastrear. Ele fica em seusite.com.br/robots.txt e é lido antes do rastreamento. Os grandes buscadores seguem o arquivo, mas ele é só um pedido, e não uma proteção."
      }
    },
    {
      "@type": "Question",
      "name": "Onde fica o robots.txt no WordPress?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Se não existe um arquivo na raiz do site, o WordPress mostra um robots.txt virtual. Para editar, use o editor de arquivos do Yoast SEO, a opção Editar robots.txt do Rank Math ou crie o arquivo na pasta public_html pelo Gerenciador de Arquivos do cPanel. Um arquivo de verdade sempre substitui o virtual."
      }
    },
    {
      "@type": "Question",
      "name": "Como bloquear o ChatGPT e outras IAs no robots.txt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Crie um grupo com os robôs de IA e a regra Disallow: /. Para bloquear só o treinamento, use GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Meta-ExternalAgent e CCBot. Para tirar o site também das buscas com IA, inclua OAI-SearchBot, Claude-SearchBot, PerplexityBot e Meta-WebIndexer. O gerador desta página monta o grupo pronto."
      }
    },
    {
      "@type": "Question",
      "name": "Bloquear robôs de IA prejudica o site no Google?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Bloquear o treinamento não afeta a busca do Google. O Google-Extended, por exemplo, não é usado para incluir nem para ranquear sites na busca. Já bloquear os robôs de busca com IA tira o site das respostas do ChatGPT, do Claude e do Perplexity."
      }
    },
    {
      "@type": "Question",
      "name": "O robots.txt tira uma página do Google?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não. Uma página bloqueada ainda pode aparecer na busca se outros sites apontarem para ela. Para tirar uma página do Google, use a meta tag robots com noindex e deixe a página liberada no robots.txt, para que o Google consiga ler o noindex."
      }
    },
    {
      "@type": "Question",
      "name": "Todo site precisa de robots.txt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não é obrigatório. Sem o arquivo, os buscadores entendem que podem rastrear tudo. Mesmo assim, vale ter um, nem que seja só para indicar o sitemap e para decidir o que fazer com os robôs de IA."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">O robots.txt é um arquivo pequeno com uma função bem definida: dizer aos robôs o que eles podem rastrear. Ele organiza o rastreamento, aponta o sitemap e, hoje, é também onde se decide se o conteúdo do site pode treinar modelos de IA. O que ele não faz é esconder páginas do Google ou proteger conteúdo. Monte o arquivo no gerador, teste os endereços mais importantes e confira o relatório do Search Console depois de publicar.</p>
<p>O post <a href="https://www.homehost.com.br/blog/seo/robots-txt/" data-wpel-link="internal" target="_self">Robots.txt: o que é, como criar e gerador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18613</post-id>	</item>
		<item>
		<title>Dados estruturados: o que são e gerador de schema</title>
		<link>https://www.homehost.com.br/blog/seo/dados-estruturados/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Thu, 05 Nov 2026 21:16:24 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18604</guid>

					<description><![CDATA[<p>Dados estruturados são um código, invisível para o visitante, que conta ao Google o que a página é: uma empresa com endereço e horário, um artigo com autor e data, uma organização com logo e redes sociais. Com o gerador abaixo, você preenche um formulário e copia o código pronto, no formato JSON-LD, que é [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/seo/dados-estruturados/" data-wpel-link="internal" target="_self">Dados estruturados: o que são e gerador de schema</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Dados estruturados são um código, invisível para o visitante, que conta ao Google o que a página é: uma empresa com endereço e horário, um artigo com autor e data, uma organização com logo e redes sociais. Com o gerador abaixo, você preenche um formulário e copia o código pronto, no formato JSON-LD, que é o que o Google recomenda.</strong></p>



<p class="wp-block-paragraph">O gerador cria os quatro tipos mais comuns em sites de empresas e blogs e confere os campos que o Google pede. Se o seu site usa um plugin de SEO, como o Yoast ou o Rank Math, veja antes na seção sobre WordPress o que ele já faz sozinho.</p>



<h2 class="wp-block-heading">Gere o código de dados estruturados</h2>



<p class="wp-block-paragraph">Escolha o tipo, preencha o formulário e copie o código. O gerador avisa quando falta um campo obrigatório ou quando algum dado está em um formato que o Google não aceita.</p>



<div class="hh-sch" id="hh-sch" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-sch"); if (!root0) { return; } var S2 = "/" + "/"; var PFX = "hh-sch-"; function U(n) { return String.fromCharCode(n); } var LT = U(60); var GT = U(62); var BS = U(92); var Q = U(34); var NL = U(10); var NAVY = "#0b3d91"; var LINK = "color:#1d4ed8;font-weight:700;"; var MONO = "font-family:Consolas,Menlo,monospace;"; var CTX = "https:" + S2 + "schema.org"; var RRT = "https:" + S2 + "search.google.com/test/rich-results"; var SMV = "https:" + S2 + "validator.schema.org/"; var COL = {ok: ["#15803d", "#e8f5ec", U(10004)], warn: ["#b45309", "#fff4e5", U(9888)], err: ["#b42318", "#fdecec", U(10006)], info: ["#1d4ed8", "#eef3ff", U(8505)]}; var RANK = {err: 0, warn: 1, ok: 2, info: 3}; var INP = "width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid #9aa7b8;border-radius:8px;font-size:15px;background:#ffffff;color:#0F172A;margin:0;font-family:Arial,Helvetica,sans-serif;"; var DAYS = [["Monday", "Segunda"], ["Tuesday", "Ter" + U(231) + "a"], ["Wednesday", "Quarta"], ["Thursday", "Quinta"], ["Friday", "Sexta"], ["Saturday", "S" + U(225) + "bado"], ["Sunday", "Domingo"]]; var UFS = ["", "AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO"]; var LTYPES = [["LocalBusiness", "Outro tipo de empresa"], ["RealEstateAgent", "Ag" + U(234) + "ncia imobili" + U(225) + "ria"], ["TravelAgency", "Ag" + U(234) + "ncia de viagens"], ["LegalService", "Advocacia"], ["ExerciseGym", "Academia"], ["BarOrPub", "Bar"], ["HairSalon", "Barbearia ou cabeleireiro"], ["CafeOrCoffeeShop", "Cafeteria"], ["MedicalClinic", "Cl" + U(237) + "nica m" + U(233) + "dica"], ["AccountingService", "Contabilidade"], ["Dentist", "Dentista"], ["Electrician", "Eletricista"], ["Plumber", "Encanador"], ["Pharmacy", "Farm" + U(225) + "cia"], ["Florist", "Floricultura"], ["Hotel", "Hotel"], ["DryCleaningOrLaundry", "Lavanderia"], ["Store", "Loja"], ["ClothingStore", "Loja de roupas"], ["HardwareStore", "Material de constru" + U(231) + U(227) + "o"], ["AutoRepair", "Oficina mec" + U(226) + "nica"], ["Optician", U(211) + "tica"], ["Bakery", "Padaria"], ["PetStore", "Pet shop"], ["BedAndBreakfast", "Pousada"], ["Restaurant", "Restaurante"], ["BeautySalon", "Sal" + U(227) + "o de beleza"], ["GroceryStore", "Supermercado"], ["VeterinaryCare", "Veterin" + U(225) + "rio"]]; var FOOD = {Restaurant: 1, CafeOrCoffeeShop: 1, Bakery: 1, BarOrPub: 1}; var st = {tab: "local", authors: [{name: "", url: "", type: "Person"}], faq: [{q: "", a: ""}, {q: "", a: ""}], logo: {}}; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function val(id) { var e = el(id); return e ? String(or(e.value, "")).trim() : ""; } function digits(s) { var o = ""; for (var i = 0; i !== s.length; i++) { if (has("0123456789", s.charAt(i))) { o += s.charAt(i); } } return o; } function isUrl(s) { if (has(s, " ")) { return false; } var a = s.indexOf("https:" + S2) === 0 ? 8 : (s.indexOf("http:" + S2) === 0 ? 7 : 0); if (a === 0) { return false; } var host = s.slice(a).split("/")[0]; return has(host, ".") ? gt(host.length, 3) : false; } function lines(s) { var r = []; var p = String(or(s, "")).split(NL); for (var i = 0; i !== p.length; i++) { var t = p[i].trim(); if (t) { r.push(t); } } return r; } function tm(s) { var p = String(s).split(":"); return Number(p[0]) * 60 + Number(or(p[1], 0)); } function fmtCep(s) { var d = digits(s); return d.length === 8 ? d.slice(0, 5) + "-" + d.slice(5) : ""; } function fmtTel(s, N, what) { if (!s) { return ""; } var d = digits(s); if (s.charAt(0) === "+") { return s; } if (d.indexOf("0800") === 0) { return d.slice(0, 4) + " " + d.slice(4, 7) + " " + d.slice(7); } if (d.indexOf("55") === 0 ? (d.length === 12 ? true : d.length === 13) : false) { d = d.slice(2); } if (d.charAt(0) === "0") { d = d.slice(1); } if (d.length === 10) { return "+55 " + d.slice(0, 2) + " " + d.slice(2, 6) + "-" + d.slice(6); } if (d.length === 11) { return "+55 " + d.slice(0, 2) + " " + d.slice(2, 7) + "-" + d.slice(7); } N.push(["warn", "Confira o " + what + ": use o DDD e o n" + U(250) + "mero, como (11) 3333-4444."]); return s; } function cnpjOk(d) { if (d.length !== 14) { return false; } var same = true; for (var k = 1; k !== 14; k++) { if (d.charAt(k) !== d.charAt(0)) { same = false; } } if (same) { return false; } function dv(len) { var w = len === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]; var s = 0; for (var i = 0; i !== len; i++) { s += Number(d.charAt(i)) * w[i]; } var r = s % 11; return lt(r, 2) ? 0 : 11 - r; } return dv(12) === Number(d.charAt(12)) ? dv(13) === Number(d.charAt(13)) : false; } function urlField(o, key, v, N, label) { if (!v) { return; } if (isUrl(v)) { o[key] = v; if (v.indexOf("http:" + S2) === 0) { N.push(["info", "O endere" + U(231) + "o de " + label + " come" + U(231) + "a com http. Se o site tem SSL, use https."]); } } else { N.push(["warn", "O endere" + U(231) + "o de " + label + " precisa ser completo, come" + U(231) + "ando com https:" + S2 + "."]); } } function sameAs(o, v, N) { var L = lines(v); var ok = []; for (var i = 0; i !== L.length; i++) { if (isUrl(L[i])) { ok.push(L[i]); } else { N.push(["warn", "Este perfil n" + U(227) + "o " + U(233) + " um endere" + U(231) + "o completo e ficou de fora: " + L[i]]); } } if (ok.length) { o.sameAs = ok.length === 1 ? ok[0] : ok; } } function address(pre, N, needed) { var street = val(pre + "street"); var bairro = val(pre + "bairro"); var city = val(pre + "city"); var uf = val(pre + "uf"); var cep = val(pre + "cep"); if (!needed ? !(street ? true : (city ? true : cep)) : false) { return null; } var a = {"@type": "PostalAddress"}; if (street) { a.streetAddress = bairro ? street + ", " + bairro : street; } if (city) { a.addressLocality = city; } if (uf) { a.addressRegion = uf; } if (cep) { var c = fmtCep(cep); if (c) { a.postalCode = c; } else { N.push(["warn", "O CEP precisa ter 8 n" + U(250) + "meros."]); } } a.addressCountry = "BR"; return a; } function plain(s) { s = String(s).split("**").join("").split(U(96)).join(""); var out = ""; var i = 0; while (lt(i, s.length)) { var c = s.charAt(i); if (c === "[") { var j = s.indexOf("](", i); var k = j === -1 ? -1 : s.indexOf(")", j); if (j !== -1 ? k !== -1 : false) { out += s.slice(i + 1, j); i = k + 1; continue; } } out += c; i++; } return out.trim(); } function importFaq(txt) { var L = String(txt).split(NL); var res = []; var cur = null; for (var i = 0; i !== L.length; i++) { var l = plain(L[i]); if (!l) { continue; } if (l.charAt(l.length - 1) === "?") { cur = {q: l, a: ""}; res.push(cur); } else if (cur) { cur.a = cur.a ? cur.a + " " + l : l; } } return res; } function vLocal() { var N = []; var type = val("l-type"); var o = {"@context": CTX, "@type": type}; var name = val("l-name"); if (name) { o.name = name; } else { N.push(["err", "Preencha o nome da empresa."]); } if (!val("l-street") ? true : !val("l-city")) { N.push(["err", "Preencha a rua e a cidade. O Google exige o nome e o endere" + U(231) + "o da empresa."]); } var img = val("l-img"); if (img) { urlField(o, "image", img, N, "imagem"); } else { N.push(["info", "Uma foto da fachada ou do logo ajuda a identificar a empresa. Use um endere" + U(231) + "o de imagem completo."]); } o.address = address("l-", N, true); var geo = val("l-geo"); if (geo) { var g = geo.split(","); var la = g.length === 2 ? Number(g[0].trim()) : NaN; var lo = g.length === 2 ? Number(g[1].trim()) : NaN; if (isNaN(la) ? true : isNaN(lo)) { N.push(["warn", "As coordenadas precisam estar no formato latitude, longitude, como -23.55052, -46.63331."]); } else { o.geo = {"@type": "GeoCoordinates", latitude: la, longitude: lo}; var dl = has(g[0], ".") ? g[0].trim().split(".")[1].length : 0; var dg = has(g[1], ".") ? g[1].trim().split(".")[1].length : 0; if (lt(Math.min(dl, dg), 5)) { N.push(["warn", "O Google pede pelo menos 5 casas decimais nas coordenadas. Copie o ponto exato no Google Maps."]); } } } urlField(o, "url", val("l-url"), N, "site"); if (!val("l-url")) { N.push(["warn", "Informe o endere" + U(231) + "o do site ou da p" + U(225) + "gina da empresa."]); } var tel = fmtTel(val("l-tel"), N, "telefone"); if (tel) { o.telephone = tel; } else { N.push(["warn", "Informe o telefone, com DDD. Ele " + U(233) + " um dos campos recomendados pelo Google."]); } var pr = val("l-price"); if (pr) { if (gt(pr.length, 99)) { N.push(["warn", "A faixa de pre" + U(231) + "o precisa ter menos de 100 caracteres."]); } else { o.priceRange = pr; } } if (FOOD[type]) { urlField(o, "menu", val("l-menu"), N, "card" + U(225) + "pio"); } var spec = hours(N); if (spec.length) { o.openingHoursSpecification = spec; } else { N.push(["warn", "Marque os dias e os hor" + U(225) + "rios de funcionamento."]); } sameAs(o, val("l-same"), N); N.push(["info", "Use os mesmos nome, endere" + U(231) + "o e telefone do Perfil da Empresa no Google, para n" + U(227) + "o passar informa" + U(231) + U(245) + "es diferentes."]); return {o: o, N: N}; } function hours(N) { var lunch = el("l-lunch").checked; var la = val("l-la"); var lb = val("l-lb"); var groups = {}; var order = []; for (var i = 0; i !== 7; i++) { if (!el("l-d" + i).checked) { continue; } var a = val("l-o" + i); var b = val("l-c" + i); if (!a ? true : !b) { N.push(["warn", "Preencha a abertura e o fechamento de " + DAYS[i][1] + "."]); continue; } var iv = [[a, b]]; if (lunch ? (la ? (lb ? gt(tm(lb), tm(la)) : false) : false) : false) { if (gt(tm(la), tm(a)) ? lt(tm(lb), tm(b)) : false) { iv = [[a, la], [lb, b]]; } } var key = iv.map(function (x) { return x[0] + "-" + x[1]; }).join(";"); if (!groups[key]) { groups[key] = {iv: iv, days: []}; order.push(key); } groups[key].days.push(DAYS[i][0]); } if (lunch ? !(la ? (lb ? gt(tm(lb), tm(la)) : false) : false) : false) { N.push(["warn", "Confira o hor" + U(225) + "rio de almo" + U(231) + "o: a volta precisa ser depois da sa" + U(237) + "da."]); } var out = []; for (var k = 0; k !== order.length; k++) { var gr = groups[order[k]]; for (var m = 0; m !== gr.iv.length; m++) { out.push({"@type": "OpeningHoursSpecification", dayOfWeek: gr.days.length === 1 ? gr.days[0] : gr.days, opens: gr.iv[m][0] + ":00", closes: gr.iv[m][1] + ":00"}); } } return out; } function vOrg() { var N = []; var o = {"@context": CTX, "@type": val("o-type")}; var name = val("o-name"); if (name) { o.name = name; } else { N.push(["err", "Preencha pelo menos o nome da organiza" + U(231) + U(227) + "o."]); } var alt = val("o-alt"); if (alt) { o.alternateName = alt; } var legal = val("o-legal"); if (legal ? legal !== name : false) { o.legalName = legal; } urlField(o, "url", val("o-url"), N, "site"); if (!val("o-url")) { N.push(["warn", "Informe o endere" + U(231) + "o do site. Ele ajuda o Google a identificar a organiza" + U(231) + U(227) + "o."]); } var logo = val("o-logo"); if (logo) { urlField(o, "logo", logo, N, "logo"); var dim = st.logo[logo]; if (dim === "err") { N.push(["warn", "N" + U(227) + "o consegui abrir o logo nesse endere" + U(231) + "o. Confira se a imagem est" + U(225) + " no ar."]); } else if (dim) { if (lt(Math.min(dim[0], dim[1]), 112)) { N.push(["warn", "O logo tem " + dim[0] + " " + U(215) + " " + dim[1] + " px. O Google pede pelo menos 112 " + U(215) + " 112 px."]); } else { N.push(["ok", "Logo com " + dim[0] + " " + U(215) + " " + dim[1] + " px, acima do m" + U(237) + "nimo de 112 " + U(215) + " 112 px."]); } } } else { N.push(["info", "O logo ajuda o Google a escolher a imagem da marca nos resultados. Use uma imagem quadrada com pelo menos 112 " + U(215) + " 112 px."]); } var desc = val("o-desc"); if (desc) { o.description = desc; } var mail = val("o-mail"); if (mail) { if (has(mail, "@") ? has(mail.split("@")[1], ".") : false) { o.email = mail; } else { N.push(["warn", "Confira o e-mail."]); } } var tel = fmtTel(val("o-tel"), N, "telefone"); if (tel) { o.telephone = tel; } var adr = address("o-", N, false); if (adr) { o.address = adr; } var cn = val("o-cnpj"); if (cn) { var d = digits(cn); if (cnpjOk(d)) { o.taxID = d.slice(0, 2) + "." + d.slice(2, 5) + "." + d.slice(5, 8) + "/" + d.slice(8, 12) + "-" + d.slice(12); } else { N.push(["warn", "Esse CNPJ n" + U(227) + "o " + U(233) + " v" + U(225) + "lido. Confira os n" + U(250) + "meros."]); } } var fd = val("o-found"); if (fd) { o.foundingDate = fd; } var ct = fmtTel(val("o-ctel"), N, "telefone do atendimento"); var cm = val("o-cmail"); if (ct ? true : cm) { var cp = {"@type": "ContactPoint", contactType: "customer service"}; if (ct) { cp.telephone = ct; } if (cm) { cp.email = cm; } o.contactPoint = cp; } sameAs(o, val("o-same"), N); N.push(["info", "Coloque esse c" + U(243) + "digo s" + U(243) + " na p" + U(225) + "gina inicial ou na p" + U(225) + "gina Quem somos. Ele n" + U(227) + "o precisa ir em todas as p" + U(225) + "ginas."]); return {o: o, N: N}; } function isoDate(v, tz) { if (!v) { return ""; } var s = v.length === 16 ? v + ":00" : v; return s + tz; } function vArt() { var N = []; var o = {"@context": CTX, "@type": val("a-type")}; var url = val("a-url"); if (url) { if (isUrl(url)) { o.mainEntityOfPage = {"@type": "WebPage", "@id": url}; } else { N.push(["warn", "O endere" + U(231) + "o da p" + U(225) + "gina precisa ser completo, come" + U(231) + "ando com https:" + S2 + "."]); } } var h = val("a-head"); if (h) { o.headline = h; if (gt(h.length, 110)) { N.push(["info", "O t" + U(237) + "tulo tem " + h.length + " caracteres. T" + U(237) + "tulos longos podem ser cortados em alguns aparelhos."]); } } else { N.push(["err", "Preencha o t" + U(237) + "tulo do artigo."]); } var imgs = lines(val("a-img")); var ok = []; for (var i = 0; i !== imgs.length; i++) { if (isUrl(imgs[i])) { ok.push(imgs[i]); } else { N.push(["warn", "Esta imagem n" + U(227) + "o " + U(233) + " um endere" + U(231) + "o completo e ficou de fora: " + imgs[i]]); } } if (ok.length) { o.image = ok.length === 1 ? ok[0] : ok; } else { N.push(["warn", "Informe pelo menos uma imagem do artigo. O Google recomenda imagens com pelo menos 50 mil pixels (largura " + U(215) + " altura), nas propor" + U(231) + U(245) + "es 16:9, 4:3 e 1:1."]); } var tz = val("a-tz"); var dp = val("a-pub"); var dm = val("a-mod"); if (dp) { o.datePublished = isoDate(dp, tz); } else { N.push(["warn", "Informe a data de publica" + U(231) + U(227) + "o."]); } if (dm) { o.dateModified = isoDate(dm, tz); if (dp ? lt(Date.parse(dm), Date.parse(dp)) : false) { N.push(["warn", "A data de atualiza" + U(231) + U(227) + "o est" + U(225) + " antes da publica" + U(231) + U(227) + "o."]); } } var A = []; for (var j = 0; j !== st.authors.length; j++) { var au = st.authors[j]; var nm = String(au.name).trim(); if (!nm) { continue; } var x = {"@type": au.type, name: nm}; var u = String(au.url).trim(); if (u) { if (isUrl(u)) { x.url = u; } else { N.push(["warn", "O link do autor " + nm + " precisa ser um endere" + U(231) + "o completo."]); } } A.push(x); } if (A.length) { o.author = A.length === 1 ? A[0] : A; } else { N.push(["warn", "Informe o autor. No nome, coloque s" + U(243) + " o nome, sem cargo nem empresa."]); } var pn = val("a-pubname"); if (pn) { var p = {"@type": "Organization", name: pn}; var pl = val("a-publogo"); if (pl) { if (isUrl(pl)) { p.logo = {"@type": "ImageObject", url: pl}; } else { N.push(["warn", "O logo da editora precisa ser um endere" + U(231) + "o completo."]); } } o.publisher = p; } N.push(["info", "Se o site usa Yoast SEO ou Rank Math, eles normalmente j" + U(225) + " criam o schema de artigo. Confira o c" + U(243) + "digo da p" + U(225) + "gina antes de colar este, para n" + U(227) + "o duplicar."]); return {o: o, N: N}; } function vFaq() { var N = []; var o = {"@context": CTX, "@type": "FAQPage", mainEntity: []}; for (var i = 0; i !== st.faq.length; i++) { var q = String(st.faq[i].q).trim(); var a = String(st.faq[i].a).trim(); if (!q ? !a : false) { continue; } if (!q) { N.push(["err", "A resposta " + (i + 1) + " est" + U(225) + " sem pergunta."]); continue; } if (!a) { N.push(["err", "A pergunta " + Q + q + Q + " est" + U(225) + " sem resposta."]); continue; } o.mainEntity.push({"@type": "Question", name: q, acceptedAnswer: {"@type": "Answer", text: a}}); } if (!o.mainEntity.length) { N.push(["err", "Preencha pelo menos uma pergunta com resposta."]); } N.push(["info", "As perguntas e respostas precisam aparecer na p" + U(225) + "gina, com o mesmo texto. O Google n" + U(227) + "o aceita marca" + U(231) + U(227) + "o de conte" + U(250) + "do escondido."]); return {o: o, N: N}; } function notes(arr) { var box = el("notes"); box.textContent = ""; arr = arr.slice().sort(function (a, b) { return RANK[a[0]] - RANK[b[0]]; }); for (var i = 0; i !== arr.length; i++) { var c = COL[arr[i][0]]; var d = add(box, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:7px 10px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(arr[i][1])); } } function code(o) { return LT + "script type=" + Q + "application/ld+json" + Q + GT + NL + JSON.stringify(o, null, 2).split(LT).join(BS + "u003c") + NL + LT + "/script" + GT; } function update() { var r = st.tab === "local" ? vLocal() : (st.tab === "org" ? vOrg() : (st.tab === "art" ? vArt() : vFaq())); var bad = false; for (var i = 0; i !== r.N.length; i++) { if (r.N[i][0] === "err") { bad = true; } } notes(r.N); el("out").style.display = bad ? "none" : "block"; el("wait").style.display = bad ? "block" : "none"; if (!bad) { el("code").textContent = code(r.o); } } function checkLogo() { var u = val("o-logo"); if (!u ? true : !isUrl(u)) { return; } if (st.logo[u]) { return; } var im = new Image(); im.onload = function () { st.logo[u] = [im.naturalWidth, im.naturalHeight]; if (st.tab === "org") { update(); } }; im.onerror = function () { st.logo[u] = "err"; if (st.tab === "org") { update(); } }; im.src = u; } function field(p, label, id, opt) { opt = or(opt, {}); var w = add(p, "div", "", "flex:" + or(opt.flex, "1 1 220px") + ";min-width:0;"); var l = add(w, "label", label, "display:block;font-weight:700;font-size:13.5px;color:" + NAVY + ";margin-bottom:4px;"); l.setAttribute("for", PFX + id); var e; if (opt.area) { e = add(w, "textarea", "", INP + "min-height:" + or(opt.h, "76px") + ";resize:vertical;line-height:1.45;"); } else if (opt.sel) { e = add(w, "select", "", INP); for (var i = 0; i !== opt.sel.length; i++) { var o = add(e, "option", opt.sel[i][1]); o.value = opt.sel[i][0]; } } else { e = add(w, "input", "", INP); e.type = or(opt.type, "text"); e.setAttribute("autocomplete", "off"); } e.id = PFX + id; if (opt.ph) { e.setAttribute("placeholder", opt.ph); } if (opt.val) { e.value = opt.val; } if (opt.hint) { add(w, "div", opt.hint, "font-size:12.5px;color:#475569;margin-top:3px;line-height:1.4;"); } e.addEventListener("input", function () { if (id === "o-logo") { checkLogo(); } update(); }); e.addEventListener("change", function () { update(); }); return e; } function row(p) { return add(p, "div", "", "display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;"); } function sub(p, text) { return add(p, "div", text, "font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 2px;"); } function btn(p, text, primary) { var b = add(p, "button", text, primary ? "padding:9px 18px;border:0;border-radius:8px;background:" + NAVY + ";color:#ffffff;font-size:14.5px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;" : "padding:6px 12px;border:1px solid " + NAVY + ";border-radius:7px;background:#ffffff;color:" + NAVY + ";font-size:13px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;"); b.type = "button"; return b; } function ufOpts() { var r = []; for (var i = 0; i !== UFS.length; i++) { r.push([UFS[i], UFS[i] ? UFS[i] : "UF"]); } return r; } function addrFields(p, pre) { var r1 = row(p); field(r1, "Rua e n" + U(250) + "mero", pre + "street", {ph: "Rua das Flores, 123", flex: "2 1 260px"}); field(r1, "Bairro", pre + "bairro", {ph: "Centro"}); var r2 = row(p); field(r2, "Cidade", pre + "city", {ph: "S" + U(227) + "o Paulo", flex: "2 1 200px"}); field(r2, "Estado", pre + "uf", {sel: ufOpts(), flex: "0 1 110px"}); field(r2, "CEP", pre + "cep", {ph: "01000-000", flex: "1 1 140px"}); } function buildLocal(p) { var r1 = row(p); field(r1, "Tipo de neg" + U(243) + "cio", "l-type", {sel: LTYPES}); field(r1, "Nome da empresa", "l-name", {ph: "Padaria da Jo" + U(227) + "o"}); sub(p, "Endere" + U(231) + "o"); addrFields(p, "l-"); sub(p, "Contato e detalhes"); var r3 = row(p); field(r3, "Telefone", "l-tel", {ph: "(11) 3333-4444", type: "tel"}); field(r3, "Site", "l-url", {ph: "https:" + S2 + "www.seusite.com.br", type: "url"}); var r4 = row(p); field(r4, "Imagem (foto ou logo)", "l-img", {ph: "https:" + S2 + "www.seusite.com.br/fachada.jpg", type: "url"}); field(r4, "Faixa de pre" + U(231) + "o", "l-price", {ph: "R$ 20-50 ou $$", flex: "1 1 160px"}); var r5 = row(p); var mw = field(r5, "Card" + U(225) + "pio", "l-menu", {ph: "https:" + S2 + "www.seusite.com.br/cardapio", type: "url"}); mw.parentNode.id = PFX + "l-menuw"; field(r5, "Coordenadas (opcional)", "l-geo", {ph: "-23.55052, -46.63331", hint: "No Google Maps, clique com o bot" + U(227) + "o direito no local e copie os n" + U(250) + "meros."}); sub(p, "Hor" + U(225) + "rio de funcionamento"); add(p, "div", "Marque os dias em que a empresa abre. Para 24 horas, use 00:00 at" + U(233) + " 23:59.", "font-size:12.5px;color:#475569;margin:4px 0 6px;"); var hb = add(p, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:4px 12px;"); for (var i = 0; i !== 7; i++) { var hr = add(hb, "div", "", "display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;" + (i === 0 ? "" : "border-top:1px solid #eef1f5;")); var lb = add(hr, "label", "", "display:flex;align-items:center;gap:6px;min-width:110px;font-size:14px;font-weight:700;color:#0F172A;cursor:pointer;"); var cb = add(lb, "input", "", "margin:0;width:17px;height:17px;"); cb.type = "checkbox"; cb.id = PFX + "l-d" + i; cb.addEventListener("change", update); lb.appendChild(document.createTextNode(DAYS[i][1])); var o1 = add(hr, "input", "", INP + "width:auto;flex:0 1 120px;padding:6px 8px;"); o1.type = "time"; o1.id = PFX + "l-o" + i; o1.value = "08:00"; o1.setAttribute("aria-label", "Abre " + DAYS[i][1]); add(hr, "span", U(224) + "s", "font-size:13px;color:#475569;"); var c1 = add(hr, "input", "", INP + "width:auto;flex:0 1 120px;padding:6px 8px;"); c1.type = "time"; c1.id = PFX + "l-c" + i; c1.value = i === 5 ? "12:00" : "18:00"; c1.setAttribute("aria-label", "Fecha " + DAYS[i][1]); o1.addEventListener("input", update); c1.addEventListener("input", update); } var lr = add(p, "div", "", "display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;"); var ll = add(lr, "label", "", "display:flex;align-items:center;gap:6px;font-size:14px;font-weight:700;color:#0F172A;cursor:pointer;"); var lc = add(ll, "input", "", "margin:0;width:17px;height:17px;"); lc.type = "checkbox"; lc.id = PFX + "l-lunch"; lc.addEventListener("change", update); ll.appendChild(document.createTextNode("Fecha para almo" + U(231) + "o, das")); var l1 = add(lr, "input", "", INP + "width:auto;flex:0 1 120px;padding:6px 8px;"); l1.type = "time"; l1.id = PFX + "l-la"; l1.value = "12:00"; l1.setAttribute("aria-label", "Sa" + U(237) + "da para o almo" + U(231) + "o"); add(lr, "span", U(224) + "s", "font-size:13px;color:#475569;"); var l2 = add(lr, "input", "", INP + "width:auto;flex:0 1 120px;padding:6px 8px;"); l2.type = "time"; l2.id = PFX + "l-lb"; l2.value = "13:00"; l2.setAttribute("aria-label", "Volta do almo" + U(231) + "o"); l1.addEventListener("input", update); l2.addEventListener("input", update); var wk = btn(add(p, "div", "", "margin-top:8px;"), "Marcar de segunda a sexta, 08:00 " + U(224) + "s 18:00", false); wk.addEventListener("click", function () { for (var d = 0; d !== 5; d++) { el("l-d" + d).checked = true; el("l-o" + d).value = "08:00"; el("l-c" + d).value = "18:00"; } update(); }); sub(p, "Redes sociais"); var r6 = row(p); field(r6, "Perfis da empresa (um por linha)", "l-same", {area: true, ph: "https:" + S2 + "www.instagram.com/suaempresa"}); el("l-type").addEventListener("change", function () { el("l-menuw").style.display = FOOD[el("l-type").value] ? "block" : "none"; }); el("l-menuw").style.display = "none"; } function buildOrg(p) { var r1 = row(p); field(r1, "Tipo", "o-type", {sel: [["Organization", "Empresa ou organiza" + U(231) + U(227) + "o"], ["OnlineStore", "Loja virtual"], ["NGO", "ONG"]]}); field(r1, "Nome", "o-name", {ph: "Homehost"}); var r2 = row(p); field(r2, "Outro nome (opcional)", "o-alt", {ph: "Sigla ou nome popular"}); field(r2, "Raz" + U(227) + "o social (opcional)", "o-legal", {ph: "Empresa Exemplo Ltda."}); var r3 = row(p); field(r3, "Site", "o-url", {ph: "https:" + S2 + "www.seusite.com.br", type: "url"}); field(r3, "Logo", "o-logo", {ph: "https:" + S2 + "www.seusite.com.br/logo.png", type: "url", hint: "Imagem quadrada, de pelo menos 112 " + U(215) + " 112 px, que fique bem em fundo branco."}); var r4 = row(p); field(r4, "Descri" + U(231) + U(227) + "o (opcional)", "o-desc", {area: true, h: "60px", ph: "O que a empresa faz, em uma ou duas frases."}); sub(p, "Contato e registro"); var r5 = row(p); field(r5, "E-mail", "o-mail", {ph: "contato@seusite.com.br", type: "email"}); field(r5, "Telefone", "o-tel", {ph: "(11) 3333-4444", type: "tel"}); var r6 = row(p); field(r6, "CNPJ (opcional)", "o-cnpj", {ph: "00.000.000/0000-00"}); field(r6, "Data de funda" + U(231) + U(227) + "o (opcional)", "o-found", {type: "date"}); var r7 = row(p); field(r7, "Telefone do atendimento (opcional)", "o-ctel", {ph: "0800 123 4567", type: "tel"}); field(r7, "E-mail do atendimento (opcional)", "o-cmail", {ph: "suporte@seusite.com.br", type: "email"}); sub(p, "Endere" + U(231) + "o (opcional)"); addrFields(p, "o-"); sub(p, "Redes sociais"); var r8 = row(p); field(r8, "Perfis da organiza" + U(231) + U(227) + "o (um por linha)", "o-same", {area: true, ph: "https:" + S2 + "www.linkedin.com/company/suaempresa"}); } function authorRows() { var box = el("a-authors"); box.textContent = ""; for (var i = 0; i !== st.authors.length; i++) { var r = add(box, "div", "", "display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px;"); var n = add(r, "input", "", INP + "flex:1 1 180px;width:auto;"); n.type = "text"; n.value = st.authors[i].name; n.setAttribute("placeholder", "Nome do autor"); n.setAttribute("aria-label", "Nome do autor " + (i + 1)); n.setAttribute("data-i", String(i)); n.setAttribute("data-k", "name"); var u = add(r, "input", "", INP + "flex:1 1 200px;width:auto;"); u.type = "url"; u.value = st.authors[i].url; u.setAttribute("placeholder", "Link do perfil (opcional)"); u.setAttribute("aria-label", "Link do autor " + (i + 1)); u.setAttribute("data-i", String(i)); u.setAttribute("data-k", "url"); var t = add(r, "select", "", INP + "flex:0 1 150px;width:auto;"); add(t, "option", "Pessoa").value = "Person"; add(t, "option", "Organiza" + U(231) + U(227) + "o").value = "Organization"; t.value = st.authors[i].type; t.setAttribute("aria-label", "Tipo do autor " + (i + 1)); t.setAttribute("data-i", String(i)); t.setAttribute("data-k", "type"); var on = function () { st.authors[Number(this.getAttribute("data-i"))][this.getAttribute("data-k")] = this.value; update(); }; n.addEventListener("input", on); u.addEventListener("input", on); t.addEventListener("change", on); if (gt(st.authors.length, 1)) { var x = btn(r, "Remover", false); x.setAttribute("data-i", String(i)); x.addEventListener("click", function () { st.authors.splice(Number(this.getAttribute("data-i")), 1); authorRows(); update(); }); } } } function buildArt(p) { var r1 = row(p); field(r1, "Tipo", "a-type", {sel: [["BlogPosting", "Post de blog"], ["Article", "Artigo"], ["NewsArticle", "Not" + U(237) + "cia"]]}); field(r1, "T" + U(237) + "tulo", "a-head", {ph: "Como escolher um bom nome de dom" + U(237) + "nio", flex: "2 1 260px"}); var r2 = row(p); field(r2, "Endere" + U(231) + "o da p" + U(225) + "gina (opcional)", "a-url", {ph: "https:" + S2 + "www.seusite.com.br/blog/artigo/", type: "url"}); var r3 = row(p); field(r3, "Imagens (uma por linha)", "a-img", {area: true, h: "60px", ph: "https:" + S2 + "www.seusite.com.br/imagem.jpg", hint: "Use imagens do artigo, n" + U(227) + "o o logo do site."}); var r4 = row(p); field(r4, "Publicado em", "a-pub", {type: "datetime-local"}); field(r4, "Atualizado em (opcional)", "a-mod", {type: "datetime-local"}); field(r4, "Fuso hor" + U(225) + "rio", "a-tz", {sel: [["-03:00", "Bras" + U(237) + "lia (-03:00)"], ["-04:00", "Amazonas e outros (-04:00)"], ["-05:00", "Acre (-05:00)"], ["-02:00", "Fernando de Noronha (-02:00)"]], flex: "1 1 180px"}); sub(p, "Autor"); add(p, "div", "No nome, coloque s" + U(243) + " o nome da pessoa, sem cargo, t" + U(237) + "tulo ou empresa.", "font-size:12.5px;color:#475569;margin-top:4px;"); var ab = add(p, "div", ""); ab.id = PFX + "a-authors"; authorRows(); var aa = btn(add(p, "div", "", "margin-top:8px;"), "+ Adicionar autor", false); aa.addEventListener("click", function () { st.authors.push({name: "", url: "", type: "Person"}); authorRows(); update(); }); sub(p, "Editora (opcional)"); var r5 = row(p); field(r5, "Nome do site ou da empresa", "a-pubname", {ph: "Homehost"}); field(r5, "Logo", "a-publogo", {ph: "https:" + S2 + "www.seusite.com.br/logo.png", type: "url"}); } function faqRows() { var box = el("f-rows"); box.textContent = ""; for (var i = 0; i !== st.faq.length; i++) { var w = add(box, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:10px 12px;margin-top:8px;"); var hd = add(w, "div", "", "display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;"); add(hd, "div", "Pergunta " + (i + 1), "font-weight:800;font-size:13px;color:" + NAVY + ";"); if (gt(st.faq.length, 1)) { var x = btn(hd, "Remover", false); x.setAttribute("data-i", String(i)); x.addEventListener("click", function () { st.faq.splice(Number(this.getAttribute("data-i")), 1); faqRows(); update(); }); } var q = add(w, "input", "", INP); q.type = "text"; q.value = st.faq[i].q; q.setAttribute("placeholder", "Pergunta"); q.setAttribute("aria-label", "Pergunta " + (i + 1)); q.setAttribute("data-i", String(i)); q.addEventListener("input", function () { st.faq[Number(this.getAttribute("data-i"))].q = this.value; update(); }); var a = add(w, "textarea", "", INP + "min-height:64px;resize:vertical;margin-top:6px;line-height:1.45;"); a.value = st.faq[i].a; a.setAttribute("placeholder", "Resposta"); a.setAttribute("aria-label", "Resposta " + (i + 1)); a.setAttribute("data-i", String(i)); a.addEventListener("input", function () { st.faq[Number(this.getAttribute("data-i"))].a = this.value; update(); }); } } function buildFaq(p) { var wb = add(p, "div", "", "background:#fff4e5;border-left:4px solid #b45309;border-radius:6px;padding:8px 10px;margin:12px 0 0;font-size:14px;line-height:1.5;color:#0F172A;"); add(wb, "span", U(9888) + " ", "color:#b45309;font-weight:800;"); wb.appendChild(document.createTextNode("Desde 7 de maio de 2026, o Google n" + U(227) + "o mostra mais o resultado com perguntas frequentes. O c" + U(243) + "digo continua v" + U(225) + "lido e n" + U(227) + "o prejudica o site, mas n" + U(227) + "o gera destaque na busca do Google.")); wb.id = PFX + "f-warn"; var imp = add(p, "details", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:10px 12px;margin-top:10px;"); add(imp, "summary", "Colar perguntas e respostas de uma vez", "cursor:pointer;font-weight:700;font-size:14px;color:" + NAVY + ";"); add(imp, "div", "Cole o FAQ do artigo: cada linha que termina com ponto de interroga" + U(231) + U(227) + "o vira uma pergunta, e as linhas seguintes viram a resposta.", "font-size:12.5px;color:#475569;margin:8px 0 6px;line-height:1.45;"); var ta = add(imp, "textarea", "", INP + "min-height:110px;resize:vertical;line-height:1.45;"); ta.id = PFX + "f-paste"; ta.setAttribute("aria-label", "Perguntas e respostas para importar"); var ib = btn(add(imp, "div", "", "margin-top:8px;"), "Importar", false); ib.addEventListener("click", function () { var r = importFaq(ta.value); if (r.length) { st.faq = r; faqRows(); update(); ta.value = ""; imp.open = false; } else { ta.setAttribute("style", INP + "min-height:110px;resize:vertical;line-height:1.45;border-color:#b42318;"); } }); var rb = add(p, "div", ""); rb.id = PFX + "f-rows"; faqRows(); var fa = btn(add(p, "div", "", "margin-top:8px;"), "+ Adicionar pergunta", false); fa.addEventListener("click", function () { st.faq.push({q: "", a: ""}); faqRows(); update(); }); } var TABS = [["local", "Empresa local"], ["org", "Organiza" + U(231) + U(227) + "o"], ["art", "Artigo"], ["faq", "FAQ"]]; function tabStyle(on) { return "flex:1 1 120px;padding:9px 12px;border:1px solid " + NAVY + ";border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;margin:0;line-height:1.3;background:" + (on ? NAVY : "#ffffff") + ";color:" + (on ? "#ffffff" : NAVY) + ";"; } function setTab(t) { st.tab = t; for (var i = 0; i !== TABS.length; i++) { var on = TABS[i][0] === t; var b = el("t-" + TABS[i][0]); b.setAttribute("style", tabStyle(on)); b.setAttribute("aria-pressed", on ? "true" : "false"); el("p-" + TABS[i][0]).style.display = on ? "block" : "none"; } update(); } add(root0, "div", "Gerador de dados estruturados", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Escolha o tipo, preencha o formul" + U(225) + "rio e copie o c" + U(243) + "digo JSON-LD pronto para colar no site. O gerador confere os campos que o Google pede e avisa o que falta.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); var tb = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;"); for (var t0 = 0; t0 !== TABS.length; t0++) { var tbtn = add(tb, "button", TABS[t0][1], tabStyle(t0 === 0)); tbtn.type = "button"; tbtn.id = PFX + "t-" + TABS[t0][0]; tbtn.setAttribute("data-t", TABS[t0][0]); tbtn.addEventListener("click", function () { setTab(this.getAttribute("data-t")); }); } var panels = add(root0, "div", "", "margin-top:4px;"); var BUILD = {local: buildLocal, org: buildOrg, art: buildArt, faq: buildFaq}; for (var t1 = 0; t1 !== TABS.length; t1++) { var pn = add(panels, "div", "", t1 === 0 ? "" : "display:none;"); pn.id = PFX + "p-" + TABS[t1][0]; BUILD[TABS[t1][0]](pn); } var nt = add(root0, "div", "", "margin-top:12px;"); nt.id = PFX + "notes"; nt.setAttribute("aria-live", "polite"); var wt = add(root0, "div", "Preencha os campos marcados acima para gerar o c" + U(243) + "digo.", "display:none;margin-top:12px;font-size:14px;color:#475569;"); wt.id = PFX + "wait"; var out0 = add(root0, "div", "", "display:none;"); out0.id = PFX + "out"; add(out0, "div", "C" + U(243) + "digo para o site", "font-weight:800;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:18px 0 8px;"); var pre = add(out0, "pre", "", "margin:0;background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:10px 12px;font-size:12.5px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere;color:#0F172A;max-height:420px;overflow:auto;" + MONO); pre.id = PFX + "code"; var bt = add(out0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;align-items:center;"); var cp = btn(bt, "Copiar c" + U(243) + "digo", true); cp.id = PFX + "copy"; cp.addEventListener("click", function () { var txt = el("code").textContent; function done() { cp.textContent = "Copiado"; setTimeout(function () { cp.textContent = "Copiar c" + U(243) + "digo"; }, 1500); } function manual() { cp.textContent = "Selecione e copie"; } if (navigator.clipboard ? navigator.clipboard.writeText : false) { navigator.clipboard.writeText(txt).then(done, manual); } else { manual(); } }); var a1 = add(bt, "a", "Testar no Google", "display:inline-block;padding:6px 12px;border:1px solid " + NAVY + ";border-radius:7px;background:#ffffff;color:" + NAVY + ";font-size:13px;font-weight:700;text-decoration:none;line-height:1.3;"); a1.href = RRT; a1.target = "_blank"; a1.rel = "noopener"; var a2 = add(bt, "a", "Validar no Schema.org", "display:inline-block;padding:6px 12px;border:1px solid " + NAVY + ";border-radius:7px;background:#ffffff;color:" + NAVY + ";font-size:13px;font-weight:700;text-decoration:none;line-height:1.3;"); a2.href = SMV; a2.target = "_blank"; a2.rel = "noopener"; add(out0, "p", "No teste do Google, escolha a op" + U(231) + U(227) + "o C" + U(243) + "digo e cole o que voc" + U(234) + " copiou. No WordPress, cole o c" + U(243) + "digo em um bloco HTML personalizado da p" + U(225) + "gina que ele descreve.", "margin:10px 0 0;font-size:13.5px;color:#334155;line-height:1.5;"); add(root0, "p", "Tudo acontece no seu navegador: nada do que voc" + U(234) + " digita " + U(233) + " enviado para outro servidor.", "margin:16px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); update(); })();</script>



<h2 class="wp-block-heading">O que são dados estruturados</h2>



<p class="wp-block-paragraph">O Google lê o texto das páginas, mas nem sempre tem certeza do que cada informação significa. Os dados estruturados resolvem isso: em vez de deixar o Google deduzir que “Rua das Flores, 123” é um endereço, o código diz isso de forma explícita, com um vocabulário padrão.</p>



<p class="wp-block-paragraph">Esse vocabulário é o <a href="https://schema.org/" data-wpel-link="external" target="_blank" rel="external noopener">schema.org</a>, fundado por Google, Microsoft, Yahoo e Yandex. Ele define tipos, como empresa local, artigo e produto, e as propriedades de cada um, como nome, endereço e horário. Por isso, muita gente chama os dados estruturados simplesmente de schema. Eles fazem parte do lado técnico do <a href="https://www.homehost.com.br/blog/seo/o-que-e-seo/" data-wpel-link="internal" target="_self">SEO</a>, junto com o título, a meta descrição e a velocidade do site.</p>



<p class="wp-block-paragraph">O código pode ser escrito em três formatos: JSON-LD, Microdata e RDFa. O Google aceita os três, mas recomenda o JSON-LD, porque ele fica em um bloco separado e não mexe no HTML da página. É o formato que o gerador usa:</p>



<pre class="wp-block-code"><code>&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "Bakery",
  "name": "Padaria da João",
  "telephone": "+55 11 3333-4444"
}
&lt;/script&gt;</code></pre>



<p class="wp-block-paragraph">O Google não promete uma posição melhor por causa dos dados estruturados. O ganho está em ser entendido corretamente e, em alguns tipos, em aparecer na busca com mais informações. Mesmo com o código perfeito, o Google não garante que esses destaques apareçam, segundo as <a href="https://developers.google.com/search/docs/appearance/structured-data/sd-policies" data-wpel-link="external" target="_blank" rel="external noopener">diretrizes gerais de dados estruturados</a>.</p>



<h2 class="wp-block-heading">Os tipos que o gerador cria</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Tipo</th><th>O que informa</th><th>Onde colocar</th></tr></thead><tbody><tr><td>Empresa local</td><td>Nome, endereço, telefone, horário, coordenadas</td><td>Página inicial ou página de contato</td></tr><tr><td>Organização</td><td>Logo, site, redes sociais, contato, CNPJ</td><td>Página inicial ou página Quem somos</td></tr><tr><td>Artigo</td><td>Título, imagens, datas de publicação e de atualização, autor</td><td>Em cada artigo</td></tr><tr><td>FAQ</td><td>Perguntas e respostas</td><td>Na página que tem o FAQ visível</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tipos-de-dados-estruturados-777x1024.png" alt="Infográfico com os quatro tipos de dados estruturados, empresa local, organização, artigo e FAQ, e o que cada um informa" class="wp-image-18606" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tipos-de-dados-estruturados-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tipos-de-dados-estruturados-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tipos-de-dados-estruturados-768x1013.png 768w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/tipos-de-dados-estruturados.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<h3 class="wp-block-heading">Empresa local</h3>



<p class="wp-block-paragraph">É o tipo de quem atende em um endereço físico: loja, restaurante, consultório, escritório. O Google exige só o nome e o endereço, mas recomenda também o telefone com DDD, o site, o horário de funcionamento e as coordenadas, com pelo menos cinco casas decimais. O gerador tem uma lista de tipos específicos, como padaria, dentista e oficina mecânica, porque o Google pede que se use o tipo mais específico possível.</p>



<p class="wp-block-paragraph">Use os mesmos nome, endereço e telefone do Perfil da Empresa no Google. Dados diferentes em cada lugar confundem o Google e o cliente.</p>



<h3 class="wp-block-heading">Organização</h3>



<p class="wp-block-paragraph">Serve para qualquer empresa, inclusive as que só existem on-line. Nenhum campo é obrigatório, mas o logo, o site e os perfis nas redes sociais ajudam o Google a escolher o logo e os dados que aparecem nos resultados e no painel da empresa. O logo precisa ter pelo menos 112 × 112 px e ficar bem em fundo branco. O código vai só na página inicial ou na página Quem somos, e não em todas as páginas.</p>



<h3 class="wp-block-heading">Artigo</h3>



<p class="wp-block-paragraph">Diz ao Google qual é o título, quais são as imagens, quem escreveu e quando o texto foi publicado e atualizado. Para o autor, o Google pede só o nome da pessoa, sem cargo nem empresa, e um link para o perfil dela. As datas devem incluir o fuso horário: o gerador acrescenta o de Brasília, ou o que você escolher.</p>



<h3 class="wp-block-heading">FAQ</h3>



<p class="wp-block-paragraph">Marca as perguntas e respostas da página. Em maio de 2026, o Google deixou de mostrar o resultado com perguntas frequentes, que desde 2023 já aparecia só para sites de governo e de saúde, e em junho tirou do ar a documentação do recurso, segundo o <a href="https://developers.google.com/search/updates" data-wpel-link="external" target="_blank" rel="external noopener">registro de atualizações do Google Search</a>. O código FAQPage continua válido no schema.org e não há indicação de que ele prejudique o site, mas ele não gera mais destaque na busca do Google.</p>



<h2 class="wp-block-heading">Como colocar o código no site</h2>



<h3 class="wp-block-heading">No WordPress</h3>



<p class="wp-block-paragraph">Abra a página que o código descreve, adicione um bloco <strong>HTML personalizado</strong> e cole o código. O código da empresa local ou da organização vai na página inicial ou na página de contato; o do artigo, no próprio artigo.</p>



<p class="wp-block-paragraph">Antes, confira o que o seu plugin de SEO já gera. O Yoast e o Rank Math normalmente criam sozinhos o schema da organização, do site e de cada artigo. Nesses casos, use o gerador para o que o plugin não cobre, como a empresa local, para não ter dois códigos dizendo coisas diferentes sobre a mesma página. Se ainda não usa um plugin de SEO, veja por que o <a href="https://www.homehost.com.br/blog/seo/seo-marketing-20-dicas-subir-no-google/" data-wpel-link="internal" target="_self">Yoast vale a pena</a>.</p>



<h3 class="wp-block-heading">Em um site em HTML</h3>



<p class="wp-block-paragraph">Cole o código dentro do <code>&lt;head&gt;</code> ou do <code>&lt;body&gt;</code> da página. O Google lê o JSON-LD nas duas posições. Se o site tem várias páginas, coloque cada código só na página a que ele se refere.</p>



<h2 class="wp-block-heading">Como testar o código</h2>



<ul class="wp-block-list">
<li><strong>Teste de pesquisa aprimorada:</strong> a <a href="https://search.google.com/test/rich-results" data-wpel-link="external" target="_blank" rel="external noopener">ferramenta do Google</a> aceita o endereço da página ou o código colado e mostra os erros e os recursos para os quais a página está qualificada.</li>



<li><strong>Validador do Schema.org:</strong> o <a href="https://validator.schema.org/" data-wpel-link="external" target="_blank" rel="external noopener">validador</a> confere qualquer tipo do vocabulário. É o caminho para testar o FAQ, que deixou de ser um recurso do Google.</li>



<li><strong>Search Console:</strong> depois que o código está no ar, a Inspeção de URL e os relatórios de melhorias mostram se o Google encontrou erros nas páginas.</li>
</ul>



<h2 class="wp-block-heading">Erros comuns nos dados estruturados</h2>



<ul class="wp-block-list">
<li><strong>Marcar o que não aparece na página.</strong> O Google não aceita dados estruturados de conteúdo escondido. Se o código diz que a empresa abre aos sábados, isso precisa estar escrito no site.</li>



<li><strong>Ter dois códigos para a mesma coisa.</strong> É o caso típico de quem cola um schema de artigo em um site que já tem o Yoast fazendo o mesmo.</li>



<li><strong>Usar imagens que o Google não consegue acessar.</strong> O endereço da imagem precisa funcionar e não pode estar <a href="https://www.homehost.com.br/blog/seo/robots-txt/" data-wpel-link="internal" target="_self">bloqueado no robots.txt</a>.</li>



<li><strong>Deixar as datas sem fuso horário.</strong> Sem ele, o Google usa o fuso dele, e a data pode mudar de dia.</li>



<li><strong>Escolher o tipo genérico.</strong> Se existe um tipo para o seu negócio, como restaurante ou dentista, use ele em vez de empresa local.</li>



<li><strong>Colocar cargo no nome do autor.</strong> “Dra. Ana Lima, editora-chefe” deve virar só “Ana Lima”.</li>
</ul>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Coloque seu site no ar na Homehost</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">Hospedagem com servidores LiteSpeed e certificado SSL grátis, para o seu site carregar rápido e com o cadeado de segurança.</p>
<a href="https://www.homehost.com.br/hospedagem-de-sites/" style="display:inline-block;margin:0 0 6px;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Ver planos de hospedagem</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>O que são dados estruturados?</strong><br>São um código que descreve o conteúdo da página em um formato padrão, o schema.org, para que o Google e outros buscadores entendam o que cada informação significa. Eles dizem, por exemplo, que um texto é um endereço, que um número é o telefone ou que uma data é a da publicação de um artigo.</p>



<p class="wp-block-paragraph"><strong>Dados estruturados melhoram a posição no Google?</strong><br>O Google não promete isso. O que os dados estruturados fazem é ajudar o Google a entender a página e, em alguns tipos, permitir que ela apareça com mais informações nos resultados. Mesmo com o código certo, o Google não garante esses destaques.</p>



<p class="wp-block-paragraph"><strong>O schema FAQ ainda funciona no Google?</strong><br>O código continua válido, mas o Google deixou de mostrar o resultado com perguntas frequentes em maio de 2026. Antes disso, desde 2023, ele já aparecia só para sites de governo e de saúde. Vale manter o FAQ na página se ele ajuda o leitor.</p>



<p class="wp-block-paragraph"><strong>Qual formato usar: JSON-LD, Microdata ou RDFa?</strong><br>JSON-LD. O Google aceita os três, mas recomenda o JSON-LD, porque ele fica em um bloco separado do HTML e é mais fácil de criar e de corrigir. É o formato que o gerador desta página usa.</p>



<p class="wp-block-paragraph"><strong>Onde colocar o código JSON-LD?</strong><br>Na página que ele descreve, dentro do head ou do body. No WordPress, use um bloco HTML personalizado. O código da organização vai só na página inicial ou na página Quem somos, e o de cada artigo, no próprio artigo.</p>



<p class="wp-block-paragraph"><strong>Como saber se o site já tem dados estruturados?</strong><br>Teste o endereço da página no Teste de pesquisa aprimorada do Google ou no validador do Schema.org. Os dois mostram todos os códigos que encontram. Se o site usa Yoast ou Rank Math, é provável que já exista o schema da organização e dos artigos.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "O que são dados estruturados?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "São um código que descreve o conteúdo da página em um formato padrão, o schema.org, para que o Google e outros buscadores entendam o que cada informação significa. Eles dizem, por exemplo, que um texto é um endereço, que um número é o telefone ou que uma data é a da publicação de um artigo."
      }
    },
    {
      "@type": "Question",
      "name": "Dados estruturados melhoram a posição no Google?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "O Google não promete isso. O que os dados estruturados fazem é ajudar o Google a entender a página e, em alguns tipos, permitir que ela apareça com mais informações nos resultados. Mesmo com o código certo, o Google não garante esses destaques."
      }
    },
    {
      "@type": "Question",
      "name": "O schema FAQ ainda funciona no Google?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "O código continua válido, mas o Google deixou de mostrar o resultado com perguntas frequentes em maio de 2026. Antes disso, desde 2023, ele já aparecia só para sites de governo e de saúde. Vale manter o FAQ na página se ele ajuda o leitor."
      }
    },
    {
      "@type": "Question",
      "name": "Qual formato usar: JSON-LD, Microdata ou RDFa?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "JSON-LD. O Google aceita os três, mas recomenda o JSON-LD, porque ele fica em um bloco separado do HTML e é mais fácil de criar e de corrigir. É o formato que o gerador desta página usa."
      }
    },
    {
      "@type": "Question",
      "name": "Onde colocar o código JSON-LD?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Na página que ele descreve, dentro do head ou do body. No WordPress, use um bloco HTML personalizado. O código da organização vai só na página inicial ou na página Quem somos, e o de cada artigo, no próprio artigo."
      }
    },
    {
      "@type": "Question",
      "name": "Como saber se o site já tem dados estruturados?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Teste o endereço da página no Teste de pesquisa aprimorada do Google ou no validador do Schema.org. Os dois mostram todos os códigos que encontram. Se o site usa Yoast ou Rank Math, é provável que já exista o schema da organização e dos artigos."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Dados estruturados são a forma de dizer ao Google, sem margem para dúvida, quem é a empresa, onde ela fica, quando abre e quem escreveu cada artigo. O gerador cria esse código a partir de um formulário e aponta o que falta. Depois de colar o código no site, teste a página e confira se o plugin de SEO não está gerando o mesmo schema. E lembre que o FAQ continua útil para o leitor, mas não gera mais destaque no Google.</p>
<p>O post <a href="https://www.homehost.com.br/blog/seo/dados-estruturados/" data-wpel-link="internal" target="_self">Dados estruturados: o que são e gerador de schema</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18604</post-id>	</item>
		<item>
		<title>Domínio com acento: regras e conversor Punycode</title>
		<link>https://www.homehost.com.br/blog/dominio/dominio-com-acento/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Mon, 02 Nov 2026 10:42:35 +0000</pubDate>
				<category><![CDATA[Domínio]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18578</guid>

					<description><![CDATA[<p>Um domínio pode ter acento e cedilha: açaí.com.br e padariadajoão.com.br são nomes válidos no .br. Por trás deles, o DNS guarda uma versão sem nenhum acento, que começa com xn-- e se chama Punycode. O conversor abaixo mostra as duas formas de qualquer nome, confere as regras do Registro.br e consulta se as versões com [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/dominio-com-acento/" data-wpel-link="internal" target="_self">Domínio com acento: regras e conversor Punycode</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Um domínio pode ter acento e cedilha: açaí.com.br e padariadajoão.com.br são nomes válidos no .br. Por trás deles, o DNS guarda uma versão sem nenhum acento, que começa com <code>xn--</code> e se chama Punycode. O conversor abaixo mostra as duas formas de qualquer nome, confere as regras do Registro.br e consulta se as versões com e sem acento já estão registradas.</strong></p>



<p class="wp-block-paragraph">O nome com acento abre normalmente no navegador, mas complica o e-mail, a hora de ditar o endereço e qualquer sistema que não aceite acentos. Por isso, na maioria dos casos, o melhor é usar a versão sem acento como endereço principal. As seções abaixo explicam por quê.</p>



<h2 class="wp-block-heading">Converta um domínio com acento</h2>



<p class="wp-block-paragraph">Digite o nome com acento, cole um endereço que começa com <code>xn--</code> ou escreva um e-mail completo. Se você digitar só o nome, sem a extensão, o conversor usa .com.br. A conversão roda no seu navegador e nada do que você digita fica salvo.</p>



<div class="hh-idn" id="hh-idn" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-idn"); if (!root0) { return; } var S2 = "/" + "/"; var AMP = String.fromCharCode(38); var PFX = "hh-idn-"; function U(n) { return String.fromCharCode(n); } var ELL = U(8230); var GURL = "https:" + S2 + "dns.google/resolve?name="; var CURL = "https:" + S2 + "cloudflare-dns.com/dns-query?name="; var HH = "https:" + S2 + "www.homehost.com.br/"; var REG = HH + "registro-de-dominio/"; var LDOM = HH + "blog/dominio/nome-de-dominio/"; var MULTI = ["co.uk", "com.ar", "com.pt", "com.mx", "com.au", "co.jp", "com.es", "com.co", "com.uy", "com.py"]; var BRACC = U(224) + U(225) + U(226) + U(227) + U(233) + U(234) + U(237) + U(243) + U(244) + U(245) + U(250) + U(252) + U(231); var BRACCL = []; for (var q0 = 0; q0 !== BRACC.length; q0++) { BRACCL.push(BRACC.charAt(q0)); } var LDH = "abcdefghijklmnopqrstuvwxyz0123456789-"; var NAVY = "#0b3d91"; var COL = {ok: ["#15803d", "#e8f5ec", U(10004)], warn: ["#b45309", "#fff4e5", U(9888)], err: ["#b42318", "#fdecec", U(10006)], info: ["#1d4ed8", "#eef3ff", U(8505)]}; var ST = {taken: ["#b42318", "#fdecec", U(10006) + " Registrado"], likely: ["#15803d", "#e8f5ec", U(10004) + " Provavelmente livre"], unknown: ["#475569", "#eef1f5", "? Sem resposta"]}; var RANK = {err: 0, warn: 1, ok: 2, info: 3}; var LINK = "color:#1d4ed8;font-weight:700;"; var MONO = "font-family:Consolas,Menlo,monospace;"; var gen = 0; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function ge(a, b) { return Math.max(a, b) === a; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function chars(s) { return Array.from ? Array.from(s) : s.split(""); } function isAscii(s) { for (var i = 0; i !== s.length; i++) { if (gt(s.charCodeAt(i), 127)) { return false; } } return true; } function onlyDigits(s) { for (var i = 0; i !== s.length; i++) { if (!has("0123456789", s.charAt(i))) { return false; } } return s.length !== 0; } var BASE = 36; var TMIN = 1; var TMAX = 26; function adapt(delta, num, first) { delta = first ? Math.floor(delta / 700) : Math.floor(delta / 2); delta += Math.floor(delta / num); var k = 0; while (gt(delta, Math.floor(((BASE - TMIN) * TMAX) / 2))) { delta = Math.floor(delta / (BASE - TMIN)); k += BASE; } return k + Math.floor(((BASE - TMIN + 1) * delta) / (delta + 38)); } function digitOf(cp) { if (ge(cp, 48) ? !gt(cp, 57) : false) { return cp - 22; } if (ge(cp, 65) ? !gt(cp, 90) : false) { return cp - 65; } if (ge(cp, 97) ? !gt(cp, 122) : false) { return cp - 97; } return BASE; } function decodeLabel(s) { var out = []; var b = s.lastIndexOf("-"); var j; if (gt(b, 0)) { for (j = 0; j !== b; j++) { var bc = s.charCodeAt(j); if (gt(bc, 127)) { return null; } out.push(bc); } } var idx = gt(b, 0) ? b + 1 : 0; var n = 128; var i = 0; var bias = 72; var len = s.length; var guard = 0; while (lt(idx, len)) { var oldi = i; var w = 1; for (var k = BASE; ; k += BASE) { guard++; if (gt(guard, 10000)) { return null; } if (!lt(idx, len)) { return null; } var dg = digitOf(s.charCodeAt(idx)); idx++; if (ge(dg, BASE)) { return null; } i += dg * w; var t = !gt(k, bias) ? TMIN : (ge(k, bias + TMAX) ? TMAX : k - bias); if (lt(dg, t)) { break; } w = w * (BASE - t); } bias = adapt(i - oldi, out.length + 1, oldi === 0); n += Math.floor(i / (out.length + 1)); i = i % (out.length + 1); if (gt(n, 1114111)) { return null; } out.splice(i, 0, n); i++; } var r = ""; for (j = 0; j !== out.length; j++) { r += String.fromCodePoint ? String.fromCodePoint(out[j]) : U(out[j]); } return r; } function toUni(host) { var p = host.split("."); for (var i = 0; i !== p.length; i++) { if (p[i].indexOf("xn--") === 0) { var d = decodeLabel(p[i].slice(4)); if (d === null ? true : d === "") { return null; } p[i] = d; } } return p.join("."); } function toAscii(host) { try { var u = new URL("http:" + S2 + host + "/"); return u.hostname; } catch (e) { return null; } } function fold(s) { var map = {"223": "ss", "230": "ae", "248": "o", "339": "oe", "273": "d", "322": "l", "254": "th", "240": "d", "305": "i"}; var n = s.normalize ? s.normalize("NFD") : s; var out = ""; for (var i = 0; i !== n.length; i++) { var c = n.charCodeAt(i); if (ge(c, 768) ? lt(c, 880) : false) { continue; } if (map[String(c)]) { out += map[String(c)]; continue; } out += n.charAt(i); } return out; } function nfc(s) { return s.normalize ? s.normalize("NFC") : s; } function isBr(t) { return t === "br" ? true : t.slice(-3) === ".br"; } function split(host) { var p = host.split("."); if (lt(p.length, 2)) { return null; } for (var e = 0; e !== p.length; e++) { if (p[e] === "") { return null; } } var last2 = p.slice(-2).join("."); var tld = p[p.length - 1]; var li = p.length - 2; var two = tld === "br" ? true : MULTI.indexOf(last2) !== -1; if (gt(p.length, 2) ? two : false) { tld = last2; li = p.length - 3; } return {label: p[li], tld: tld, sub: p.slice(0, li).join("."), apex: p.slice(li).join(".")}; } function eqName(lab) { return fold(lab).split("-").join(""); } function parse(raw) { var s = String(or(raw, "")).trim(); if (!s) { return {err: "Digite um dom" + U(237) + "nio, como padariadajo" + U(227) + "o.com.br."}; } var at = s.lastIndexOf("@"); var mailbox = ""; if (at !== -1) { mailbox = s.slice(0, at).trim(); s = s.slice(at + 1).trim(); } var cut = s.indexOf(":" + S2); if (cut !== -1) { s = s.slice(cut + 3); } s = s.split("/")[0].split("?")[0].split("#")[0]; var col = s.indexOf(":"); if (col !== -1) { s = s.slice(0, col); } s = nfc(s.toLowerCase()).split(U(12290)).join(".").split(U(65294)).join("."); while (s.charAt(s.length - 1) === ".") { s = s.slice(0, -1); } var added = false; var joined = false; if (s.indexOf(".") === -1) { if (has(s, " ")) { s = s.split(" ").join(""); joined = true; } s = s + ".com.br"; added = true; } if (has(s, " ")) { return {err: "Um dom" + U(237) + "nio n" + U(227) + "o pode ter espa" + U(231) + "os. Junte as palavras ou use h" + U(237) + "fen, como padaria-da-joao.com.br."}; } var orig = toUni(s); if (orig === null) { return {err: "A parte que come" + U(231) + "a com xn-- n" + U(227) + "o " + U(233) + " um Punycode v" + U(225) + "lido. Confira se foi copiada inteira."}; } orig = nfc(orig); var asc = toAscii(orig); var uni = asc ? toUni(asc) : null; if (uni === null) { return {err: "Esse nome tem caracteres que um dom" + U(237) + "nio n" + U(227) + "o aceita. Use letras, n" + U(250) + "meros, h" + U(237) + "fen e acentos."}; } var parts = split(uni); var aparts = split(asc); if (parts ? !aparts : true) { return {err: "Digite o dom" + U(237) + "nio completo, com a extens" + U(227) + "o, como padariadajo" + U(227) + "o.com.br."}; } return {uni: uni, asc: asc, orig: orig, p: parts, ap: aparts, added: added, joined: joined, mailbox: mailbox, idn: !isAscii(parts.apex)}; } function rules(r) { var N = []; var lab = r.p.label; var br = isBr(r.p.tld); var cl = chars(lab); var i; if (r.p.sub) { N.push(["info", "Considerei " + r.p.apex + " e deixei de fora " + r.p.sub + ", que " + U(233) + " um subdom" + U(237) + "nio."]); } if (r.added) { N.push(["info", r.joined ? "Juntei as palavras e, como n" + U(227) + "o havia extens" + U(227) + "o, usei .com.br." : "Sem extens" + U(227) + "o, usei .com.br."]); } if (r.uni !== r.orig) { N.push(["warn", "Na convers" + U(227) + "o, o nome foi ajustado para " + r.uni + ". Confira se " + U(233) + " isso mesmo."]); } if (lab.charAt(0) === "-" ? true : lab.charAt(lab.length - 1) === "-") { N.push(["err", "O nome n" + U(227) + "o pode come" + U(231) + "ar nem terminar com h" + U(237) + "fen."]); } if (gt(r.ap.label.length, 63)) { N.push(["err", "Convertido para Punycode, o nome fica com " + r.ap.label.length + " caracteres. O limite t" + U(233) + "cnico de cada parte de um dom" + U(237) + "nio " + U(233) + " 63."]); } if (br) { var bad = []; for (i = 0; i !== cl.length; i++) { var c = cl[i]; if (has(LDH, c)) { continue; } if (BRACCL.indexOf(c) !== -1) { continue; } if (bad.indexOf(c) === -1) { bad.push(c); } } if (bad.length) { N.push(["err", "O .br n" + U(227) + "o aceita " + (bad.length === 1 ? "o caractere " : "os caracteres ") + bad.join(" ") + ". Al" + U(233) + "m de letras, n" + U(250) + "meros e h" + U(237) + "fen, ele aceita s" + U(243) + " " + BRACCL.join(" ") + "."]); } if (lt(cl.length, 2) ? true : gt(cl.length, 26)) { N.push(["err", "No .br, o nome precisa ter de 2 a 26 caracteres. Este tem " + cl.length + "."]); } if (onlyDigits(lab)) { N.push(["err", "No .br, o nome n" + U(227) + "o pode ter s" + U(243) + " n" + U(250) + "meros."]); } var eq = eqName(lab); if (eq !== lab ? !bad.length : false) { N.push(["info", "Regra de equival" + U(234) + "ncia do .br: " + lab + " equivale a " + eq + ", sem acentos e sem h" + U(237) + "fen. Na mesma extens" + U(227) + "o, nomes equivalentes s" + U(243) + " podem ser registrados pelo mesmo titular."]); } } else { var bad2 = []; var al = chars(r.ap.label); for (i = 0; i !== al.length; i++) { if (!has(LDH, al[i])) { if (bad2.indexOf(al[i]) === -1) { bad2.push(al[i]); } } } if (bad2.length) { N.push(["err", "Um dom" + U(237) + "nio s" + U(243) + " aceita letras, n" + U(250) + "meros, h" + U(237) + "fen e acentos. Tire " + bad2.join(" ") + "."]); } if (r.idn) { N.push(["info", "Cada extens" + U(227) + "o tem a pr" + U(243) + "pria lista de caracteres aceitos. Confira se a extens" + U(227) + "o ." + r.p.tld + " aceita esses acentos antes de registrar."]); } } if (r.mailbox ? !isAscii(r.mailbox) : false) { N.push(["warn", "Acento antes do @ " + U(233) + " outra hist" + U(243) + "ria: s" + U(243) + " funciona entre servidores com suporte a e-mail internacionalizado (SMTPUTF8), e a maioria dos servi" + U(231) + "os n" + U(227) + "o cria caixas assim. Prefira letras sem acento antes do @."]); } return N; } function getJ(url, acc) { var ctl = window.AbortController ? new AbortController() : null; var opt = {credentials: "omit"}; if (acc) { opt.headers = {"accept": acc}; } if (ctl) { opt.signal = ctl.signal; } var tm = setTimeout(function () { if (ctl) { ctl.abort(); } }, 9000); return fetch(url, opt).then(function (res) { return res.json().then(function (j) { clearTimeout(tm); return {st: res.status, j: j}; }); }).catch(function () { clearTimeout(tm); return {st: -1, j: null}; }); } async function dnsCheck(d) { var qs = encodeURIComponent(d) + AMP + "type=NS"; var r = await getJ(GURL + qs, ""); if (r.st !== 200 ? true : !r.j) { r = await getJ(CURL + qs, "application/dns-json"); } if (r.st !== 200 ? true : !r.j) { return "unknown"; } if (r.j.Status === 3) { return "likely"; } if (r.j.Status === 0) { return "taken"; } return "unknown"; } function copyBtn(parent, text) { var btn = add(parent, "button", "Copiar", "flex:0 0 auto;padding:4px 12px;border:1px solid " + NAVY + ";background:#ffffff;color:" + NAVY + ";border-radius:6px;cursor:pointer;font-size:12.5px;font-weight:700;margin:0;line-height:1.4;"); btn.type = "button"; btn.addEventListener("click", function () { function done() { btn.textContent = "Copiado"; setTimeout(function () { btn.textContent = "Copiar"; }, 1500); } function manual() { btn.textContent = "Selecione e copie"; } if (navigator.clipboard ? navigator.clipboard.writeText : false) { navigator.clipboard.writeText(text).then(done, manual); } else { manual(); } }); } function rowOut(box, label, value, sub, first) { var w = add(box, "div", "", "padding:11px 0;" + (first ? "" : "border-top:1px solid #eef1f5;")); add(w, "div", label, "font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin-bottom:4px;"); var line = add(w, "div", "", "display:flex;gap:8px;align-items:center;flex-wrap:wrap;"); add(line, "div", value, "flex:1 1 200px;min-width:0;font-size:" + (lt(root0.clientWidth, 480) ? "16px" : "18px") + ";font-weight:700;color:#0F172A;overflow-wrap:anywhere;" + MONO); copyBtn(line, value); if (sub) { add(w, "div", sub, "font-size:13px;color:#475569;margin-top:4px;line-height:1.45;"); } } function notes(parent, arr) { arr = arr.slice().sort(function (a, b) { return RANK[a[0]] - RANK[b[0]]; }); for (var i = 0; i !== arr.length; i++) { var c = COL[arr[i][0]]; var d = add(parent, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:7px 10px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(arr[i][1] + (arr[i][2] ? " " : ""))); if (arr[i][2]) { add(d, "a", arr[i][3], LINK).setAttribute("href", arr[i][2]); } } } function badge(span, k) { var c = ST[k]; span.textContent = c[2]; span.setAttribute("style", "display:inline-block;padding:3px 10px;border-radius:999px;font-size:13px;font-weight:700;color:" + c[0] + ";background:" + c[1] + ";white-space:nowrap;"); } function stRow(box, name, asc, first) { var w = add(box, "div", "", "display:flex;justify-content:space-between;align-items:center;gap:6px 10px;flex-wrap:wrap;padding:9px 12px;" + (first ? "" : "border-top:1px solid #e2e8f0;")); var left = add(w, "div", "", "min-width:0;flex:1 1 200px;"); add(left, "div", name, "font-weight:700;color:#0F172A;font-size:15px;overflow-wrap:anywhere;" + MONO); if (asc !== name) { add(left, "div", asc, "font-size:12.5px;color:#64748b;overflow-wrap:anywhere;" + MONO); } var right = add(w, "div", "", "display:flex;align-items:center;gap:8px;flex-wrap:wrap;"); var sp = add(right, "span", ELL, "display:inline-block;padding:3px 10px;border-radius:999px;font-size:13px;font-weight:700;color:#475569;background:#eef1f5;"); return {badge: sp, right: right}; } async function run() { var my = gen + 1; gen = my; var out = el("out"); out.textContent = ""; el("st").textContent = ""; var r = parse(el("in").value); if (r.err) { el("st").textContent = r.err; return; } var N = rules(r); var blocked = false; for (var i = 0; i !== N.length; i++) { if (N[i][0] === "err") { blocked = true; } } var box = add(out, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:4px 14px;"); var plain = fold(r.p.apex); if (r.idn) { rowOut(box, "Com acento (como as pessoas veem)", r.p.apex, "Assim o endere" + U(231) + "o aparece na maioria dos navegadores.", true); rowOut(box, "Punycode (como o DNS l" + U(234) + ")", r.ap.apex, "Use essa forma onde o painel ou o sistema n" + U(227) + "o aceitar acentos: zona DNS, configura" + U(231) + U(227) + "o de servidor, certificado SSL.", false); rowOut(box, "Sem acento", plain, "A forma que todo mundo consegue digitar e ditar por telefone.", false); rowOut(box, "E-mail neste dom" + U(237) + "nio", or(r.mailbox, "contato") + "@" + r.ap.apex, "O endere" + U(231) + "o com o dom" + U(237) + "nio em Punycode. Em formul" + U(225) + "rios que recusam o acento depois do @, use essa forma.", false); } else { rowOut(box, "Dom" + U(237) + "nio", r.p.apex, "Esse nome n" + U(227) + "o tem acentos nem " + U(231) + ", ent" + U(227) + "o ele j" + U(225) + " est" + U(225) + " na forma que o DNS l" + U(234) + ". N" + U(227) + "o h" + U(225) + " o que converter.", true); } notes(out, N); if (blocked) { return; } var list = [[r.p.apex, r.ap.apex]]; if (r.idn) { var pla = toAscii(plain); if (pla ? pla !== r.ap.apex : false) { list.push([plain, pla]); } } add(out, "div", "Est" + U(225) + " registrado?", "font-weight:800;font-size:13px;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin:16px 0 6px;"); var sbox = add(out, "div", "", "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;overflow:hidden;"); var rows = []; for (var k = 0; k !== list.length; k++) { rows.push(stRow(sbox, list[k][0], list[k][1], k === 0)); } el("st").textContent = "Consultando o DNS" + ELL; var res = await Promise.all(list.map(function (x) { return dnsCheck(x[1]); })); if (my !== gen) { return; } el("st").textContent = ""; for (var m = 0; m !== res.length; m++) { badge(rows[m].badge, res[m]); var ctaRow = m === list.length - 1; if (ctaRow ? res[m] === "likely" : false) { var a = add(rows[m].right, "a", "Registrar", "display:inline-block;padding:5px 14px;background:" + NAVY + ";color:#ffffff;border-radius:8px;font-weight:700;font-size:13px;text-decoration:none;white-space:nowrap;"); a.setAttribute("href", REG); } } var N2 = []; var two = res.length === 2; if (two ? isBr(r.p.tld) : false) { if (res[0] === "likely" ? res[1] === "taken" : false) { N2.push(["warn", "A vers" + U(227) + "o sem acento j" + U(225) + " est" + U(225) + " registrada. Pela regra de equival" + U(234) + "ncia do .br, a vers" + U(227) + "o com acento s" + U(243) + " pode ser registrada pelo mesmo titular."]); } if (res[0] === "taken" ? res[1] === "likely" : false) { N2.push(["warn", "A vers" + U(227) + "o com acento j" + U(225) + " est" + U(225) + " registrada. Pela regra de equival" + U(234) + "ncia do .br, a vers" + U(227) + "o sem acento s" + U(243) + " pode ser registrada pelo mesmo titular."]); } } if (res.indexOf("likely") !== -1) { N2.push(["info", "Provavelmente livre quer dizer que o DNS n" + U(227) + "o tem registros para esse nome. A disponibilidade s" + U(243) + " " + U(233) + " confirmada na hora do registro."]); } if (res.indexOf("unknown") !== -1) { N2.push(["warn", "A consulta ao DNS n" + U(227) + "o respondeu. Tente de novo em um minuto."]); } if (r.idn) { var REC = "Recomenda" + U(231) + U(227) + "o: use a vers" + U(227) + "o sem acento como endere" + U(231) + "o principal e no e-mail. "; N2.push(["info", REC + (isBr(r.p.tld) ? "Registre tamb" + U(233) + "m a vers" + U(227) + "o com acento se quiser que quem a digita chegue ao site; no .br, a regra de equival" + U(234) + "ncia j" + U(225) + " impede que outra pessoa a registre." : "Em extens" + U(245) + "es como o .com, outra pessoa pode registrar a vers" + U(227) + "o com acento, ent" + U(227) + "o vale registrar as duas para proteger a marca."), LDOM, "Veja como escolher um bom nome"]); } notes(out, N2); } add(root0, "div", "Conversor de dom" + U(237) + "nio com acento", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Digite um dom" + U(237) + "nio com acento ou um endere" + U(231) + "o que come" + U(231) + "a com xn--. O conversor mostra o nome em Punycode e sem acento, confere as regras do .br e consulta se cada vers" + U(227) + "o j" + U(225) + " est" + U(225) + " registrada.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); var lab = add(root0, "label", "Dom" + U(237) + "nio", "display:block;font-weight:700;font-size:14px;color:" + NAVY + ";margin-bottom:4px;"); lab.setAttribute("for", PFX + "in"); var frow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;"); var inp = add(frow, "input", "", "flex:1 1 240px;min-width:0;width:auto;box-sizing:border-box;padding:9px 12px;border:1px solid #9aa7b8;border-radius:8px;font-size:16px;background:#ffffff;color:#0F172A;margin:0;"); inp.type = "text"; inp.id = PFX + "in"; inp.setAttribute("placeholder", "padariadajo" + U(227) + "o.com.br ou xn--..."); inp.setAttribute("autocomplete", "off"); inp.setAttribute("autocapitalize", "off"); inp.setAttribute("spellcheck", "false"); var go = add(frow, "button", "Converter", "flex:0 0 auto;padding:9px 20px;border:0;border-radius:8px;background:" + NAVY + ";color:#ffffff;font-size:15px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;"); go.type = "button"; go.id = PFX + "go"; var exl = add(root0, "div", "", "margin-top:8px;font-size:13px;color:#475569;line-height:2;"); exl.appendChild(document.createTextNode("Exemplos: ")); var EXS = ["a" + U(231) + "a" + U(237) + ".com.br", "padariadajo" + U(227) + "o.com.br", "xn--caf-dma.com"]; for (var x0 = 0; x0 !== EXS.length; x0++) { var eb = add(exl, "button", EXS[x0], "margin:0 4px 0 0;padding:2px 8px;border:1px solid #c9d2dd;border-radius:999px;background:#ffffff;color:#1d4ed8;font-size:13px;font-weight:700;cursor:pointer;line-height:1.5;" + MONO); eb.type = "button"; eb.setAttribute("data-d", EXS[x0]); eb.addEventListener("click", function () { inp.value = this.getAttribute("data-d"); run(); }); } var st0 = add(root0, "div", "", "margin-top:12px;font-size:14px;color:#b45309;line-height:1.5;"); st0.id = PFX + "st"; st0.setAttribute("aria-live", "polite"); var out0 = add(root0, "div", "", "margin-top:4px;"); out0.id = PFX + "out"; out0.setAttribute("aria-live", "polite"); add(root0, "p", "A convers" + U(227) + "o acontece no seu navegador, pelo padr" + U(227) + "o IDNA, o mesmo que os navegadores usam para abrir esses endere" + U(231) + "os. A consulta de registro usa o DNS p" + U(250) + "blico do Google, com o da Cloudflare como reserva. Nada do que voc" + U(234) + " digita fica salvo.", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); go.addEventListener("click", function () { run(); }); inp.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); run(); } }); })();</script>



<h2 class="wp-block-heading">O que é um domínio com acento (IDN)</h2>



<p class="wp-block-paragraph">Quando o DNS foi criado, um nome de domínio só podia ter letras de a a z, números e hífen. Isso basta para o inglês, mas deixa de fora os acentos do português, o ñ do espanhol e alfabetos inteiros, como o árabe, o chinês e o russo.</p>



<p class="wp-block-paragraph">A solução veio com os domínios internacionalizados, os IDNs (do inglês Internationalized Domain Names). Em vez de mudar o DNS, que continua aceitando só aqueles caracteres, o padrão IDNA faz o navegador converter o nome antes de consultá-lo. Você digita açaí.com.br, o navegador pergunta ao DNS por <code>xn--aa-4iaz.com.br</code> e mostra o endereço com acento na barra.</p>



<p class="wp-block-paragraph">Ou seja, todo domínio com acento tem duas formas: a que as pessoas leem e a que os servidores usam. As duas são o mesmo domínio. Já a versão sem acento, acai.com.br, é outro domínio, com registro próprio.</p>



<h2 class="wp-block-heading">Como funciona o Punycode</h2>



<p class="wp-block-paragraph">O Punycode é a regra que transforma um nome com acento em um nome só com letras sem acento, números e hífen. Ele foi definido em 2003, na RFC 3492, e funciona em três passos:</p>



<ol class="wp-block-list">
<li>As letras sem acento ficam como estão, na mesma ordem.</li>



<li>As letras com acento saem do lugar e são codificadas em um trecho no fim do nome, depois do último hífen. Esse trecho guarda qual é cada letra e em que posição ela entra.</li>



<li>Na frente de tudo entra o prefixo <code>xn--</code>, que avisa que aquele nome é um IDN.</li>
</ol>



<p class="wp-block-paragraph">Em café.com, sobram as letras “caf”, e o “é” vira o trecho “dma”: <code>xn--caf-dma.com</code>. Em açaí.com.br, sobram os dois “a”, e o “ç” e o “í” viram “4iaz”: <code>xn--aa-4iaz.com.br</code>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Com acento</th><th>Punycode</th><th>Sem acento</th></tr></thead><tbody><tr><td>café.com</td><td><code>xn--caf-dma.com</code></td><td>cafe.com</td></tr><tr><td>pão.com.br</td><td><code>xn--po-sia.com.br</code></td><td>pao.com.br</td></tr><tr><td>açaí.com.br</td><td><code>xn--aa-4iaz.com.br</code></td><td>acai.com.br</td></tr><tr><td>coração.com.br</td><td><code>xn--corao-dra1a.com.br</code></td><td>coracao.com.br</td></tr><tr><td>padariadajoão.com.br</td><td><code>xn--padariadajoo-dcb.com.br</code></td><td>padariadajoao.com.br</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A conversão é feita em cada parte do domínio separadamente. Por isso o .com.br continua igual e só o nome muda. Maiúsculas não fazem diferença: AÇAÍ.com.br e açaí.com.br dão o mesmo resultado.</p>



<p class="wp-block-paragraph">O caminho inverso também funciona. Se um sistema mostrar um endereço começando com <code>xn--</code>, cole no conversor para ver qual nome ele representa.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-como-um-dominio-com-acento-vira-punycode-777x1024.png" alt="Como um domínio com acento vira Punycode - Infográfico" class="wp-image-18580" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-como-um-dominio-com-acento-vira-punycode-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-como-um-dominio-com-acento-vira-punycode-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-como-um-dominio-com-acento-vira-punycode-767x1012.png 767w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-como-um-dominio-com-acento-vira-punycode.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<h2 class="wp-block-heading">As regras do .br para domínios com acento</h2>



<p class="wp-block-paragraph">No .br, as regras vêm da <a href="https://cgi.br/resolucoes/documento/2008/CGI.br_Resolucao_2008_008.pdf" data-wpel-link="external" target="_blank" rel="external noopener">Resolução CGI.br/RES/2008/008</a>, do Comitê Gestor da Internet no Brasil. Para ser registrado, o nome, sem contar a extensão, precisa:</p>



<ul class="wp-block-list">
<li>ter de 2 a 26 caracteres, contando cada letra acentuada como um caractere;</li>



<li>usar só letras de a a z, números, hífen e estes caracteres acentuados: à, á, â, ã, é, ê, í, ó, ô, õ, ú, ü e ç;</li>



<li>não ter só números;</li>



<li>não começar nem terminar com hífen.</li>
</ul>



<p class="wp-block-paragraph">Ficam de fora acentos de outras línguas, como è, ñ e ö. Por isso pão.com.br pode ser registrado, e crème.com.br não. O conversor avisa quando o nome usa um caractere que o .br não aceita.</p>



<h3 class="wp-block-heading">A regra de equivalência</h3>



<p class="wp-block-paragraph">O .br tem uma regra que o .com não tem: nomes que só se diferenciam por acentos, cedilha ou hífen são considerados equivalentes. Para comparar dois nomes, o Registro.br tira os acentos, troca o ç por c e apaga os hífens. Se o resultado for igual, os nomes são equivalentes.</p>



<p class="wp-block-paragraph">Assim, padariadajoão.com.br, padariadajoao.com.br e padaria-da-joao.com.br são equivalentes, porque todos viram padariadajoao. E, pela resolução, um nome equivalente a outro que já existe na mesma extensão só pode ser registrado por quem é dono do primeiro.</p>



<p class="wp-block-paragraph">Na prática, isso tem duas consequências:</p>



<ul class="wp-block-list">
<li><strong>Quem registra a versão sem acento já fica protegido.</strong> Ninguém mais consegue registrar a versão com acento, nem a com hífen, na mesma extensão.</li>



<li><strong>Se outra pessoa já tem uma das versões, as outras também ficam fora do seu alcance.</strong> O conversor consulta as versões com e sem acento ao mesmo tempo e avisa quando isso acontece.</li>
</ul>



<p class="wp-block-paragraph">Cada versão continua sendo um domínio separado, com registro e anuidade próprios. A equivalência só define quem pode registrá-las.</p>



<h2 class="wp-block-heading">Como os domínios com acento funcionam na prática</h2>



<h3 class="wp-block-heading">No navegador</h3>



<p class="wp-block-paragraph">A maioria dos navegadores mostra o nome com acento na barra de endereço, e o visitante pode digitar qualquer uma das duas formas. A exceção são nomes que misturam alfabetos ou que imitam o endereço de um site conhecido: nesses casos, o navegador mostra a forma <code>xn--</code> para proteger o visitante de endereços falsos, um golpe conhecido como ataque homógrafo. Nomes com os acentos do português costumam aparecer com acento.</p>



<p class="wp-block-paragraph">Fora do navegador, a história muda. Alguns aplicativos de mensagem, sistemas de estatística e painéis mostram a forma <code>xn--</code>, o que confunde quem não conhece o Punycode.</p>



<h3 class="wp-block-heading">No e-mail</h3>



<p class="wp-block-paragraph">No e-mail, o acento dá trabalho de verdade. A parte depois do @ viaja entre os servidores na forma Punycode: contato@açaí.com.br vira <code>contato@xn--aa-4iaz.com.br</code>. Os grandes serviços de e-mail fazem essa conversão sozinhos, mas muitos formulários de cadastro, sistemas antigos e validadores de e-mail recusam o endereço com acento. Um cliente pode simplesmente não conseguir cadastrar o seu e-mail no site de um fornecedor.</p>



<p class="wp-block-paragraph">Acento antes do @, como em joão@, complica ainda mais: só funciona entre servidores com suporte a e-mail internacionalizado (SMTPUTF8), e a maioria dos serviços não cria caixas de e-mail com acento.</p>



<p class="wp-block-paragraph">Por isso, mesmo quem registra um domínio com acento costuma usar o e-mail na versão sem acento.</p>



<h3 class="wp-block-heading">No servidor: DNS, cPanel e SSL</h3>



<p class="wp-block-paragraph">Para os servidores, o domínio é sempre a forma <code>xn--</code>. É ela que aparece na zona DNS, nos logs de acesso e no certificado de segurança. Se um campo do cPanel ou do painel do registro recusar o nome com acento, use a forma em Punycode que o conversor mostra.</p>



<p class="wp-block-paragraph">O <a href="https://www.homehost.com.br/blog/tutoriais/seguranca/gerar-instalar-certificado-ssl/" data-wpel-link="internal" target="_self">certificado SSL gratuito</a> do Let’s Encrypt também funciona com domínios com acento: ele é emitido para a forma <code>xn--</code>, e o navegador mostra o cadeado normalmente.</p>



<h3 class="wp-block-heading">Por telefone e no boca a boca</h3>



<p class="wp-block-paragraph">Experimente ditar “padaria da joão, com til no a, ponto com ponto br”. A maioria das pessoas digita sem acento, e, se só a versão com acento estiver registrada, elas não chegam ao site. É o mesmo teste do telefone que ajuda a <a href="https://www.homehost.com.br/blog/dominio/nome-de-dominio/" data-wpel-link="internal" target="_self">escolher um bom nome de domínio</a>.</p>



<h2 class="wp-block-heading">Vale a pena registrar um domínio com acento?</h2>



<p class="wp-block-paragraph">Para quase todo mundo, o domínio principal deve ser a versão sem acento. É ela que funciona em qualquer teclado, formulário e serviço de e-mail, e é a forma que as pessoas tendem a digitar mesmo quando o nome da marca tem acento.</p>



<p class="wp-block-paragraph">A versão com acento entra como complemento, quando faz sentido:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Situação</th><th>O que fazer</th></tr></thead><tbody><tr><td>O nome da marca não tem acento</td><td>Registre só a versão sem acento</td></tr><tr><td>O nome tem acento e o domínio é .br</td><td>Use a versão sem acento como principal. A com acento é opcional: a regra de equivalência já impede que outra pessoa a registre na mesma extensão</td></tr><tr><td>O nome tem acento e o domínio é .com</td><td>Registre as duas, se estiverem livres. No .com, outra pessoa pode registrar a versão com acento</td></tr><tr><td>E-mail</td><td>Use sempre o domínio sem acento</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Se registrar as duas versões, configure a com acento para <a href="https://www.homehost.com.br/blog/registro-de-dominios/redirecionar-um-dominio-ou-pagina/" data-wpel-link="internal" target="_self">redirecionar ao domínio principal</a> com um redirecionamento 301. Assim, quem digita com acento chega ao mesmo site, e os buscadores entendem que o endereço principal é o sem acento.</p>



<p class="wp-block-paragraph">Antes de decidir, confira se o nome está livre no <a href="https://www.homehost.com.br/blog/dominio/nome-de-dominio/#hh-dom" data-wpel-link="internal" target="_self">verificador de nome de domínio</a>, que também sugere variações quando a primeira opção já tem dono.</p>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Registre o seu domínio na Homehost</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">Comece pela versão sem acento: é ela que vai no cartão de visita, no e-mail e em toda a divulgação. Confira se o nome está livre e garanta o seu domínio.</p>
<a href="https://www.homehost.com.br/registro-de-dominio/" style="display:inline-block;margin:0 8px 6px 0;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="external" target="_blank" rel="external noopener">Registrar domínio</a>
<a href="https://www.homehost.com.br/blog/dominio/nome-de-dominio/#hh-dom" style="display:inline-block;margin:0 0 6px;padding:8px 17px;border:1px solid #0b3d91;color:#0b3d91;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;background:#ffffff;" data-wpel-link="internal" target="_self">Verificar um nome</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>É possível registrar domínio com acento?</strong><br>Sim. No .br, o nome pode ter à, á, â, ã, é, ê, í, ó, ô, õ, ú, ü e ç, além de letras sem acento, números e hífen. O .com e outras extensões também aceitam acentos, cada uma com a própria lista de caracteres. Mesmo assim, a recomendação é usar a versão sem acento como endereço principal.</p>



<p class="wp-block-paragraph"><strong>O que é Punycode?</strong><br>É a regra que converte um nome com acento em um nome só com letras sem acento, números e hífen, que é o que o DNS aceita. O resultado começa com <code>xn--</code>: açaí.com.br, por exemplo, vira <code>xn--aa-4iaz.com.br</code>. O navegador faz essa conversão sozinho, sem que o visitante perceba.</p>



<p class="wp-block-paragraph"><strong>O que significa <code>xn--</code> no começo de um domínio?</strong><br>É o prefixo que identifica um domínio internacionalizado convertido para Punycode. O que vem depois dele é o nome original, com as letras acentuadas codificadas no fim. Para ver o nome com acento, cole o endereço no <a href="https://www.homehost.com.br/blog/dominio/dominio-com-acento/#hh-idn" data-wpel-link="internal" target="_self">conversor de Punycode</a> desta página.</p>



<p class="wp-block-paragraph"><strong>Domínio com acento e sem acento são o mesmo domínio?</strong><br>Não. açaí.com.br e acai.com.br são dois domínios, cada um com registro próprio. No .br, porém, eles são equivalentes: só quem tem um deles pode registrar o outro na mesma extensão. Já o nome com acento e a forma <code>xn--</code> dele são o mesmo domínio, escrito de duas maneiras.</p>



<p class="wp-block-paragraph"><strong>E-mail com acento funciona?</strong><br>Depende de onde está o acento. Depois do @, o domínio é convertido para Punycode e os grandes serviços de e-mail entregam a mensagem, mas muitos formulários e sistemas recusam o endereço. Antes do @, o acento exige suporte a SMTPUTF8, e a maioria dos serviços não cria caixas assim. Para não ter problema, use o e-mail no domínio sem acento.</p>



<p class="wp-block-paragraph"><strong>Como converter um domínio com acento para Punycode?</strong><br>Digite o nome no conversor desta página. Ele mostra a forma em Punycode, a versão sem acento e o endereço de e-mail correspondente, e confere as regras do .br. Para fazer o caminho inverso, cole o endereço que começa com <code>xn--</code>.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "É possível registrar domínio com acento?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sim. No .br, o nome pode ter à, á, â, ã, é, ê, í, ó, ô, õ, ú, ü e ç, além de letras sem acento, números e hífen. O .com e outras extensões também aceitam acentos, cada uma com a própria lista de caracteres. Mesmo assim, a recomendação é usar a versão sem acento como endereço principal."
      }
    },
    {
      "@type": "Question",
      "name": "O que é Punycode?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É a regra que converte um nome com acento em um nome só com letras sem acento, números e hífen, que é o que o DNS aceita. O resultado começa com xn--: açaí.com.br, por exemplo, vira xn--aa-4iaz.com.br. O navegador faz essa conversão sozinho, sem que o visitante perceba."
      }
    },
    {
      "@type": "Question",
      "name": "O que significa xn-- no começo de um domínio?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É o prefixo que identifica um domínio internacionalizado convertido para Punycode. O que vem depois dele é o nome original, com as letras acentuadas codificadas no fim. Para ver o nome com acento, cole o endereço no conversor de Punycode desta página."
      }
    },
    {
      "@type": "Question",
      "name": "Domínio com acento e sem acento são o mesmo domínio?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não. açaí.com.br e acai.com.br são dois domínios, cada um com registro próprio. No .br, porém, eles são equivalentes: só quem tem um deles pode registrar o outro na mesma extensão. Já o nome com acento e a forma xn-- dele são o mesmo domínio, escrito de duas maneiras."
      }
    },
    {
      "@type": "Question",
      "name": "E-mail com acento funciona?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Depende de onde está o acento. Depois do @, o domínio é convertido para Punycode e os grandes serviços de e-mail entregam a mensagem, mas muitos formulários e sistemas recusam o endereço. Antes do @, o acento exige suporte a SMTPUTF8, e a maioria dos serviços não cria caixas assim. Para não ter problema, use o e-mail no domínio sem acento."
      }
    },
    {
      "@type": "Question",
      "name": "Como converter um domínio com acento para Punycode?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Digite o nome no conversor desta página. Ele mostra a forma em Punycode, a versão sem acento e o endereço de e-mail correspondente, e confere as regras do .br. Para fazer o caminho inverso, cole o endereço que começa com xn--."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Um domínio com acento é um domínio comum com duas formas: a que as pessoas leem, com acento, e a que o DNS usa, em Punycode. No .br, ele precisa seguir a lista de acentos do CGI.br, e a regra de equivalência garante que as versões com e sem acento fiquem com o mesmo dono. Na prática, o acento funciona bem no navegador e mal no e-mail e no boca a boca. Por isso, a versão sem acento deve ser o endereço principal, e a com acento, quando fizer sentido, um complemento que redireciona para ela.</p>
<p>O post <a href="https://www.homehost.com.br/blog/dominio/dominio-com-acento/" data-wpel-link="internal" target="_self">Domínio com acento: regras e conversor Punycode</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18578</post-id>	</item>
		<item>
		<title>Como descobrir a hospedagem de um site</title>
		<link>https://www.homehost.com.br/blog/internet/como-descobrir-a-hospedagem-de-um-site/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 18:46:58 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18555</guid>

					<description><![CDATA[<p>A empresa que hospeda um site é a dona do endereço IP para onde o domínio aponta. Digite qualquer domínio na ferramenta abaixo: ela encontra esse endereço, consulta quem é o dono dele e mostra também quem cuida do e-mail e do DNS do site e onde o domínio está registrado. Na maioria das vezes, [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/como-descobrir-a-hospedagem-de-um-site/" data-wpel-link="internal" target="_self">Como descobrir a hospedagem de um site</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>A empresa que hospeda um site é a dona do endereço IP para onde o domínio aponta. Digite qualquer domínio na ferramenta abaixo: ela encontra esse endereço, consulta quem é o dono dele e mostra também quem cuida do e-mail e do DNS do site e onde o domínio está registrado.</strong></p>



<p class="wp-block-paragraph">Na maioria das vezes, a resposta sai em poucos segundos. Quando ela não é tão direta, porque o site está atrás da Cloudflare ou o IP pertence a uma nuvem como a da Amazon, as seções abaixo explicam o que o resultado significa e até onde dá para ir.</p>



<h2 class="wp-block-heading">Consulte quem hospeda um site</h2>



<p class="wp-block-paragraph">Digite o domínio ou cole o endereço completo do site. A consulta roda no seu navegador, usa apenas dados públicos e nada do que você digita fica salvo.</p>



<div class="hh-host" id="hh-host" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-host"); if (!root0) { return; } var S2 = "/" + "/"; var AMP = String.fromCharCode(38); var Q = String.fromCharCode(34); var ELL = String.fromCharCode(8230); var PFX = "hh-host-"; function U(n) { return String.fromCharCode(n); } function H(h, p) { return "https:" + S2 + h + p; } var GURL = H("dns.google", "/resolve?name="); var CURL = H("cloudflare-dns.com", "/dns-query?name="); var BOOT4 = H("data.iana.org", "/rdap/ipv4.json"); var BOOT6 = H("data.iana.org", "/rdap/ipv6.json"); var BOOTD = H("data.iana.org", "/rdap/dns.json"); var RDAPORG = H("rdap.org", "/ip/"); var HH = H("www.homehost.com.br", "/"); var B = HH + "blog/"; var L = { rdns: B + "internet/dns-reverso/#hh-rdns", wip: B + "dominio/whois-ip/", mx: B + "internet/registro-mx/#hh-mx", prop: B + "perguntas-frequentes/o-que-e-propagacao-de-dns/", whois: HH + "whois-registro/", dom: B + "dominio/nome-de-dominio/#hh-dom", cdn: B + "perguntas-frequentes/o-que-e-cdn-e-cloudflare/", mig: B + "tutoriais/migracao-de-site/" }; var IDD = H("rdap.identitydigital.services", "/rdap/"); var GOOG = H("pubapi.registry.google", "/rdap/"); var RADIX = H("rdap.radix.host", "/rdap/"); var FALL = {com: H("rdap.verisign.com", "/com/v1/"), net: H("rdap.verisign.com", "/net/v1/"), org: H("rdap.publicinterestregistry.org", "/rdap/"), info: IDD, io: IDD, ai: IDD, app: GOOG, dev: GOOG, online: RADIX, store: RADIX, site: RADIX, tech: RADIX, website: RADIX}; var COL = {ok: ["#15803d", "#e8f5ec", U(10004)], warn: ["#b45309", "#fff4e5", U(9888)], bad: ["#b42318", "#fdecec", U(10006)], info: ["#1d4ed8", "#eef3ff", U(8505)]}; var LINK = "color:#1d4ed8;font-weight:700;"; var MONO = "font-family:Consolas,Menlo,monospace;font-size:13px;overflow-wrap:anywhere;"; var NAVY = "#0b3d91"; var MON = ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"]; var SUF2 = " co.uk org.uk ac.uk gov.uk com.br net.br org.br gov.br edu.br art.br blog.br eco.br app.br dev.br tec.br ong.br com.au net.au org.au co.nz co.jp co.za com.mx com.ar com.co com.pe com.uy com.py com.bo com.ve com.ec co.in com.cn com.tw com.hk com.sg co.id co.il com.pt com.es com.tr com.pl "; var CF4 = ["173.245.48.0/20", "103.21.244.0/22", "103.22.200.0/22", "103.31.4.0/22", "141.101.64.0/18", "108.162.192.0/18", "190.93.240.0/20", "188.114.96.0/20", "197.234.240.0/22", "198.41.128.0/17", "162.158.0.0/15", "104.16.0.0/13", "104.24.0.0/14", "172.64.0.0/13", "131.0.72.0/22"]; var CF6 = ["2400:cb00::/32", "2606:4700::/32", "2803:f800::/32", "2405:b500::/32", "2405:8100::/32", "2a06:98c0::/29", "2c0f:f248::/32"]; var PLAT = [["myshopify.com", "Shopify"], ["wixdns.net", "Wix"], ["squarespace.com", "Squarespace"], ["wordpress.com", "WordPress.com"], ["wpcomstaging.com", "WordPress.com"], ["wpengine.com", "WP Engine"], ["wpenginepowered.com", "WP Engine"], ["kinsta.cloud", "Kinsta"], ["netlify.app", "Netlify"], ["netlify.com", "Netlify"], ["netlifyglobalcdn.com", "Netlify"], ["vercel-dns.com", "Vercel"], ["vercel.app", "Vercel"], ["github.io", "GitHub Pages"], ["herokudns.com", "Heroku"], ["herokuapp.com", "Heroku"], ["azurewebsites.net", "Microsoft Azure App Service"], ["googlehosted.com", "Google (Blogger ou Google Sites)"], ["web.app", "Firebase Hosting"], ["firebaseapp.com", "Firebase Hosting"], ["webflow.com", "Webflow"], ["webflow.io", "Webflow"], ["ghost.io", "Ghost(Pro)"], ["hubspot.net", "HubSpot"], ["hs-sites.com", "HubSpot"], ["pantheonsite.io", "Pantheon"], ["fly.dev", "Fly.io"], ["onrender.com", "Render"], ["weebly.com", "Weebly"], ["pages.dev", "Cloudflare Pages"], ["workers.dev", "Cloudflare Workers"], ["amplifyapp.com", "AWS Amplify"], ["elasticbeanstalk.com", "AWS Elastic Beanstalk"], ["appspot.com", "Google App Engine"]]; var CDNS = [["cdn.cloudflare.net", "Cloudflare"], ["cloudfront.net", "Amazon CloudFront"], ["akamaiedge.net", "Akamai"], ["edgekey.net", "Akamai"], ["edgesuite.net", "Akamai"], ["akamaized.net", "Akamai"], ["fastly.net", "Fastly"], ["fastlylb.net", "Fastly"], ["azureedge.net", "Azure CDN"], ["azurefd.net", "Azure Front Door"], ["b-cdn.net", "Bunny CDN"], ["cdn77.org", "CDN77"], ["edgecastcdn.net", "Edgio"], ["sucuri.net", "Sucuri (firewall de sites)"], ["incapdns.net", "Imperva"]]; var PROXY = [["cloudflare", "Cloudflare"], ["fastly", "Fastly"], ["sucuri", "Sucuri (firewall de sites)"], ["incapsula", "Imperva"], ["imperva", "Imperva"], ["stackpath", "StackPath"], ["ddos-guard", "DDoS-Guard"]]; var PORG = [["shopify", "Shopify"], ["wix.com", "Wix"], ["squarespace", "Squarespace"], ["automattic", "WordPress.com (Automattic)"], ["webflow", "Webflow"], ["vercel", "Vercel"], ["netlify", "Netlify"], ["wp engine", "WP Engine"], ["wpengine", "WP Engine"]]; var ORGS = [["homehost", "Homehost", 0], ["gx internet e web hosting", "Homehost", 0], ["locaweb", "Locaweb", 0], ["kinghost", "KingHost", 0], ["hostgator", "HostGator", 0], ["universo online", "UOL", 0], ["umbler", "Umbler", 0], ["redehost", "RedeHost", 0], ["equinix", "Equinix (data center)", 1], ["sectorlink", "Sectorlink (data center)", 1], ["ascenty", "Ascenty (data center)", 1], ["amazon", "Amazon Web Services (AWS)", 1], ["google", "Google Cloud", 1], ["microsoft", "Microsoft Azure", 1], ["oracle", "Oracle Cloud", 1], ["alibaba", "Alibaba Cloud", 1], ["tencent", "Tencent Cloud", 1], ["akamai", "Akamai (CDN ou nuvem Linode)", 1], ["linode", "Linode (Akamai)", 1], ["digitalocean", "DigitalOcean", 1], ["the constant company", "Vultr", 1], ["vultr", "Vultr", 1], ["hetzner", "Hetzner", 0], ["ovh", "OVHcloud", 0], ["unified layer", "Newfold Digital (Bluehost, HostGator)", 0], ["newfold", "Newfold Digital (Bluehost, HostGator)", 0], ["godaddy", "GoDaddy", 0], ["hostinger", "Hostinger", 0], ["ionos", "IONOS", 0], ["contabo", "Contabo", 0], ["leaseweb", "Leaseweb", 0], ["liquid web", "Liquid Web", 0], ["siteground", "SiteGround", 0], ["dreamhost", "DreamHost", 0], ["namecheap", "Namecheap", 0], ["github", "GitHub", 0]]; var BRANDS = [["homehost.com.br", "Homehost", 1], ["servidorhh.com", "Homehost", 1], ["locaweb.com.br", "Locaweb", 1], ["kinghost.net", "KingHost", 1], ["hostgator.com.br", "HostGator", 1], ["hostgator.com", "HostGator", 1], ["websitewelcome.com", "HostGator", 1], ["auto.dns.br", "Registro.br (DNS gratuito)", 0], ["ns.cloudflare.com", "Cloudflare", 0], ["*awsdns-", "Amazon Route 53", 0], ["domaincontrol.com", "GoDaddy", 1], ["secureserver.net", "GoDaddy", 1], ["registrar-servers.com", "Namecheap", 0], ["googledomains.com", "Google Cloud DNS", 0], ["*azure-dns.", "Azure DNS", 0], ["nsone.net", "NS1", 0], ["dnsmadeeasy.com", "DNS Made Easy", 0], ["dnsimple.com", "DNSimple", 0], ["dnsimple-edge.net", "DNSimple", 0], ["digitalocean.com", "DigitalOcean", 1], ["linode.com", "Linode (Akamai)", 1], ["*ultradns.", "UltraDNS", 0], ["akam.net", "Akamai", 0], ["dynect.net", "Oracle Dyn", 0], ["ovh.net", "OVHcloud", 1], ["*ui-dns.", "IONOS", 1], ["hetzner.com", "Hetzner", 1], ["your-server.de", "Hetzner", 1], ["vercel-dns.com", "Vercel", 1], ["wixdns.net", "Wix", 1], ["squarespacedns.com", "Squarespace", 1], ["wordpress.com", "WordPress.com", 1], ["dns-parking.com", "Hostinger", 1], ["hostinger.com", "Hostinger", 1], ["hstgr.io", "Hostinger", 1], ["hstgr.cloud", "Hostinger", 1], ["bluehost.com", "Bluehost", 1], ["unifiedlayer.com", "Newfold Digital (Bluehost, HostGator)", 1], ["siteground.net", "SiteGround", 1], ["dreamhost.com", "DreamHost", 1], ["name.com", "Name.com", 0], ["porkbun.com", "Porkbun", 0], ["gandi.net", "Gandi", 0], ["dnspod.net", "DNSPod (Tencent)", 0], ["alidns.com", "Alibaba Cloud DNS", 0], ["amazonaws.com", "Amazon Web Services (AWS)", 0], ["googleusercontent.com", "Google Cloud", 0], ["linodeusercontent.com", "Linode (Akamai)", 0], ["vultrusercontent.com", "Vultr", 0], ["contaboserver.net", "Contabo", 1]]; var MXP = [["google.com", "Google Workspace", 0], ["googlemail.com", "Google Workspace", 0], ["outlook.com", "Microsoft 365", 0], ["homehost.com.br", "Homehost", 0], ["servidorhh.com", "Homehost", 0], ["locaweb.com.br", "Locaweb", 0], ["kinghost.net", "KingHost", 0], ["uhserver.com", "UOL Host", 0], ["hostgator.com.br", "HostGator", 0], ["zoho.com", "Zoho Mail", 0], ["zoho.eu", "Zoho Mail", 0], ["protonmail.ch", "Proton Mail", 0], ["icloud.com", "iCloud Mail", 0], ["yahoodns.net", "Yahoo Mail", 0], ["messagingengine.com", "Fastmail", 0], ["titan.email", "Titan Mail", 0], ["secureserver.net", "GoDaddy Email", 0], ["privateemail.com", "Namecheap Private Email", 0], ["registrar-servers.com", "Namecheap (encaminhamento)", 0], ["mx.cloudflare.net", "Cloudflare Email Routing", 0], ["improvmx.com", "ImprovMX (encaminhamento)", 0], ["forwardemail.net", "Forward Email", 0], ["hostinger.com", "Hostinger", 0], ["ionos.com", "IONOS", 0], ["ovh.net", "OVHcloud", 0], ["emailsrvr.com", "Rackspace Email", 0], ["mailgun.org", "Mailgun", 0], ["amazonaws.com", "Amazon SES", 0], ["pphosted.com", "Proofpoint", 1], ["ppe-hosted.com", "Proofpoint Essentials", 1], ["mimecast.com", "Mimecast", 1], ["barracudanetworks.com", "Barracuda", 1], ["iphmx.com", "Cisco Secure Email", 1], ["sophos.com", "Sophos", 1], ["mailcontrol.com", "Forcepoint", 1], ["antispamcloud.com", "SpamExperts", 1], ["spamexperts.com", "SpamExperts", 1]]; var SPFP = [["_spf.google.com", "Google Workspace"], ["spf.protection.outlook.com", "Microsoft 365"], ["homehost.com.br", "Homehost"], ["servidorhh.com", "Homehost"], ["locaweb.com.br", "Locaweb"], ["kinghost.net", "KingHost"], ["uhserver.com", "UOL Host"], ["hostgator.com.br", "HostGator"], ["sendgrid.net", "SendGrid"], ["mcsv.net", "Mailchimp"], ["mandrillapp.com", "Mailchimp Transactional"], ["amazonses.com", "Amazon SES"], ["mailgun.org", "Mailgun"], ["_spf.salesforce.com", "Salesforce"], ["zoho.com", "Zoho"], ["hubspotemail.net", "HubSpot"], ["sendinblue.com", "Brevo"], ["brevo.com", "Brevo"], ["mailjet.com", "Mailjet"], ["mtasv.net", "Postmark"], ["sparkpostmail.com", "SparkPost"], ["zendesk.com", "Zendesk"], ["mlsend.com", "MailerLite"], ["titan.email", "Titan"], ["secureserver.net", "GoDaddy"], ["messagingengine.com", "Fastmail"], ["mx.cloudflare.net", "Cloudflare Email Routing"], ["protonmail.ch", "Proton Mail"], ["icloud.com", "iCloud Mail"], ["emailsrvr.com", "Rackspace"], ["freshdesk.com", "Freshdesk"], ["shopify.com", "Shopify"], ["hostinger.com", "Hostinger"], ["websitewelcome.com", "HostGator"], ["bluehost.com", "Bluehost"]]; var cache = {}; var ipBoot = {}; var dBoot = null; var dBootDone = false; var useCF = false; var busy = false; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function low(s) { return String(or(s, "")).toLowerCase(); } function dot(s) { s = low(s).trim(); while (s.charAt(s.length - 1) === ".") { s = s.slice(0, -1); } return s; } function ends(h, s) { h = String(h); if (h === s) { return true; } return gt(h.length, s.length) ? h.slice(h.length - s.length - 1) === "." + s : false; } function match(list, host) { host = dot(host); if (!host) { return null; } for (var i = 0; i !== list.length; i++) { var p = list[i][0]; if (p.charAt(0) === "*") { if (has(host, p.slice(1))) { return list[i]; } } else if (ends(host, p)) { return list[i]; } } return null; } function inOrg(list, org) { var l = low(org); if (!l) { return null; } for (var i = 0; i !== list.length; i++) { if (has(l, list[i][0])) { return list[i]; } } return null; } function orgOf(d) { var p = d.split("."); if (lt(p.length, 3)) { return d; } var l2 = p.slice(-2).join("."); return has(SUF2, " " + l2 + " ") ? p.slice(-3).join(".") : l2; } function isBr(d) { return d.split(".").pop() === "br"; } function digits(s) { if (!s) { return false; } for (var i = 0; i !== s.length; i++) { if (!has("0123456789", s.charAt(i))) { return false; } } return true; } function v4(s) { var p = String(s).split("."); if (p.length !== 4) { return null; } var o = []; for (var i = 0; i !== 4; i++) { if (!digits(p[i]) ? true : (gt(p[i].length, 3) ? true : gt(Number(p[i]), 255))) { return null; } o.push(Number(p[i])); } return o; } function v6(s) { s = low(s); if (!has(s, ":") ? true : has(s, ".")) { return null; } for (var c = 0; c !== s.length; c++) { if (!has("0123456789abcdef:", s.charAt(c))) { return null; } } var parts = s.split("::"); if (gt(parts.length, 2)) { return null; } var left = parts[0] ? parts[0].split(":") : []; var right = parts.length === 2 ? (parts[1] ? parts[1].split(":") : []) : []; var fill = parts.length === 2 ? 8 - left.length - right.length : 0; if (parts.length === 1 ? left.length !== 8 : lt(fill, 1)) { return null; } var g = []; var all = left.slice(); for (var z = 0; z !== fill; z++) { all.push("0"); } all = all.concat(right); for (var k = 0; k !== all.length; k++) { if (!all[k] ? true : gt(all[k].length, 4)) { return null; } g.push(parseInt(all[k], 16)); } return g.length === 8 ? g : null; } function in4(o, cidr) { var p = cidr.split("/"); var n = v4(p[0]); if (!n) { return false; } var len = Number(p[1]); var size = Math.pow(2, 32 - len); var a = ((o[0] * 256 + o[1]) * 256 + o[2]) * 256 + o[3]; var b = ((n[0] * 256 + n[1]) * 256 + n[2]) * 256 + n[3]; return Math.floor(a / size) === Math.floor(b / size); } function in6(g, cidr) { var p = cidr.split("/"); var n = v6(p[0]); if (!n) { return false; } var len = Number(p[1]); var full = Math.floor(len / 16); var rem = len % 16; for (var i = 0; i !== full; i++) { if (g[i] !== n[i]) { return false; } } if (rem === 0) { return true; } var d = Math.pow(2, 16 - rem); return Math.floor(g[full] / d) === Math.floor(n[full] / d); } function isCF(ip) { var o = v4(ip); var i; if (o) { for (i = 0; i !== CF4.length; i++) { if (in4(o, CF4[i])) { return true; } } return false; } var g = v6(ip); if (g) { for (i = 0; i !== CF6.length; i++) { if (in6(g, CF6[i])) { return true; } } } return false; } function priv(ip) { var o = v4(ip); if (!o) { var l = low(ip); return l === "::1" ? true : (l.indexOf("fe80") === 0 ? true : (l.indexOf("fc") === 0 ? true : l.indexOf("fd") === 0)); } if (o[0] === 10 ? true : (o[0] === 127 ? true : o[0] === 0)) { return true; } if (o[0] === 192 ? o[1] === 168 : false) { return true; } if (o[0] === 172 ? (lt(o[1], 16) ? false : !gt(o[1], 31)) : false) { return true; } if (o[0] === 100 ? (lt(o[1], 64) ? false : !gt(o[1], 127)) : false) { return true; } return o[0] === 169 ? o[1] === 254 : false; } function arpa(ip) { var o = v4(ip); if (o) { return o.slice().reverse().join(".") + ".in-addr.arpa"; } var g = v6(ip); var hx = ""; for (var i = 0; i !== 8; i++) { var h = g[i].toString(16); while (lt(h.length, 4)) { h = "0" + h; } hx += h; } return hx.split("").reverse().join(".") + ".ip6.arpa"; } function bad() { return {err: "Isso n" + U(227) + "o parece um dom" + U(237) + "nio. Digite algo como seusite.com.br."}; } function norm(raw) { var s = String(or(raw, "")).trim(); if (!s) { return {err: "Digite um dom" + U(237) + "nio, como seusite.com.br."}; } var at = s.lastIndexOf("@"); if (at !== -1) { s = s.slice(at + 1); } var sc = s.indexOf(S2); if (sc !== -1) { s = s.slice(sc + 2); } var cuts = ["/", "?", "#"]; for (var i = 0; i !== cuts.length; i++) { var ci = s.indexOf(cuts[i]); if (ci !== -1) { s = s.slice(0, ci); } } if (s.charAt(0) === "[") { var cb = s.indexOf("]"); if (cb !== -1) { s = s.slice(1, cb); } } if (v6(s)) { return {ip: low(s), host: low(s)}; } var col = s.indexOf(":"); if (col !== -1) { s = s.slice(0, col); } s = dot(s); if (v4(s)) { return {ip: s, host: s}; } try { var u = new URL("http:" + S2 + s); s = dot(u.hostname); } catch (e) { return bad(); } var labels = s.split("."); if (lt(labels.length, 2) ? true : gt(s.length, 253)) { return {err: "Digite o dom" + U(237) + "nio completo, com a extens" + U(227) + "o, como seusite.com.br."}; } for (var k = 0; k !== labels.length; k++) { var lb = labels[k]; if (!lb ? true : gt(lb.length, 63)) { return bad(); } for (var c = 0; c !== lb.length; c++) { if (!has("abcdefghijklmnopqrstuvwxyz0123456789-_", lb.charAt(c))) { return bad(); } } } if (digits(labels[labels.length - 1])) { return bad(); } return {host: s, apex: orgOf(s)}; } function getJ(url, accept) { var ctl = window.AbortController ? new AbortController() : null; var opt = {credentials: "omit"}; if (accept) { opt.headers = {"accept": accept}; } if (ctl) { opt.signal = ctl.signal; } var tm = setTimeout(function () { if (ctl) { ctl.abort(); } }, 9000); return fetch(url, opt).then(function (r) { return r.text().then(function (t) { clearTimeout(tm); var j = null; try { j = JSON.parse(t); } catch (e) { j = null; } return {st: r.status, j: j}; }); }).catch(function () { clearTimeout(tm); return {st: -1, j: null}; }); } async function dns(name, type) { var key = name + "#" + type; if (cache[key]) { return cache[key]; } var qs = encodeURIComponent(name) + AMP + "type=" + type; var r = await getJ((useCF ? CURL : GURL) + qs, useCF ? "application/dns-json" : ""); if (!r.j ? !useCF : false) { useCF = true; r = await getJ(CURL + qs, "application/dns-json"); } var res = {st: -1, a: []}; if (r.j ? typeof r.j.Status === "number" : false) { res.st = r.j.Status; var an = or(r.j.Answer, []); for (var i = 0; i !== an.length; i++) { res.a.push({t: an[i].type, d: String(or(an[i].data, ""))}); } cache[key] = res; } return res; } function pick(res, t) { var o = []; if (!res) { return o; } for (var i = 0; i !== res.a.length; i++) { if (res.a[i].t === t) { o.push(t === 16 ? res.a[i].d : dot(res.a[i].d)); } } return o; } function flat(list, out) { for (var i = 0; i !== list.length; i++) { out.push(list[i]); if (list[i].entities) { flat(list[i].entities, out); } } } function vget(e, key) { try { var a = e.vcardArray[1]; for (var i = 0; i !== a.length; i++) { if (a[i][0] === key) { return String(or(a[i][3], "")).trim(); } } } catch (x) { return ""; } return ""; } function role(e, r) { return or(e.roles, []).indexOf(r) !== -1; } function okName(f) { if (!f) { return false; } if (f.slice(-4).toUpperCase() === "-MNT") { return false; } return has(f, " ") ? true : f !== f.toUpperCase(); } function firstHttps(urls) { for (var k = 0; k !== urls.length; k++) { if (String(urls[k]).indexOf("https:" + S2) === 0) { var b = String(urls[k]); return b.charAt(b.length - 1) === "/" ? b : b + "/"; } } return ""; } async function ipBase(ip) { var o = v4(ip); var g = o ? null : v6(ip); var key = o ? "v4" : "v6"; if (!ipBoot[key]) { var r = await getJ(o ? BOOT4 : BOOT6, ""); var list = []; if (r.st === 200 ? !!r.j : false) { var sv = or(r.j.services, []); for (var i = 0; i !== sv.length; i++) { var base = firstHttps(or(sv[i][1], [])); if (base) { list.push([or(sv[i][0], []), base]); } } } ipBoot[key] = list; } var L2 = ipBoot[key]; for (var s = 0; s !== L2.length; s++) { var pf = L2[s][0]; for (var k = 0; k !== pf.length; k++) { if (o ? in4(o, pf[k]) : (g ? in6(g, pf[k]) : false)) { return L2[s][1]; } } } return ""; } async function owner(ip) { var base = await ipBase(ip); var r = base ? await getJ(base + "ip/" + ip, "application/rdap+json") : {st: -1, j: null}; if (r.st !== 200 ? true : !r.j) { r = await getJ(RDAPORG + ip, "application/rdap+json"); } if (r.st !== 200 ? true : !r.j) { return null; } var j = r.j; var en = []; flat(or(j.entities, []), en); var name = ""; var abuse = ""; var i; for (i = 0; i !== en.length; i++) { if (!role(en[i], "registrant")) { continue; } if (low(vget(en[i], "kind")) === "individual") { continue; } var f = vget(en[i], "fn"); if (okName(f)) { name = f; break; } } if (!name) { for (i = 0; i !== en.length; i++) { if (low(vget(en[i], "kind")) !== "group") { continue; } var f2 = vget(en[i], "fn").split(" - Contact Role").join("").split(" Contact Role").join("").trim(); if (okName(f2)) { name = f2; break; } } } var jn = String(or(j.name, "")); if (!name ? jn.toLowerCase() !== jn.toUpperCase() : false) { name = jn; } for (i = 0; i !== en.length; i++) { if (role(en[i], "abuse")) { abuse = vget(en[i], "email"); if (abuse) { break; } } } var cidr = ""; var cs = or(j.cidr0_cidrs, []); if (cs.length) { cidr = or(cs[0].v4prefix, or(cs[0].v6prefix, "")) + "/" + cs[0].length; } else if (j.startAddress) { cidr = j.startAddress + " - " + j.endAddress; } return {org: name, cidr: cidr, cc: String(or(j.country, "")), abuse: abuse}; } async function domBase(tld) { if (!dBootDone) { dBootDone = true; var r = await getJ(BOOTD, ""); if (r.st === 200 ? !!r.j : false) { var m = {}; var sv = or(r.j.services, []); for (var i = 0; i !== sv.length; i++) { var base = firstHttps(or(sv[i][1], [])); if (!base) { continue; } var tl = or(sv[i][0], []); for (var t = 0; t !== tl.length; t++) { m[low(tl[t])] = base; } } dBoot = m; } } var b = dBoot ? or(dBoot[tld], "") : ""; return b ? b : or(FALL[tld], ""); } async function registrar(apex) { if (isBr(apex)) { return {ok: true, br: true, name: "Registro.br", reg: ""}; } var base = await domBase(apex.split(".").pop()); if (!base) { return {ok: false}; } var r = await getJ(base + "domain/" + apex, "application/rdap+json"); if (r.st !== 200 ? true : !r.j) { return {ok: false}; } var en = []; flat(or(r.j.entities, []), en); var name = ""; var i; for (i = 0; i !== en.length; i++) { if (role(en[i], "registrar")) { name = vget(en[i], "fn"); if (!name ? !!en[i].publicIds : false) { name = "IANA ID " + en[i].publicIds[0].identifier; } break; } } var reg = ""; var ev = or(r.j.events, []); for (i = 0; i !== ev.length; i++) { if (ev[i].eventAction === "registration") { reg = ev[i].eventDate; } } return {ok: true, br: false, name: name, reg: reg}; } function day(s) { var d = new Date(s); if (isNaN(d.getTime())) { return ""; } return d.getUTCDate() + " " + MON[d.getUTCMonth()] + " " + d.getUTCFullYear(); } async function none() { return null; } async function lookup(q) { var R = {q: q, st: 0, ips: [], ip: "", cn: [], used: q.host, ns: [], nsSt: 0, mx: [], spf: "", o: null, ptr: "", reg: null, mail: null, mailIp: "", mailPtr: "", fail: false}; if (q.ip) { R.ips = [q.ip]; R.ip = q.ip; } else { var www = q.host === q.apex ? "www." + q.apex : ""; var rs = await Promise.all([dns(q.host, "A"), dns(q.host, "AAAA"), dns(q.apex, "NS"), dns(q.apex, "MX"), dns(q.apex, "TXT"), www ? dns(www, "A") : none()]); if (rs[0].st === -1 ? rs[2].st === -1 : false) { R.fail = true; return R; } R.st = rs[0].st; R.nsSt = rs[2].st; R.cn = pick(rs[0], 5); R.ips = pick(rs[0], 1).concat(pick(rs[1], 28)); if (rs[5]) { var wc = pick(rs[5], 5); var wi = pick(rs[5], 1); R.cn = R.cn.concat(wc); if (!R.ips.length ? wi.length : false) { R.ips = wi; R.used = www; } } R.ns = pick(rs[2], 2); var mx = pick(rs[3], 15); for (var i = 0; i !== mx.length; i++) { var sp = mx[i].split(" "); R.mx.push({p: Number(sp[0]), h: dot(sp[sp.length - 1])}); } R.mx.sort(function (a, b) { return a.p - b.p; }); if (R.mx.length === 1 ? R.mx[0].h === "" : false) { R.mx = []; } var tx = pick(rs[4], 16); for (var t = 0; t !== tx.length; t++) { var v = tx[t].split(Q).join("").trim(); if (low(v).indexOf("v=spf1") === 0) { R.spf = v; } } R.ip = R.ips.length ? R.ips[0] : ""; } var pub = R.ip ? !priv(R.ip) : false; var mailKnown = R.mx.length ? match(MXP, R.mx[0].h) : null; var mailHost = R.mx.length ? (mailKnown ? "" : R.mx[0].h) : ""; var st2 = await Promise.all([pub ? owner(R.ip) : none(), pub ? dns(arpa(R.ip), "PTR") : none(), q.apex ? registrar(q.apex) : none(), mailHost ? dns(mailHost, "A") : none()]); R.o = st2[0]; var pt = pick(st2[1], 12); R.ptr = pt.length ? pt[0] : ""; R.reg = st2[2]; if (st2[3]) { var mi = pick(st2[3], 1); if (mi.length) { R.mailIp = mi[0]; if (!priv(R.mailIp)) { if (R.mailIp === R.ip) { R.mail = R.o; R.mailPtr = R.ptr; } else { var mr = await Promise.all([owner(R.mailIp), dns(arpa(R.mailIp), "PTR")]); R.mail = mr[0]; var mp = pick(mr[1], 12); R.mailPtr = mp.length ? mp[0] : ""; } } } } return R; } function analyse(R) { var A = {plat: null, platVia: "", cdn: null, cdnVia: "", host: "", hostSrc: "", cloud: false}; for (var i = 0; i !== R.cn.length; i++) { var p = match(PLAT, R.cn[i]); if (p ? !A.plat : false) { A.plat = p[1]; A.platVia = R.cn[i]; } var c = match(CDNS, R.cn[i]); if (c ? !A.cdn : false) { A.cdn = c[1]; A.cdnVia = R.cn[i]; } } if (R.ip ? isCF(R.ip) : false) { if (!A.cdn) { A.cdn = "Cloudflare"; A.cdnVia = "ip"; } } var oname = R.o ? R.o.org : ""; if (!A.cdn) { var px = inOrg(PROXY, oname); if (px) { A.cdn = px[1]; A.cdnVia = "owner"; } } if (!A.plat) { var po = inOrg(PORG, oname); if (po) { A.plat = po[1]; A.platVia = "owner"; } } var nsb = R.ns.length ? match(BRANDS, R.ns[0]) : null; A.nsHost = nsb ? (nsb[2] === 1 ? nsb[1] : "") : ""; if (A.plat) { A.host = A.plat; A.hostSrc = "plat"; } else if (A.cdn) { A.host = ""; A.hostSrc = "hidden"; } else if (R.ptr ? isHH(R.ptr) : false) { A.host = "Homehost"; A.hostSrc = "hh"; } else if (oname) { var f = inOrg(ORGS, oname); A.host = f ? f[1] : oname; A.cloud = f ? f[2] === 1 : false; A.hostSrc = "owner"; } else { var b = R.ptr ? match(BRANDS, R.ptr) : null; if (b) { A.host = b[1]; A.hostSrc = "ptr"; } else if (A.nsHost ? !!R.ip : false) { A.host = A.nsHost; A.hostSrc = "ns"; } } return A; } function isHH(ptr) { return has(low(ptr), "servidorhh.com"); } function mailName(R) { if (R.mailPtr ? isHH(R.mailPtr) : false) { return "Homehost"; } return friendly(R.mail); } function friendly(o) { if (!o) { return ""; } if (!o.org) { return ""; } var f = inOrg(ORGS, o.org); return f ? f[1] : o.org; } function note(parent, level, text, href, ltext) { var c = COL[level]; var d = add(parent, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:8px 11px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(text + (href ? " " : ""))); if (href) { add(d, "a", ltext, LINK).setAttribute("href", href); } } function card(grid, label, title, level) { var c = COL[level]; var b = add(grid, "div", "", "flex:1 1 220px;min-width:0;box-sizing:border-box;background:#ffffff;border:1px solid #d5dce5;border-top:4px solid " + c[0] + ";border-radius:10px;padding:10px 12px;"); add(b, "div", label, "font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#475569;margin-bottom:3px;"); add(b, "div", title, "font-size:16.5px;font-weight:800;color:#0F172A;line-height:1.3;margin-bottom:4px;overflow-wrap:anywhere;"); return b; } function line(b, label, value, mono) { var d = add(b, "div", "", "font-size:13.5px;color:#334155;line-height:1.45;margin-top:2px;overflow-wrap:anywhere;"); if (label) { add(d, "span", label + ": ", "color:#64748b;"); } add(d, "span", value, mono ? MONO : ""); return d; } function lnk(b, text, href) { var d = add(b, "div", "", "font-size:13px;margin-top:6px;"); add(d, "a", text, LINK).setAttribute("href", href); } function banner(out, lv, title, sub) { var c0 = COL[lv]; var ban = add(out, "div", "", "background:" + c0[1] + ";border:1px solid " + c0[0] + ";border-left:6px solid " + c0[0] + ";border-radius:10px;padding:10px 14px;"); add(ban, "div", c0[2] + " " + title, "font-size:17px;font-weight:800;color:" + c0[0] + ";overflow-wrap:anywhere;"); if (sub) { add(ban, "div", sub, "font-size:14px;line-height:1.5;margin-top:3px;color:#0F172A;"); } } function render(R) { var out = el("out"); var q = R.q; var A = analyse(R); var name = q.host; var lv; var title; var sub = ""; if (R.st === 3 ? (R.nsSt === 3 ? true : !R.ns.length) : false) { banner(out, "bad", name + " n" + U(227) + "o existe", "N" + U(227) + "o h" + U(225) + " registros DNS para esse nome. O dom" + U(237) + "nio pode n" + U(227) + "o estar registrado ou ter expirado."); note(out, "info", "Se voc" + U(234) + " procura um nome para o seu site, veja se ele est" + U(225) + " livre.", L.dom, "Verificar se o dom" + U(237) + "nio est" + U(225) + " livre"); return; } if (!R.ip) { lv = "warn"; title = "Nenhum site encontrado em " + name; sub = name + " n" + U(227) + "o tem endere" + U(231) + "o de servidor web (registro A ou AAAA)" + (q.apex === q.host ? ", nem o www." + q.apex : "") + ". Os dados de e-mail, DNS e registro est" + U(227) + "o abaixo."; } else if (priv(R.ip)) { lv = "warn"; title = name + " aponta para um IP interno"; sub = "O endere" + U(231) + "o " + R.ip + " " + U(233) + " de rede privada e n" + U(227) + "o pode ser acessado pela internet. O registro DNS do site provavelmente est" + U(225) + " errado."; } else if (A.hostSrc === "plat") { lv = "ok"; title = "Plataforma de " + name + ": " + A.host; sub = A.cdn ? "O tr" + U(225) + "fego passa antes por " + A.cdn + "." : ""; } else if (A.hostSrc === "hidden") { lv = "info"; title = name + " est" + U(225) + " atr" + U(225) + "s de um CDN: " + A.cdn; sub = A.cdn + " fica na frente do site e responde com os pr" + U(243) + "prios endere" + U(231) + "os, ent" + U(227) + "o a empresa que mant" + U(233) + "m o servidor de verdade n" + U(227) + "o aparece no DNS p" + U(250) + "blico."; } else if (A.hostSrc === "hh") { lv = "ok"; title = "Hospedagem de " + name + ": Homehost"; sub = "Identificada pelo nome do servidor, " + R.ptr + ", que " + U(233) + " da Homehost."; } else if (A.hostSrc === "ptr") { lv = "ok"; title = "Hospedagem de " + name + ": " + A.host; sub = "Identificada pelo nome do servidor, " + R.ptr + ". O dono do IP n" + U(227) + "o p" + U(244) + "de ser consultado agora."; } else if (A.hostSrc === "ns") { lv = "info"; title = "Hospedagem prov" + U(225) + "vel de " + name + ": " + A.host; sub = "O dono do IP n" + U(227) + "o respondeu agora, mas os servidores DNS do dom" + U(237) + "nio s" + U(227) + "o de " + A.host + ", e o site costuma ficar na mesma empresa. Para confirmar, consulte o IP " + R.ip + " no WHOIS IP."; } else if (A.host) { lv = "ok"; title = "Hospedagem de " + name + ": " + A.host; sub = A.cloud ? "Esse " + U(233) + " o dono do IP do servidor. " + A.host + " tamb" + U(233) + "m aluga servidores para empresas de hospedagem e plataformas, ent" + U(227) + "o a empresa que o dono do site paga pode ser uma delas." : "Essa " + U(233) + " a empresa dona da rede a que o IP do site pertence."; } else { lv = "warn"; title = "N" + U(227) + "o foi poss" + U(237) + "vel identificar a hospedagem de " + name; sub = "O IP " + U(233) + " " + R.ip + ", mas o dono dele n" + U(227) + "o p" + U(244) + "de ser consultado agora. Tente de novo em um minuto ou consulte o IP no WHOIS IP."; } banner(out, lv, title, sub); var grid = add(out, "div", "", "display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;"); var wt = "Sem site"; var wl = "warn"; if (R.ip) { if (A.hostSrc === "hidden") { wt = "Escondida pelo CDN"; wl = "info"; } else if (A.hostSrc === "ns") { wt = A.host + " (prov" + U(225) + "vel)"; wl = "info"; } else if (A.host) { wt = A.host; wl = "ok"; } else { wt = "N" + U(227) + "o identificada"; wl = "warn"; } } var wb = card(grid, "Site", wt, wl); if (R.used !== q.host) { line(wb, "Verificado", R.used, true); } if (R.ip) { line(wb, "Endere" + U(231) + "o IP", R.ip + (gt(R.ips.length, 1) ? " (+" + (R.ips.length - 1) + ")" : ""), true); } var showO = A.hostSrc !== "hh"; if (R.o ? (showO ? !!R.o.org : false) : false) { line(wb, "Dono da rede", R.o.org + (R.o.cc ? " (" + R.o.cc + ")" : "")); } if (R.o ? (showO ? !!R.o.cidr : false) : false) { line(wb, "Rede", R.o.cidr, true); } if (R.ptr) { line(wb, "Nome do servidor", R.ptr, true); } if (A.platVia ? A.platVia !== "owner" : false) { line(wb, "Aponta para", A.platVia, true); } if (R.o ? (showO ? !!R.o.abuse : false) : false) { line(wb, "Contato de abuso", R.o.abuse, true); } if (R.ip ? !priv(R.ip) : false) { if (R.o) { lnk(wb, "Ver o DNS reverso deste IP", L.rdns); } else { lnk(wb, "Consultar o dono deste IP no WHOIS IP", L.wip); } } if (A.cdn) { var cb = card(grid, "CDN ou firewall", A.cdn, "info"); if (A.cdnVia === "ip") { line(cb, "", "Identificado pela faixa de IPs da empresa."); } else if (A.cdnVia === "owner") { line(cb, "", "Identificado pelo dono do IP."); } else { line(cb, "Aponta para", A.cdnVia, true); } } var eb = null; if (q.ip) { eb = null; } else if (!R.mx.length) { eb = card(grid, "E-mail", "Sem e-mail", "warn"); line(eb, "", "O dom" + U(237) + "nio n" + U(227) + "o tem registros MX, ent" + U(227) + "o n" + U(227) + "o recebe e-mails."); } else { var mk = match(MXP, R.mx[0].h); var et; var mailOwner = mailName(R); if (mk) { et = mk[1] + (mk[2] === 1 ? " (filtro de seguran" + U(231) + "a)" : ""); } else if (ends(R.mx[0].h, q.apex)) { et = mailOwner ? "Servidor pr" + U(243) + "prio, na rede de " + mailOwner : "Servidor pr" + U(243) + "prio"; } else { var mb = match(BRANDS, R.mx[0].h); et = mb ? mb[1] : (mailOwner ? mailOwner : orgOf(R.mx[0].h)); } eb = card(grid, "E-mail", et, "ok"); var hs = []; for (var m = 0; m !== Math.min(R.mx.length, 3); m++) { hs.push(R.mx[m].h); } line(eb, "MX", hs.join(", ") + (gt(R.mx.length, 3) ? " (+" + (R.mx.length - 3) + ")" : ""), true); if (R.mailIp ? R.mailIp !== R.ip : false) { line(eb, "IP do servidor de e-mail", R.mailIp, true); } else if (R.mailIp) { line(eb, "", "O e-mail fica no mesmo servidor do site."); } if (mk ? mk[2] === 1 : false) { line(eb, "", "As caixas de e-mail ficam atr" + U(225) + "s desse filtro, ent" + U(227) + "o o provedor delas n" + U(227) + "o aparece nos registros MX."); } } if (R.spf ? !!eb : false) { var tk = R.spf.split(" "); var sn = []; for (var s = 0; s !== tk.length; s++) { var tl = low(tk[s]); var dm = ""; if (tl.indexOf("include:") === 0) { dm = tl.slice(8); } else if (tl.indexOf("redirect=") === 0) { dm = tl.slice(9); } if (dm) { var sm = match(SPFP, dm); if (sm ? sn.indexOf(sm[1]) === -1 : false) { sn.push(sm[1]); } } } if (sn.length) { line(eb, "Envia e-mails por", sn.join(", ")); } } if (eb ? R.mx.length : false) { lnk(eb, "Ver os detalhes do MX", L.mx); } var rg = R.reg; if (!q.ip) { var nk = R.ns.length ? match(BRANDS, R.ns[0]) : null; var nt = !R.ns.length ? "Desconhecido" : (nk ? nk[1] : (ends(R.ns[0], q.apex) ? "Servidores pr" + U(243) + "prios" : orgOf(R.ns[0]))); var nb = card(grid, "DNS", nt, R.ns.length ? "ok" : "warn"); if (R.ns.length) { line(nb, "Servidores", R.ns.slice(0, 4).join(", "), true); } lnk(nb, "Mudou de hospedagem? Veja a propaga" + U(231) + U(227) + "o de DNS", L.prop); var rt = rg ? (rg.ok ? or(rg.name, "N" + U(227) + "o publicado") : "Sem resposta") : "Sem resposta"; var rb = card(grid, "Registro do dom" + U(237) + "nio", rt, rg ? (rg.ok ? "ok" : "warn") : "warn"); line(rb, "Dom" + U(237) + "nio", q.apex, true); if (rg ? rg.br : false) { line(rb, "", "O .br " + U(233) + " administrado pelo Registro.br. A data de registro e o titular aparecem no WHOIS."); } if (rg ? !!rg.reg : false) { line(rb, "Registrado em", day(rg.reg)); } if (rg ? !rg.ok : true) { line(rb, "", "O registro dessa extens" + U(227) + "o n" + U(227) + "o respondeu " + U(224) + " consulta RDAP."); } lnk(rb, "Ver o registro completo no WHOIS", L.whois); } if (A.hostSrc === "hidden") { var mo = mailName(R); if (mo ? ((R.mail ? inOrg(PROXY, R.mail.org) : null) ? false : (R.mx.length ? ends(R.mx[0].h, q.apex) : false)) : false) { note(out, "info", "O IP do servidor de e-mail do pr" + U(243) + "prio dom" + U(237) + "nio (" + R.mx[0].h + ") " + U(233) + " de " + mo + ". Em hospedagem compartilhada, o site costuma ficar na mesma empresa, mas isso " + U(233) + " uma pista, n" + U(227) + "o uma prova."); } else if (A.nsHost) { note(out, "info", "Os servidores DNS do dom" + U(237) + "nio s" + U(227) + "o de " + A.nsHost + ". Isso sugere que a hospedagem tamb" + U(233) + "m " + U(233) + " de l" + U(225) + ", mas n" + U(227) + "o " + U(233) + " uma prova."); } note(out, "info", "Ter um CDN ou firewall na frente do site " + U(233) + " normal: ele acelera as p" + U(225) + "ginas e bloqueia ataques. Com ele, s" + U(243) + " o dono do site consegue confirmar a hospedagem real.", L.cdn, "O que " + U(233) + " Cloudflare e CDN"); } if (A.cloud ? (A.nsHost ? A.nsHost !== A.host : false) : false) { note(out, "info", "Os servidores DNS do dom" + U(237) + "nio s" + U(227) + "o de " + A.nsHost + ". Como " + A.host + " tamb" + U(233) + "m aluga servidores para outras empresas, a hospedagem pode ser de " + A.nsHost + "."); } var hostN = A.host; var regN = rg ? (rg.ok ? (rg.br ? "" : rg.name) : "") : ""; if (hostN ? (regN ? !has(low(regN), low(hostN).split(" ")[0]) : false) : false) { note(out, "info", "O dom" + U(237) + "nio est" + U(225) + " registrado em " + regN + " e o site fica em outra empresa. Isso " + U(233) + " comum: para trocar de hospedagem, voc" + U(234) + " muda o servidor e os registros DNS, e o registro do dom" + U(237) + "nio pode continuar onde est" + U(225) + "."); } if (hostN === "Homehost") { if (A.hostSrc !== "ns") { note(out, "ok", "Este site est" + U(225) + " na Homehost."); } } else if (R.ip ? !q.ip : false) { note(out, "ok", "Pensando em trocar de hospedagem? A Homehost migra o site do dom" + U(237) + "nio principal de gra" + U(231) + "a, com os bancos MySQL e as contas de e-mail.", L.mig, "Ver como funciona a migra" + U(231) + U(227) + "o gratuita"); } } function show(q) { var st = el("st"); st.textContent = ""; el("out").textContent = ""; if (q.err) { st.style.color = "#b45309"; st.textContent = q.err; return; } busy = true; el("go").disabled = true; el("go").style.opacity = "0.6"; st.style.color = "#475569"; st.textContent = "Verificando " + q.host + ELL; lookup(q).then(function (R) { st.textContent = ""; st.style.color = "#b45309"; if (R.fail) { st.textContent = "N" + U(227) + "o foi poss" + U(237) + "vel acessar o servi" + U(231) + "o de DNS. Verifique sua conex" + U(227) + "o e tente de novo."; } else { render(R); } }).catch(function () { st.style.color = "#b45309"; st.textContent = "Algo deu errado na verifica" + U(231) + U(227) + "o. Tente de novo em instantes."; }).then(function () { busy = false; el("go").disabled = false; el("go").style.opacity = "1"; }); } function go() { if (busy) { return; } show(norm(el("in").value)); } add(root0, "div", "Quem hospeda este site?", "font-weight:800;font-size:19px;color:" + NAVY + ";margin-bottom:4px;"); add(root0, "p", "Digite um dom" + U(237) + "nio ou o endere" + U(231) + "o de um site. A ferramenta l" + U(234) + " os registros DNS p" + U(250) + "blicos e consulta quem " + U(233) + " o dono do IP, para mostrar quem hospeda o site, quem cuida do e-mail e do DNS e onde o dom" + U(237) + "nio est" + U(225) + " registrado.", "margin:0 0 12px;line-height:1.5;font-size:14.5px;"); var lab = add(root0, "label", "Dom" + U(237) + "nio ou URL", "display:block;font-weight:700;font-size:14px;color:" + NAVY + ";margin-bottom:4px;"); lab.setAttribute("for", PFX + "in"); var frow = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;"); var inp = add(frow, "input", "", "flex:1 1 240px;min-width:0;width:auto;box-sizing:border-box;padding:9px 12px;border:1px solid #9aa7b8;border-radius:8px;font-size:16px;background:#ffffff;color:#0F172A;margin:0;"); inp.type = "text"; inp.id = PFX + "in"; inp.setAttribute("placeholder", "seusite.com.br"); inp.setAttribute("autocomplete", "off"); inp.setAttribute("autocapitalize", "off"); inp.setAttribute("spellcheck", "false"); inp.setAttribute("inputmode", "url"); var gb = add(frow, "button", "Verificar", "flex:0 0 auto;padding:9px 20px;border:0;border-radius:8px;background:" + NAVY + ";color:#ffffff;font-size:15px;font-weight:700;cursor:pointer;line-height:1.3;margin:0;"); gb.type = "button"; gb.id = PFX + "go"; var exl = add(root0, "div", "", "margin-top:8px;font-size:13px;color:#475569;line-height:1.9;"); exl.appendChild(document.createTextNode("Exemplos: ")); var EXS = ["wikipedia.org", "github.com"]; for (var x0 = 0; x0 !== EXS.length; x0++) { var eb0 = add(exl, "button", EXS[x0], "margin:0 4px 0 0;padding:2px 8px;border:1px solid #c9d2dd;border-radius:999px;background:#ffffff;color:#1d4ed8;font-size:13px;font-weight:700;cursor:pointer;"); eb0.type = "button"; eb0.setAttribute("data-d", EXS[x0]); eb0.addEventListener("click", function () { inp.value = this.getAttribute("data-d"); go(); }); } var st0 = add(root0, "div", "", "margin-top:12px;font-size:14px;color:#b45309;line-height:1.5;"); st0.id = PFX + "st"; st0.setAttribute("aria-live", "polite"); var out0 = add(root0, "div", "", "margin-top:4px;"); out0.id = PFX + "out"; out0.setAttribute("aria-live", "polite"); add(root0, "p", "Usa o DNS p" + U(250) + "blico do Google, com o da Cloudflare como reserva, e o RDAP, o servi" + U(231) + "o oficial de consulta dos registros de IP e de dom" + U(237) + "nio. Tudo roda no seu navegador e nada do que voc" + U(234) + " digita fica salvo.", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); gb.addEventListener("click", go); inp.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); go(); } }); })();</script>



<h2 class="wp-block-heading">Como a ferramenta descobre a hospedagem</h2>



<p class="wp-block-paragraph">O nome de um domínio não diz quem hospeda o site. O que liga os dois é o DNS: o domínio tem um registro A (ou AAAA, no IPv6) apontando para um endereço IP, e todo IP público é distribuído por um dos cinco registros regionais da internet: ARIN, RIPE NCC, APNIC, LACNIC e AFRINIC. No Brasil, quem distribui os endereços IP é o NIC.br, ligado ao LACNIC. A ferramenta segue esse caminho e lê alguns outros registros no meio dele.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>O que a ferramenta consulta</th><th>Registro</th><th>O que ele revela</th></tr></thead><tbody><tr><td>O endereço do site</td><td>A e AAAA</td><td>O IP do servidor web, ou do serviço que fica na frente dele</td></tr><tr><td>Quem é o dono desse endereço</td><td>RDAP do IP</td><td>A dona da rede: uma hospedagem, uma nuvem ou um CDN</td></tr><tr><td>Para onde o nome aponta</td><td>CNAME</td><td>Plataformas como Shopify, Wix ou Netlify, que aparecem no registro</td></tr><tr><td>O nome do servidor</td><td>PTR (DNS reverso)</td><td>Muitas vezes, o padrão de nomes dos servidores da hospedagem</td></tr><tr><td>O e-mail</td><td>MX e SPF</td><td>Quem recebe os e-mails do domínio e quais serviços enviam por ele</td></tr><tr><td>O DNS</td><td>NS</td><td>Quem responde às consultas DNS do domínio</td></tr><tr><td>O registro</td><td>RDAP do domínio</td><td>O registrador e a data de registro</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Tudo vem de fontes públicas: o DNS do Google, com o da Cloudflare como reserva, e o <a href="https://www.homehost.com.br/blog/dominio/whois-rdap-protocolo-de-dominios/" data-wpel-link="internal" target="_self">RDAP</a>, o protocolo que os registros usam no lugar do WHOIS. Nos domínios .br, o registro fica sempre no Registro.br, e a data e o titular aparecem na <a href="https://www.homehost.com.br/whois-registro/" data-wpel-link="external" target="_blank" rel="external noopener">busca WHOIS</a>.</p>



<h2 class="wp-block-heading">Por que o resultado mostra Cloudflare</h2>



<p class="wp-block-paragraph">Esse resultado costuma surpreender. Quando um site usa a Cloudflare, ou outro CDN ou firewall de sites, como Fastly e Sucuri, o DNS dele aponta para os endereços do CDN, e não para o servidor. O visitante se conecta ao CDN, que busca as páginas no servidor real, chamado de origem, sem que ninguém veja. É para isso que ele serve: as páginas carregam mais rápido e os ataques são barrados antes de chegar ao servidor. Mas isso também significa que o DNS público não revela a hospedagem.</p>



<p class="wp-block-paragraph">Existem pistas. Se o domínio tem o próprio servidor de e-mail, o registro MX costuma apontar para um endereço que não passa pelo CDN, e, em hospedagem compartilhada, o e-mail e o site normalmente ficam na mesma empresa. A ferramenta mostra o dono desse servidor de e-mail quando o encontra, mas trate isso como pista, não como resposta.</p>



<p class="wp-block-paragraph">Se você precisa da hospedagem por causa de um abuso, como uma página de phishing, um malware ou um conteúdo copiado, não precisa descobrir a origem por conta própria. O <a href="https://abuse.cloudflare.com/" data-wpel-link="external" target="_blank" rel="external noopener">formulário de abuso da Cloudflare</a> repassa a denúncia ao responsável pelo site e à hospedagem, e entrega à hospedagem o IP de origem para que ela possa agir.</p>



<p class="wp-block-paragraph">E se o site atrás da Cloudflare é o seu e está dando erro, entenda <a href="https://www.homehost.com.br/blog/perguntas-frequentes/o-que-e-cdn-e-cloudflare/" data-wpel-link="internal" target="_self">o que é Cloudflare e CDN</a> e quando o problema está no servidor de origem, e não na Cloudflare.</p>



<h2 class="wp-block-heading">Por que aparece Amazon, Google, Microsoft ou um data center</h2>



<p class="wp-block-paragraph">O dono do IP é a empresa dona da rede, que nem sempre é a empresa que o dono do site paga. Muitas hospedagens, plataformas de lojas virtuais e criadores de sites alugam servidores na Amazon Web Services, no Google Cloud ou no Microsoft Azure, ou colocam os próprios servidores em data centers de terceiros. Assim, um site pode ser vendido por uma marca que você conhece enquanto o IP dele pertence à AWS.</p>



<p class="wp-block-paragraph">A ferramenta reconhece as plataformas que se identificam no DNS. Shopify, Wix, Squarespace, Netlify, Vercel e outras aparecem no registro CNAME do site ou são donas da faixa de IPs, e a ferramenta mostra o nome delas no lugar da nuvem. Quando isso não acontece, ela confere os servidores DNS do domínio: se eles são de uma empresa de hospedagem, é bem provável que o site também esteja lá. Fora isso, o dono da rede é a resposta mais precisa que os dados públicos dão, e o nome do servidor no <a href="https://www.homehost.com.br/blog/internet/dns-reverso/" data-wpel-link="internal" target="_self">DNS reverso</a> às vezes ajuda a fechar a questão.</p>



<h2 class="wp-block-heading">Site, e-mail, DNS e domínio: quatro serviços diferentes</h2>



<p class="wp-block-paragraph">A hospedagem é só um dos quatro serviços por trás de um domínio, e muitas vezes eles estão em quatro empresas diferentes.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Serviço</th><th>O que faz</th><th>Onde aparece</th><th>Exemplos</th></tr></thead><tbody><tr><td>Registro do domínio</td><td>Garante o direito ao nome e cuida da renovação</td><td>RDAP ou WHOIS do domínio</td><td>Registro.br (no .br), GoDaddy, Namecheap</td></tr><tr><td>DNS</td><td>Diz à internet onde estão os serviços do domínio</td><td>Registros NS</td><td>Cloudflare, DNS do Registro.br, a própria hospedagem</td></tr><tr><td>Hospedagem do site</td><td>Mantém o servidor que entrega as páginas</td><td>Registros A e AAAA e o dono do IP</td><td>Homehost, AWS, Shopify</td></tr><tr><td>E-mail</td><td>Recebe e guarda as mensagens do domínio</td><td>Registros MX</td><td>Google Workspace, Microsoft 365, o servidor de e-mail da hospedagem</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-quatro-servicos-por-tras-de-um-dominio-777x1024.png" alt="Infográfico com os quatro serviços de um domínio: registro, DNS, hospedagem e e-mail, e onde ver cada um." class="wp-image-18558" width="777" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-quatro-servicos-por-tras-de-um-dominio-777x1024.png 777w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-quatro-servicos-por-tras-de-um-dominio-228x300.png 228w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-quatro-servicos-por-tras-de-um-dominio-767x1012.png 767w, https://www.homehost.com.br/blog/wp-content/uploads/2026/11/Infografico-quatro-servicos-por-tras-de-um-dominio.png 1092w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<p class="wp-block-paragraph">Isso faz diferença principalmente na hora de mudar o site de lugar. Trocar de hospedagem muda o servidor do site e, normalmente, os registros DNS. O registro do domínio pode continuar onde está, e o e-mail só muda se estava na hospedagem antiga. Para conferir quem recebe os e-mails antes de mexer em qualquer coisa, use o <a href="https://www.homehost.com.br/blog/internet/registro-mx/#hh-mx" data-wpel-link="internal" target="_self">verificador de registro MX</a>.</p>



<h2 class="wp-block-heading">Como descobrir a hospedagem manualmente</h2>



<p class="wp-block-paragraph">A ferramenta não faz nada que você não consiga fazer no terminal. No Windows, abra o Prompt de Comando e use o nslookup:</p>



<pre class="wp-block-code"><code>nslookup seusite.com.br
nslookup -type=mx seusite.com.br
nslookup -type=ns seusite.com.br</code></pre>



<p class="wp-block-paragraph">O primeiro comando mostra o IP do site. O segundo mostra quem recebe os e-mails, e o terceiro, quem cuida do DNS. Se preferir não abrir o terminal, o <a href="https://www.homehost.com.br/blog/internet/nslookup/#hh-ns" data-wpel-link="internal" target="_self">nslookup online</a> faz as mesmas consultas pelo navegador.</p>



<p class="wp-block-paragraph">No macOS e no Linux, o dig e o whois fazem o mesmo trabalho:</p>



<pre class="wp-block-code"><code>dig +short seusite.com.br A
dig +short -x 203.0.113.10
whois 203.0.113.10</code></pre>



<p class="wp-block-paragraph">O primeiro comando devolve o IP do site; use-o no lugar de 203.0.113.10 nos outros dois. O segundo mostra o nome do servidor no DNS reverso, e o terceiro, o dono do endereço, porque os registros regionais ainda respondem a consultas WHOIS de IP. Em qualquer sistema, a <a href="https://www.homehost.com.br/blog/dominio/whois-ip/" data-wpel-link="internal" target="_self">consulta WHOIS IP</a> mostra o dono de um endereço pelo navegador.</p>



<h2 class="wp-block-heading">O que fazer com a resposta</h2>



<p class="wp-block-paragraph"><strong>Denunciar um abuso.</strong> A ferramenta mostra o contato de abuso da rede quando o registro publica um. É o endereço que as hospedagens monitoram para receber denúncias de phishing, spam e malware. Para sites atrás da Cloudflare, use o formulário de abuso dela.</p>



<p class="wp-block-paragraph"><strong>Pesquisar um concorrente ou um site que você pensa em comprar.</strong> A hospedagem, o provedor de e-mail e a idade do domínio dizem muito sobre como um site é mantido. A busca WHOIS mostra o registro completo do domínio.</p>



<p class="wp-block-paragraph"><strong>Encontrar a sua própria hospedagem.</strong> Se você perdeu a referência de onde o seu site está, a ferramenta reduz as possibilidades, e a fatura na sua caixa de entrada confirma.</p>



<p class="wp-block-paragraph"><strong>Confirmar que uma migração funcionou.</strong> Depois de trocar de hospedagem, a ferramenta deve mostrar a nova empresa. Se ainda mostra a antiga, a mudança de DNS ainda não chegou ao servidor DNS que você está usando: veja como funciona a <a href="https://www.homehost.com.br/blog/perguntas-frequentes/o-que-e-propagacao-de-dns/" data-wpel-link="internal" target="_self">propagação de DNS</a>.</p>



<h2 class="wp-block-heading">Como trocar de hospedagem</h2>



<p class="wp-block-paragraph">Se a ferramenta acabou de confirmar que o seu site está em um lugar onde você não quer mais ficar, a mudança é, principalmente, uma questão de ordem: copiar os arquivos e o banco de dados, testar o site no servidor novo e só então apontar o DNS. Feito nessa ordem, o site continua no ar durante toda a troca, e o domínio não precisa sair do registrador atual.</p>



<p class="wp-block-paragraph">Na Homehost, essa parte pode ficar com o suporte: a <a href="https://www.homehost.com.br/blog/tutoriais/migracao-de-site/" data-wpel-link="internal" target="_self">migração gratuita</a> leva o site do domínio principal, com os bancos MySQL e as contas de e-mail.</p>



<div style="max-width:780px;margin:24px auto;border:1px solid #c9d2dd;border-left:6px solid #0b3d91;border-radius:12px;padding:18px 22px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;box-sizing:border-box;">
<div style="font-weight:800;font-size:17px;color:#0b3d91;margin-bottom:6px;">Quer trazer seu site para a Homehost?</div>
<p style="margin:0 0 12px;line-height:1.6;font-size:15px;">A Homehost migra gratuitamente o site do domínio principal, com os bancos de dados MySQL e as contas de e-mail. Projetos maiores, com mais domínios, recebem um orçamento do suporte técnico.</p>
<a href="https://www.homehost.com.br/blog/tutoriais/migracao-de-site/" style="display:inline-block;margin:0 8px 6px 0;padding:9px 18px;background:#0b3d91;color:#ffffff;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;" data-wpel-link="internal" target="_self">Ver como funciona a migração</a>
<a href="https://www.homehost.com.br/hospedagem-de-sites/" style="display:inline-block;margin:0 0 6px;padding:8px 17px;border:1px solid #0b3d91;color:#0b3d91;border-radius:8px;font-weight:700;font-size:14.5px;text-decoration:none;background:#ffffff;" data-wpel-link="external" target="_blank" rel="external noopener">Conhecer os planos de hospedagem</a>
</div>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>Como descobrir a hospedagem de um site?</strong><br>Descubra o IP para onde o domínio aponta e veja quem é o dono desse IP. A <a href="https://www.homehost.com.br/blog/internet/como-descobrir-a-hospedagem-de-um-site/#hh-host" data-wpel-link="internal" target="_self">ferramenta desta página</a> faz as duas coisas de uma vez e ainda mostra quem cuida do e-mail, do DNS e do registro do domínio. Na mão, use o nslookup ou o dig para ver o IP e uma consulta WHOIS IP para descobrir o dono.</p>



<p class="wp-block-paragraph"><strong>Por que a consulta de hospedagem mostra Cloudflare?</strong><br>Porque o site usa a Cloudflare como proxy. O DNS do domínio aponta para os endereços da Cloudflare, que busca as páginas no servidor real sem que o visitante veja, então a hospedagem de verdade fica escondida no DNS público. O mesmo acontece com outros CDNs e firewalls de sites, como Fastly e Sucuri.</p>



<p class="wp-block-paragraph"><strong>Dá para descobrir a hospedagem real de um site que usa Cloudflare?</strong><br>Não com segurança, usando só dados públicos. O servidor de e-mail do próprio domínio às vezes dá uma pista, porque o e-mail normalmente não passa pela Cloudflare, mas isso não é prova. Se você precisa da hospedagem para denunciar um abuso, use o formulário de abuso da Cloudflare: ela repassa a denúncia ao responsável pelo site e à hospedagem.</p>



<p class="wp-block-paragraph"><strong>A empresa do registro do domínio é a mesma da hospedagem?</strong><br>Muitas vezes, não. O registro garante o direito ao nome, e a hospedagem mantém o servidor que entrega as páginas. Muitas hospedagens também vendem domínios, então pode ser a mesma empresa, mas é comum um domínio registrado em um lugar apontar para um site hospedado em outro. Nos domínios .br, o registro fica sempre no Registro.br, mesmo quando é feito por meio de uma hospedagem.</p>



<p class="wp-block-paragraph"><strong>Como descubro onde o meu próprio site está hospedado?</strong><br>Consulte o seu domínio na ferramenta. Se ela mostrar um CDN ou uma nuvem em vez de uma empresa de hospedagem, procure no seu e-mail faturas ou mensagens de boas-vindas da hospedagem: é nessa conta que ficam os arquivos do site.</p>



<p class="wp-block-paragraph"><strong>Dá para ver quem é o dono de um site?</strong><br>Depende da extensão. Nos domínios genéricos, como .com, os dados pessoais do titular ficam ocultos na maioria dos casos desde 2018, e o registro público mostra só o registrador. No .br, a consulta WHOIS do Registro.br mostra o titular do domínio, com parte do CPF mascarada quando ele é uma pessoa física.</p>



<p class="wp-block-paragraph"><strong>O que é RDAP?</strong><br>É o Registration Data Access Protocol, o protocolo que substituiu o WHOIS. Ele devolve os dados de registro de domínios e de endereços IP em um formato padronizado. Desde 28 de janeiro de 2025, os domínios genéricos, como .com, não são mais obrigados a oferecer WHOIS, e o RDAP passou a ser a fonte oficial.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {"@type": "Question", "name": "Como descobrir a hospedagem de um site?", "acceptedAnswer": {"@type": "Answer", "text": "Descubra o IP para onde o domínio aponta e veja quem é o dono desse IP. A ferramenta desta página faz as duas coisas de uma vez e ainda mostra quem cuida do e-mail, do DNS e do registro do domínio. Na mão, use o nslookup ou o dig para ver o IP e uma consulta WHOIS IP para descobrir o dono."}},
    {"@type": "Question", "name": "Por que a consulta de hospedagem mostra Cloudflare?", "acceptedAnswer": {"@type": "Answer", "text": "Porque o site usa a Cloudflare como proxy. O DNS do domínio aponta para os endereços da Cloudflare, que busca as páginas no servidor real sem que o visitante veja, então a hospedagem de verdade fica escondida no DNS público. O mesmo acontece com outros CDNs e firewalls de sites, como Fastly e Sucuri."}},
    {"@type": "Question", "name": "Dá para descobrir a hospedagem real de um site que usa Cloudflare?", "acceptedAnswer": {"@type": "Answer", "text": "Não com segurança, usando só dados públicos. O servidor de e-mail do próprio domínio às vezes dá uma pista, porque o e-mail normalmente não passa pela Cloudflare, mas isso não é prova. Se você precisa da hospedagem para denunciar um abuso, use o formulário de abuso da Cloudflare: ela repassa a denúncia ao responsável pelo site e à hospedagem."}},
    {"@type": "Question", "name": "A empresa do registro do domínio é a mesma da hospedagem?", "acceptedAnswer": {"@type": "Answer", "text": "Muitas vezes, não. O registro garante o direito ao nome, e a hospedagem mantém o servidor que entrega as páginas. Muitas hospedagens também vendem domínios, então pode ser a mesma empresa, mas é comum um domínio registrado em um lugar apontar para um site hospedado em outro. Nos domínios .br, o registro fica sempre no Registro.br, mesmo quando é feito por meio de uma hospedagem."}},
    {"@type": "Question", "name": "Como descubro onde o meu próprio site está hospedado?", "acceptedAnswer": {"@type": "Answer", "text": "Consulte o seu domínio na ferramenta. Se ela mostrar um CDN ou uma nuvem em vez de uma empresa de hospedagem, procure no seu e-mail faturas ou mensagens de boas-vindas da hospedagem: é nessa conta que ficam os arquivos do site."}},
    {"@type": "Question", "name": "Dá para ver quem é o dono de um site?", "acceptedAnswer": {"@type": "Answer", "text": "Depende da extensão. Nos domínios genéricos, como .com, os dados pessoais do titular ficam ocultos na maioria dos casos desde 2018, e o registro público mostra só o registrador. No .br, a consulta WHOIS do Registro.br mostra o titular do domínio, com parte do CPF mascarada quando ele é uma pessoa física."}},
    {"@type": "Question", "name": "O que é RDAP?", "acceptedAnswer": {"@type": "Answer", "text": "É o Registration Data Access Protocol, o protocolo que substituiu o WHOIS. Ele devolve os dados de registro de domínios e de endereços IP em um formato padronizado. Desde 28 de janeiro de 2025, os domínios genéricos, como .com, não são mais obrigados a oferecer WHOIS, e o RDAP passou a ser a fonte oficial."}}
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Descobrir a hospedagem de um site se resume a uma pergunta: quem é o dono do IP para onde o domínio aponta. Para a maioria dos sites, a ferramenta responde isso direto. Quando há um CDN ou uma nuvem no meio, a resposta é a empresa que está na frente, e a hospedagem real só pode ser confirmada pelo dono do site ou por uma denúncia de abuso. De qualquer forma, a mesma consulta mostra quem cuida do e-mail, do DNS e do registro do domínio, que é o que você precisa saber antes de trocar um site de lugar, denunciar um abuso ou simplesmente entender como ele foi montado.</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/como-descobrir-a-hospedagem-de-um-site/" data-wpel-link="internal" target="_self">Como descobrir a hospedagem de um site</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18555</post-id>	</item>
		<item>
		<title>Cabeçalho de e-mail: o que é, como ver e analisador grátis</title>
		<link>https://www.homehost.com.br/blog/contas-de-email/cabecalho-de-email/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 13:43:09 +0000</pubDate>
				<category><![CDATA[Contas de email]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18500</guid>

					<description><![CDATA[<p>O cabeçalho de e-mail é a parte da mensagem que você normalmente não vê: um bloco de linhas técnicas que registra quem enviou, por quais servidores a mensagem passou, quanto tempo ela ficou em cada um e se passou nas verificações de SPF, DKIM e DMARC. O seu programa de e-mail mostra só um resumo, [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/contas-de-email/cabecalho-de-email/" data-wpel-link="internal" target="_self">Cabeçalho de e-mail: o que é, como ver e analisador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">O cabeçalho de e-mail é a parte da mensagem que você normalmente não vê: um bloco de linhas técnicas que registra quem enviou, por quais servidores a mensagem passou, quanto tempo ela ficou em cada um e se passou nas verificações de SPF, DKIM e DMARC. O seu programa de e-mail mostra só um resumo, com remetente, destinatário, assunto e data, mas o cabeçalho completo está sempre guardado junto com a mensagem.</p>



<p class="wp-block-paragraph">Saber ler esse bloco resolve três dúvidas comuns: descobrir se um e-mail suspeito é golpe, entender por que uma mensagem foi parar no spam e ver onde um e-mail atrasado ficou parado. Neste guia, você vê como abrir o cabeçalho no Gmail, no Outlook e no Webmail, o que significa cada linha importante e como usar o analisador abaixo para fazer essa leitura automaticamente.</p>



<h2 class="wp-block-heading">Analisador de cabeçalho de e-mail</h2>



<p class="wp-block-paragraph">Copie o cabeçalho completo da mensagem e cole no campo abaixo. O passo a passo de cada serviço está mais abaixo e também dentro da ferramenta, em “Como copiar o cabeçalho”. O analisador mostra se a mensagem passou no SPF, no DKIM e no DMARC, se cada verificação bate com o domínio do remetente, o caminho que ela fez entre os servidores e os sinais típicos de golpe. A análise acontece no seu navegador: o cabeçalho não é enviado para nenhum servidor.</p>



<div class="hh-hdr" id="hh-hdr" style="max-width:780px;margin:28px auto;border:1px solid #c9d2dd;border-radius:14px;padding:22px 24px;background:#f4f6f9;font-family:Arial,Helvetica,sans-serif;color:#0F172A;font-size:15px;box-sizing:border-box;"></div>
<script>(function () { var root0 = document.getElementById("hh-hdr"); if (!root0) { return; } var S2 = "/" + "/"; var SITE = "https:" + S2 + "www.homehost.com.br/blog/"; var SPFCHK = SITE + "tutoriais/email-marketing/como-configurar-spf-e-dkim-no-cpanel/#hh-spf"; var RDNS = SITE + "internet/dns-reverso/#hh-rdns"; var DMG = SITE + "contas-de-email/spf-dkim-dmarc/#Gerador_de_registro_DMARC"; var QUEUE = SITE + "contas-de-email/codigos-de-erro-de-email/"; var PHISH = SITE + "tutoriais/seguranca/phishing/"; var PFX = "hh-hdr-"; var Q = String.fromCharCode(34); var NL = String.fromCharCode(10); var TAB = String.fromCharCode(9); var LT = String.fromCharCode(60); var GT = String.fromCharCode(62); var DOT = " " + String.fromCharCode(183) + " "; function U(n) { return String.fromCharCode(n); } var NCOL = {ok: ["#15803d", "#e8f5ec", String.fromCharCode(10004)], warn: ["#b45309", "#fff4e5", String.fromCharCode(9888)], bad: ["#b91c1c", "#fdecec", String.fromCharCode(10008)], info: ["#1d4ed8", "#eef3ff", String.fromCharCode(8505)]}; var LINK = "color:#1d4ed8;font-weight:700;"; var CARD = "background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:10px 14px;margin-top:10px;"; var HEAD = "font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#0b3d91;margin-bottom:4px;"; var MONO = "font-family:Consolas,Menlo,monospace;"; var NAMEC = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"; var SUF2 = " co.uk org.uk ac.uk gov.uk me.uk ltd.uk plc.uk net.uk com.br net.br org.br gov.br edu.br art.br blog.br eco.br ind.br adv.br eng.br med.br tur.br srv.br app.br dev.br log.br rec.br com.au net.au org.au edu.au gov.au co.nz org.nz net.nz co.jp ne.jp or.jp ac.jp co.za org.za com.mx org.mx gob.mx com.ar com.co com.pe com.tr co.in net.in org.in co.kr com.cn com.tw com.hk com.sg com.my co.id co.th com.ph co.il com.ua com.pl com.pt com.es com.ec com.uy com.py com.bo com.ve "; var SFV = {NSPM: "n"+U(227)+"o "+U(233)+" spam", SPM: "marcado como spam pelo filtro", SKA: "filtro pulado: o remetente est"+U(225)+" numa lista de permiss"+U(245)+"es da pol"+U(237)+"tica antispam", SKN: "filtro pulado por uma regra de fluxo de e-mail", SFE: "filtro pulado: o remetente est"+U(225)+" nos Remetentes Confi"+U(225)+"veis de quem recebeu", BLK: "bloqueado: o remetente est"+U(225)+" nos Remetentes Bloqueados de quem recebeu", SKB: "marcado como spam: o remetente est"+U(225)+" numa lista de bloqueio da pol"+U(237)+"tica antispam", SKI: "filtro pulado: o IP est"+U(225)+" na lista de permiss"+U(245)+"es do filtro de conex"+U(227)+"o", SKQ: "liberado da quarentena", SKS: "marcado como spam por uma regra de fluxo de e-mail"}; var CAT = {NONE: "nenhuma amea"+U(231)+"a encontrada", SPM: "spam", HSPM: "spam de alta confian"+U(231)+"a", BULK: "e-mail em massa", PHSH: "phishing", HPHSH: "phishing de alta confian"+U(231)+"a", HPHISH: "phishing de alta confian"+U(231)+"a", SPOOF: "falsifica"+U(231)+U(227)+"o do remetente", MALW: "malware", AMP: "malware", DIMP: "imita"+U(231)+U(227)+"o de dom"+U(237)+"nio", UIMP: "imita"+U(231)+U(227)+"o de usu"+U(225)+"rio", GIMP: "imita"+U(231)+U(227)+"o detectada pela intelig"+U(234)+"ncia da caixa postal", BIMP: "imita"+U(231)+U(227)+"o de marca", INTOS: "phishing dentro da organiza"+U(231)+U(227)+"o", OSPM: "spam de sa"+U(237)+"da", SAP: "Anexos Seguros", FTBP: "tipo de anexo bloqueado"}; var COMP = {"000": "o DMARC falhou e a pol"+U(237)+"tica do dom"+U(237)+"nio "+U(233)+" quarantine ou reject", "001": "falha impl"+U(237)+"cita: o dom"+U(237)+"nio n"+U(227)+"o tem registros de autentica"+U(231)+U(227)+"o, ou s"+U(243)+" registros fracos", "002": "uma pol"+U(237)+"tica do administrador bloqueia e-mail falsificado deste remetente", "100": "o SPF ou o DKIM passou e bate com o From", "101": "assinado com DKIM pelo dom"+U(237)+"nio do From", "102": "o SPF passou e bate com o From", "130": "um selo ARC confi"+U(225)+"vel anulou a falha de DMARC"}; function el(id) { return document.getElementById(PFX + id); } function add(p, tag, text, style) { var n = document.createElement(tag); if (text) { n.textContent = text; } if (style) { n.setAttribute("style", style); } p.appendChild(n); return n; } function or(a, b) { return a ? a : b; } function has(s, x) { return String(s).indexOf(x) !== -1; } function gt(a, b) { return a === b ? false : Math.max(a, b) === a; } function lt(a, b) { return a === b ? false : Math.min(a, b) === a; } function btw(x, a, b) { return lt(x, a) ? false : !gt(x, b); } function low(s) { return String(or(s, "")).toLowerCase(); } function starts(s, x) { return String(s).indexOf(x) === 0; } function ws(c) { return c === " " ? true : c === TAB; } function plural(n, one, many) { return n === 1 ? one : many; } function parse(text, flat) { var lines = String(text).split(NL); var list = []; var cur = null; for (var i = 0; i !== lines.length; i++) { var line = lines[i]; if (line.charCodeAt(line.length - 1) === 13) { line = line.slice(0, -1); } if (flat) { line = line.trim(); } if (line.trim() === "") { cur = null; continue; } if (ws(line.charAt(0))) { if (cur) { cur.v = (cur.v + " " + line.trim()).trim(); } continue; } var c = line.indexOf(":"); var ok = gt(c, 0); for (var k = 0; ok ? k !== c : false; k++) { if (!has(NAMEC, line.charAt(k))) { ok = false; } } if (ok) { cur = {n: line.slice(0, c), l: low(line.slice(0, c)), v: line.slice(c + 1).trim()}; list.push(cur); } else { cur = null; } } return list; } function all(h, n) { var r = []; for (var i = 0; i !== h.length; i++) { if (h[i].l === n) { r.push(h[i].v); } } return r; } function get(h, n) { var r = all(h, n); return r.length ? r[0] : ""; } function strip(s) { s = String(s); var t = ""; var c = []; var cur = ""; var depth = 0; var q = false; for (var i = 0; i !== s.length; i++) { var ch = s.charAt(i); if (ch === Q) { if (depth === 0) { q = !q; t += ch; } else { cur += ch; } continue; } if (q) { t += ch; continue; } if (ch === "(") { depth++; if (depth === 1) { cur = ""; continue; } } if (ch === ")") { if (depth === 0) { t += ch; continue; } depth--; if (depth === 0) { c.push(cur.trim()); t += " "; continue; } } if (depth === 0) { t += ch; } else { cur += ch; } } return {t: t, c: c}; } function toks(s) { s = String(s); var r = []; var cur = ""; var q = false; for (var i = 0; i !== s.length; i++) { var ch = s.charAt(i); if (ch === Q) { q = !q; continue; } if (q ? false : ws(ch)) { if (cur) { r.push(cur); } cur = ""; continue; } cur += ch; } if (cur) { r.push(cur); } return r; } function kv(s, key) { var t = toks(s); for (var i = 0; i !== t.length; i++) { if (starts(low(t[i]), key + "=")) { return t[i].slice(key.length + 1).split(",").join("").split(";").join(""); } } return ""; } function dom(x) { x = low(x).trim(); var a = x.lastIndexOf("@"); if (a !== -1) { x = x.slice(a + 1); } x = x.split(LT).join("").split(GT).join("").split(" ").join("").split(";").join(""); while (x.charAt(x.length - 1) === ".") { x = x.slice(0, -1); } return x; } function org(d) { var p = d.split("."); if (lt(p.length, 3)) { return d; } var l2 = p.slice(-2).join("."); return has(SUF2, " " + l2 + " ") ? p.slice(-3).join(".") : l2; } function align(a, f) { if (!a ? true : !f) { return ""; } if (a === f) { return "exact"; } return org(a) === org(f) ? "relaxed" : "no"; } function digits(s) { if (!s) { return false; } for (var i = 0; i !== s.length; i++) { if (!has("0123456789", s.charAt(i))) { return false; } } return true; } function isV4(s) { var p = String(s).split("."); if (p.length !== 4) { return false; } for (var i = 0; i !== 4; i++) { if (!digits(p[i]) ? true : (gt(p[i].length, 3) ? true : gt(Number(p[i]), 255))) { return false; } } return true; } function isV6(s) { s = String(s); if (!has(s, "::") ? lt(s.split(":").length, 6) : false) { return false; } for (var i = 0; i !== s.length; i++) { if (!has("0123456789abcdefABCDEF:.", s.charAt(i))) { return false; } } return gt(s.length, 2); } function findIP(s) { var t = toks(String(s).split("[").join(" ").split("]").join(" ").split("(").join(" ").split(")").join(" ").split(",").join(" ").split(";").join(" ")); for (var i = 0; i !== t.length; i++) { var x = t[i]; if (starts(low(x), "ipv6:")) { x = x.slice(5); } if (starts(low(x), "client-ip=")) { x = x.slice(10); } while (x.charAt(x.length - 1) === ".") { x = x.slice(0, -1); } if (isV4(x) ? true : isV6(x)) { return x; } } return ""; } function priv(ip) { var l = low(ip); if (isV6(ip)) { return l === "::1" ? true : (starts(l, "fe80") ? true : (starts(l, "fc") ? true : starts(l, "fd"))); } var p = ip.split("."); var a = Number(p[0]); var b = Number(p[1]); if (a === 10 ? true : a === 127) { return true; } if (a === 192 ? b === 168 : false) { return true; } if (a === 172 ? btw(b, 16, 31) : false) { return true; } if (a === 169 ? b === 254 : false) { return true; } return a === 100 ? btw(b, 64, 127) : false; } function parseAR(v) { var segs = String(v).split(";"); var res = []; var id = ""; for (var i = 0; i !== segs.length; i++) { var sc = strip(segs[i]); var t = toks(sc.t); if (!t.length) { continue; } var e = t[0].indexOf("="); if (e === -1) { if (i === 0) { id = t[0]; } continue; } var r = {m: low(t[0].slice(0, e)), r: low(t[0].slice(e + 1)), p: {}, c: sc.c.join(" ")}; for (var k = 1; k !== t.length; k++) { var q = t[k].indexOf("="); if (gt(q, 0)) { r.p[low(t[k].slice(0, q))] = t[k].slice(q + 1); } } res.push(r); } return {id: id, r: res}; } function pick(res, m) { var o = []; for (var i = 0; i !== res.length; i++) { if (res[i].m === m) { o.push(res[i]); } } return o; } function addr(v) { v = String(or(v, "")); var a = v.lastIndexOf(LT); var b = v.lastIndexOf(GT); if (a !== -1 ? gt(b, a) : false) { return {name: v.slice(0, a).split(Q).join("").trim(), mail: v.slice(a + 1, b).trim()}; } var s = strip(v); return {name: s.c.join(" ").trim(), mail: s.t.trim()}; } function rcv(v) { var s = String(v); var semi = s.lastIndexOf(";"); var ds = semi === -1 ? "" : s.slice(semi + 1).trim(); var body = semi === -1 ? s : s.slice(0, semi); var t = ds ? Date.parse(strip(ds).t.trim()) : NaN; var w = toks(strip(body).t); var o = {from: "", by: "", wi: "", ip: "", t: isNaN(t) ? null : t}; for (var i = 0; lt(i, w.length - 1); i++) { var x = low(w[i]); if (x === "from" ? !o.from : false) { o.from = w[i + 1]; } if (x === "by" ? !o.by : false) { o.by = w[i + 1]; } if (x === "with" ? !o.wi : false) { var wl = [w[i + 1]]; for (var j = i + 2; lt(j, Math.min(w.length, i + 4)); j++) { if (has(" id via for ", " " + low(w[j]) + " ")) { break; } wl.push(w[j]); } o.wi = wl.join(" "); } } var lb = low(body); var bi = lb.indexOf(" by "); var fp = starts(lb, "by ") ? "" : (bi === -1 ? body : body.slice(0, bi)); o.ip = findIP(fp); var lw = low(s); o.tls = has(lw, "smtps") ? true : (has(lw, "tls") ? true : (has(lw, "https") ? true : has(lw, "ssl"))); o.plain = has(" smtp esmtp esmtpa ", " " + low(o.wi) + " ") ? !o.tls : false; return o; } function dur(s) { var neg = lt(s, 0); s = Math.round(Math.abs(s)); var r; if (lt(s, 60)) { r = s + " s"; } else if (lt(s, 3600)) { r = Math.floor(s / 60) + " min" + (s % 60 ? " " + (s % 60) + " s" : ""); } else { r = Math.floor(s / 3600) + " h" + (Math.floor((s % 3600) / 60) ? " " + Math.floor((s % 3600) / 60) + " min" : ""); } return (neg ? "-" : "") + r; } function lev(r) { r = " " + low(r) + " "; if (has(" pass not spam nspm ", r)) { return "ok"; } if (has(" fail permerror hardfail spam spm skb sks blk ", r)) { return "bad"; } if (has(" softfail neutral none temperror policy bestguesspass softpass ", r)) { return "warn"; } return "info"; } function note(parent, level, text, href, ltext) { var c = NCOL[level]; var d = add(parent, "div", "", "background:" + c[1] + ";border-left:4px solid " + c[0] + ";border-radius:6px;padding:8px 11px;margin:8px 0 0;font-size:14px;line-height:1.5;color:#0F172A;overflow-wrap:anywhere;"); add(d, "span", c[2] + " ", "color:" + c[0] + ";font-weight:800;"); d.appendChild(document.createTextNode(text + " ")); if (href) { add(d, "a", ltext, LINK).setAttribute("href", href); } return d; } function chip(parent, text, level, plain) { var c = NCOL[level]; return add(parent, "span", text, "display:inline-block;padding:1px 9px;border-radius:999px;background:" + c[1] + ";color:" + c[0] + ";border:1px solid " + c[0] + ";font-size:12.5px;font-weight:800;" + (plain ? "" : "text-transform:uppercase;letter-spacing:.03em;") + "max-width:100%;overflow-wrap:anywhere;"); } function alchip(parent, a, f) { if (a === "exact") { chip(parent, "bate com o From", "ok", true); } else if (a === "relaxed") { chip(parent, "mesma organiza"+U(231)+U(227)+"o do From", "ok", true); } else if (a === "no") { chip(parent, "n"+U(227)+"o bate com " + f, "bad", true); } } function row(card, label, result, domain, al, f, text, lvo) { var r = add(card, "div", "", "border-top:1px solid #eef2f6;padding:8px 0 6px;"); var top = add(r, "div", "", "display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;"); add(top, "strong", label, "min-width:52px;color:#0b3d91;font-size:14.5px;"); chip(top, or(result, "none"), lvo ? lvo : lev(or(result, "none"))); if (domain) { add(top, "span", domain, MONO + "font-size:13.5px;color:#334155;overflow-wrap:anywhere;"); } alchip(top, al, f); if (text) { add(r, "div", text, "font-size:13.5px;color:#475569;line-height:1.45;margin-top:3px;"); } return r; } function spfText(r, d) { d = or(d, "o dom"+U(237)+"nio de envio"); var m = {pass: "O servidor que enviou est"+U(225)+" autorizado no registro SPF de " + d + ".", fail: "O registro SPF de " + d + " n"+U(227)+"o lista o servidor que enviou e termina em -all.", softfail: "O registro SPF de " + d + " n"+U(227)+"o lista o servidor que enviou (~all).", neutral: "O registro SPF de " + d + " n"+U(227)+"o diz nada sobre este servidor (?all).", none: d + " n"+U(227)+"o tem registro SPF.", temperror: "Uma consulta de DNS falhou por um momento durante a verifica"+U(231)+U(227)+"o do SPF.", permerror: "O registro SPF de " + d + " est"+U(225)+" quebrado: erro de sintaxe ou mais de 10 consultas de DNS."}; return or(m[r], ""); } function dkimText(r, d, reason) { var lr = low(reason); var rs = reason ? " Motivo informado: " + reason + "." : ""; if (r === "pass") { return "A assinatura de " + d + " foi verificada: a mensagem n"+U(227)+"o foi alterada depois de assinada."; } if (r === "none") { return "A mensagem n"+U(227)+"o tem assinatura DKIM."; } if (r === "fail" ? has(lr, "body hash") : false) { return "O hash do corpo n"+U(227)+"o confere: a mensagem foi alterada depois de assinada, muitas vezes pelo rodap"+U(233)+" de uma lista de e-mail, por um redirecionamento ou por um filtro de seguran"+U(231)+"a."; } if (r === "fail") { return "A assinatura de " + d + " n"+U(227)+"o foi verificada. Ou a mensagem foi alterada no caminho, ou a chave p"+U(250)+"blica no DNS n"+U(227)+"o "+U(233)+" a mesma usada para assinar." + rs; } if (r === "permerror" ? has(lr, "key") : false) { return "A chave p"+U(250)+"blica desta assinatura n"+U(227)+"o foi encontrada no DNS ou est"+U(225)+" malformada." + rs; } if (r === "permerror") { return "A assinatura ou a chave dela no DNS est"+U(225)+" malformada." + rs; } if (r === "temperror") { return "Uma consulta de DNS pela chave de assinatura falhou por um momento."; } return reason ? "Motivo informado: " + reason + "." : ""; } function app(x) { x = low(x); return x === "none" ? "none (entregue normalmente)" : (x === "quarantine" ? "quarantine (pasta de spam)" : (x === "reject" ? "reject" : (x === "oreject" ? "lixo eletr"+U(244)+"nico em vez de reject (exce"+U(231)+U(227)+"o da Microsoft)" : (starts(x, "pct.") ? "n"+U(227)+"o aplicada a esta mensagem (amostragem pct)" : x)))); } function pol(x) { x = low(x); return x === "reject" ? "reject" : (x === "quarantine" ? "quarantine (pasta de spam)" : (x === "none" ? "none (s"+U(243)+" monitoramento)" : x)); } function example() { var L = [ "Delivered-To: maria@example.org", "Received: by 2002:a05:7300:5b14:b0:1a2:3c4d:5e6f with SMTP id k20csp1290532dyb;", "        Tue, 20 Oct 2026 07:41:09 -0700 (PDT)", "Return-Path: {bounce-7731@mail.sender.example.net}", "Received: from mail.sender.example.net (mail.sender.example.net. [198.51.100.24])", "        by mx.google.com with ESMTPS id 5b1f17b1804b1-4a2c3d4e5f6sm2004411f8f.71", "        for {maria@example.org}", "        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);", "        Tue, 20 Oct 2026 07:41:08 -0700 (PDT)", "Received-SPF: pass (google.com: domain of bounce-7731@mail.sender.example.net designates 198.51.100.24 as permitted sender) client-ip=198.51.100.24;", "Authentication-Results: mx.google.com;", "       dkim=pass header.i=@sender.example.net header.s=s1 header.b=Xk3Lq9vA;", "       spf=pass (google.com: domain of bounce-7731@mail.sender.example.net designates 198.51.100.24 as permitted sender) smtp.mailfrom=bounce-7731@mail.sender.example.net;", "       dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=QUARANTINE) header.from=example.com", "Received: from app01.example.com (app01.example.com [203.0.113.10])", "        by mail.sender.example.net (Postfix) with ESMTPS id 4C1D2E3F4A", "        for {maria@example.org}; Tue, 20 Oct 2026 14:34:51 +0000 (UTC)", "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sender.example.net; s=s1;", "        h=from:to:subject:date:message-id; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;", "        b=Xk3Lq9vAhR2mT8wZ0pQe5sN1cY7uJ4fB6dK9gL3xV0aE2rW8yU5iO1tH7nM4bC6", "From: Loja Exemplo {news@example.com}", "Reply-To: {suporte@example.com}", "To: maria@example.org", "Subject: Seu pedido foi enviado", "Date: Tue, 20 Oct 2026 14:34:50 +0000", "Message-ID: {20261020143450.4C1D2E3F4A@app01.example.com}" ]; return L.join(NL).split("{").join(LT).split("}").join(GT); } function calc() { var out = el("out"); var st = el("st"); out.textContent = ""; st.textContent = ""; var raw = el("in").value; if (!raw.trim()) { return; } var h = parse(raw, false); if (!h.length) { h = parse(raw, true); } var ars = all(h, "authentication-results"); var recs = all(h, "received"); var fromV = get(h, "from"); var sigs = all(h, "dkim-signature"); var rspf = get(h, "received-spf"); if (!ars.length ? (!recs.length ? (!fromV ? !sigs.length : false) : false) : false) { st.textContent = "Isso n"+U(227)+"o parece um cabe"+U(231)+"alho de e-mail. Cole o cabe"+U(231)+"alho original, com linhas como Received: e From:."; return; } var fa = addr(fromV); var ar = ars.length ? parseAR(ars[0]) : {id: "", r: []}; var spf = pick(ar.r, "spf"); var dk = pick(ar.r, "dkim"); var dm = pick(ar.r, "dmarc"); var arc = pick(ar.r, "arc"); var cp = pick(ar.r, "compauth"); var fromD = or(dom(fa.mail), dm.length ? dom(or(dm[0].p["header.from"], "")) : ""); var spfR = ""; var spfD = ""; var spfIP = ""; var spfSrc = ""; if (spf.length) { spfR = spf[0].r; spfD = dom(or(spf[0].p["smtp.mailfrom"], or(spf[0].p["smtp.helo"], ""))); spfIP = findIP(spf[0].c); } else if (rspf) { spfR = low(or(toks(rspf)[0], "")); spfD = dom(or(kv(rspf, "envelope-from"), get(h, "return-path"))); spfSrc = " (do Received-SPF)"; } if (!spfIP ? rspf : false) { spfIP = or(findIP(kv(rspf, "client-ip")), findIP(strip(rspf).c.join(" "))); } var spfAl = align(spfD, fromD); var spfOK = spfR === "pass" ? (spfAl === "exact" ? true : spfAl === "relaxed") : false; var dks = []; var dkOK = false; for (var i = 0; i !== dk.length; i++) { var dd = dom(or(dk[i].p["header.d"], or(dk[i].p["header.i"], ""))); if (dd === "none") { dd = ""; } var al = align(dd, fromD); dks.push({r: dk[i].r, d: dd, al: al, reason: or(dk[i].p.reason, ""), s: or(dk[i].p["header.s"], "")}); if (dk[i].r === "pass" ? (al === "exact" ? true : al === "relaxed") : false) { dkOK = true; } } var dmR = dm.length ? dm[0].r : ""; var p = ""; var dis = ""; if (dm.length) { p = or(kv(dm[0].c, "p"), ""); dis = or(kv(dm[0].c, "dis"), or(dm[0].p.action, "")); } var fd = or(fromD, "o dom"+U(237)+"nio do remetente"); var lv = "info"; var title = ""; var text = ""; if (dmR === "pass") { lv = "ok"; title = "O DMARC passou"; text = (spfOK ? (dkOK ? "O SPF e o DKIM passaram" : "O SPF passou") : (dkOK ? "O DKIM passou" : "O SPF ou o DKIM passou")) + " para um dom"+U(237)+"nio que bate com o endere"+U(231)+"o do remetente (From), " + fd + "."; } else if (dmR === "fail") { lv = "bad"; title = "O DMARC falhou"; text = "Nem o SPF nem o DKIM passaram para um dom"+U(237)+"nio que bate com o endere"+U(231)+"o do remetente (From), " + fd + "." + (p ? " A pol"+U(237)+"tica do dom"+U(237)+"nio "+U(233)+" " + pol(p) + "." : "") + (dis ? " O servidor que recebeu aplicou: " + app(dis) + "." : ""); } else if (dmR === "none") { lv = "warn"; title = "Sem registro DMARC"; text = fd + " n"+U(227)+"o publica um registro DMARC, ent"+U(227)+"o cada servidor decide sozinho o que fazer com o e-mail que falha. Gmail, Yahoo e Microsoft exigem DMARC de quem envia em volume."; } else if (dmR === "bestguesspass") { lv = "warn"; title = "Sem registro DMARC"; text = fd + " n"+U(227)+"o publica um registro DMARC. Pela estimativa da Microsoft, a mensagem teria passado."; } else if (dmR === "temperror") { lv = "warn"; title = "N"+U(227)+"o deu para verificar o DMARC"; text = "Uma consulta de DNS pelo registro DMARC de " + fd + " falhou por um momento. Uma pr"+U(243)+"xima mensagem pode passar."; } else if (dmR === "permerror") { lv = "bad"; title = "O registro DMARC est"+U(225)+" quebrado"; text = "N"+U(227)+"o deu para ler o registro DMARC de " + fd + ". "+U(201)+" uma das causas do erro 554 5.7.5."; } else if (dmR) { title = "Resultado do DMARC: " + dmR; } else if (ars.length) { title = "Nenhum resultado de DMARC registrado"; text = "O servidor que recebeu registrou o SPF e o DKIM, mas n"+U(227)+"o fez a verifica"+U(231)+U(227)+"o de DMARC."; } else { title = "Sem o cabe"+U(231)+"alho Authentication-Results"; text = "As verifica"+U(231)+U(245)+"es do servidor que recebeu n"+U(227)+"o est"+U(227)+"o no que voc"+U(234)+" colou. Copie o cabe"+U(231)+"alho original completo: Mostrar original no Gmail, Exibir detalhes da mensagem no Outlook."; } var c0 = NCOL[lv]; var ban = add(out, "div", "", "background:" + c0[1] + ";border:1px solid " + c0[0] + ";border-left:6px solid " + c0[0] + ";border-radius:10px;padding:10px 14px;"); add(ban, "div", c0[2] + " " + title, "font-size:17px;font-weight:800;color:" + c0[0] + ";"); if (text) { add(ban, "div", text, "font-size:14px;line-height:1.5;margin-top:3px;color:#0F172A;overflow-wrap:anywhere;"); } var ac = add(out, "div", "", CARD); add(ac, "div", "Autentica"+U(231)+U(227)+"o" + (ar.id ? DOT + "verificada por " + ar.id : ""), HEAD); if (fromD) { var fl = add(ac, "div", "", "font-size:13.5px;color:#334155;margin-bottom:4px;"); fl.appendChild(document.createTextNode("Dom"+U(237)+"nio do remetente (From): ")); add(fl, "strong", fromD, MONO); } if (spfR) { row(ac, "SPF", spfR, spfD, spfR === "pass" ? spfAl : "", fromD, spfText(spfR, spfD) + spfSrc); } else { row(ac, "SPF", "none", "", "", fromD, "Nenhum resultado de SPF registrado."); } if (dks.length) { for (var j = 0; j !== dks.length; j++) { row(ac, "DKIM", dks[j].r, dks[j].d, dks[j].r === "pass" ? dks[j].al : "", fromD, dkimText(dks[j].r, dks[j].d, dks[j].reason)); } } else if (sigs.length) { for (var g = 0; g !== sigs.length; g++) { var sd = dom(kv(sigs[g], "d")); row(ac, "DKIM", "assinado", sd, "", fromD, "Assinado por " + sd + ", mas o resultado da verifica"+U(231)+U(227)+"o do servidor que recebeu n"+U(227)+"o est"+U(225)+" no cabe"+U(231)+"alho.", "info"); } } else { row(ac, "DKIM", "none", "", "", fromD, "A mensagem n"+U(227)+"o tem assinatura DKIM."); } if (dmR) { row(ac, "DMARC", dmR, dm[0].p["header.from"] ? dom(dm[0].p["header.from"]) : "", "", fromD, p ? "Pol"+U(237)+"tica: " + pol(p) + (dis ? DOT + "aplicada: " + app(dis) : "") : (dis ? "Aplicada: " + app(dis) : "")); } if (arc.length) { row(ac, "ARC", arc[0].r, "", "", fromD, arc[0].r === "pass" ? "A mensagem foi encaminhada, e a cadeia de resultados anteriores est"+U(225)+" intacta." : "A cadeia ARC dos servidores anteriores n"+U(227)+"o foi validada."); } if (cp.length) { var rc = or(cp[0].p.reason, ""); row(ac, "compauth", cp[0].r, "", "", fromD, "Resultado combinado da Microsoft" + (rc ? DOT + "motivo " + rc + (COMP[rc] ? ": " + COMP[rc] : "") : "") + "."); } if (dmR === "fail") { if (spfR === "pass" ? spfAl === "no" : false) { note(out, "warn", "O SPF passou, mas para " + spfD + ", e n"+U(227)+"o para " + fromD + ". A mensagem saiu por um servi"+U(231)+"o que usa o pr"+U(243)+"prio endere"+U(231)+"o de retorno, ent"+U(227)+"o o SPF n"+U(227)+"o tem como bater com o seu dom"+U(237)+"nio. A solu"+U(231)+U(227)+"o "+U(233)+" o DKIM: fa"+U(231)+"a esse servi"+U(231)+"o assinar com " + fromD + " (DKIM personalizado) ou configure um endere"+U(231)+"o de retorno personalizado dentro de " + fromD + "."); } var dkp = false; var dkf = false; for (var m = 0; m !== dks.length; m++) { if (dks[m].r === "pass" ? dks[m].al === "no" : false) { dkp = dks[m].d; } if (dks[m].r === "fail" ? true : dks[m].r === "permerror") { if (!has(low(dks[m].reason), "body hash")) { dkf = dks[m]; } } } if (dkp) { note(out, "warn", "O DKIM passou, mas a assinatura "+U(233)+" de " + dkp + ", e n"+U(227)+"o de " + fromD + ". Configure o DKIM de " + fromD + " no servi"+U(231)+"o que envia, para a assinatura levar o seu dom"+U(237)+"nio."); } if (dkf) { note(out, "warn", "Confira a chave DKIM: consulte " + (dkf.s ? dkf.s : "SELETOR") + "._domainkey." + dkf.d + " e compare com a chave configurada no servi"+U(231)+"o que envia.", SPFCHK, "Verificador de SPF, DKIM e DMARC"); } var signed = sigs.length ? true : false; for (var n2 = 0; n2 !== dks.length; n2++) { if (dks[n2].r !== "none") { signed = true; } } if (!signed) { note(out, "warn", "A mensagem n"+U(227)+"o tem assinatura DKIM. Ative a assinatura DKIM de " + fromD + " em todo lugar de onde esse e-mail sai: "+U(233)+" a verifica"+U(231)+U(227)+"o que continua valendo quando a mensagem "+U(233)+" encaminhada."); } if (spfOK ? true : dkOK) { note(out, "info", "Uma verifica"+U(231)+U(227)+"o alinhada passou aqui, e mesmo assim o DMARC falhou. O dom"+U(237)+"nio pode exigir alinhamento estrito (aspf=s ou adkim=s), em que um subdom"+U(237)+"nio n"+U(227)+"o conta como igual."); } if (arc.length ? arc[0].r === "pass" : false) { note(out, "info", "O ARC passou: a mensagem foi encaminhada, e quem recebeu ainda pode confiar nos resultados originais."); } } if (dmR === "none" ? true : dmR === "bestguesspass") { note(out, "warn", "Publique um registro DMARC para " + fd + ". Comece com p=none e um endere"+U(231)+"o rua para receber os relat"+U(243)+"rios.", DMG, "Gerador de registro DMARC"); } if (spfR === "permerror") { note(out, "bad", "O registro SPF de " + or(spfD, fd) + " "+U(233)+" inv"+U(225)+"lido ou precisa de mais de 10 consultas de DNS. Os servidores tratam isso como falha.", SPFCHK, "Verificar o SPF"); } else if (spfR === "fail" ? true : spfR === "softfail") { note(out, "warn", "O servidor que enviou esta mensagem n"+U(227)+"o est"+U(225)+" no registro SPF de " + or(spfD, fd) + ". Acrescente o include do servi"+U(231)+"o que envia, ou o IP dele" + (spfIP ? " (" + spfIP + ")" : "") + ".", SPFCHK, "Verificar o SPF"); } if (ars.length ? gt(ars.length, 1) : false) { note(out, "info", ars.length + " cabe"+U(231)+"alhos Authentication-Results encontrados. O analisador l"+U(234)+" o de cima, colocado pelo servidor que entregou a mensagem a voc"+U(234)+". Os outros foram colocados antes, no caminho, ou pelo pr"+U(243)+"prio remetente."); } var rr = []; for (var k = recs.length - 1; k !== -1; k--) { rr.push(rcv(recs[k])); } if (rr.length) { var rc2 = add(out, "div", "", CARD); var first = null; var last = null; for (var a = 0; a !== rr.length; a++) { if (rr[a].t !== null) { if (first === null) { first = rr[a].t; } last = rr[a].t; } } add(rc2, "div", "Caminho" + DOT + rr.length + plural(rr.length, " servidor", " servidores") + (first !== null ? (last !== first ? DOT + dur((last - first) / 1000) + " do primeiro ao "+U(250)+"ltimo" : "") : ""), HEAD); var slow = []; var skew = []; var plain = []; for (var b = 0; b !== rr.length; b++) { var x = rr[b]; var dl = null; if (gt(b, 0) ? (x.t !== null ? rr[b - 1].t !== null : false) : false) { dl = (x.t - rr[b - 1].t) / 1000; } var hr = add(rc2, "div", "", "border-top:1px solid #eef2f6;padding:7px 0;font-size:13.5px;line-height:1.45;"); var ht = add(hr, "div", "", "display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;"); add(ht, "strong", "Salto " + (b + 1), "color:#0b3d91;"); if (dl === null) { add(ht, "span", b === 0 ? "in"+U(237)+"cio" : "sem hor"+U(225)+"rio", "color:#64748b;font-size:12.5px;"); } else { var dlv = lt(dl, 300) ? (lt(dl, -60) ? "info" : "ok") : "warn"; chip(ht, (lt(dl, 0) ? "" : "+") + dur(dl), dlv, true); if (dlv === "warn") { slow.push([b + 1, dl, or(rr[b - 1].by, "o servidor anterior")]); } if (dlv === "info") { skew.push(b + 1); } } if (x.tls) { chip(ht, "TLS", "ok"); } else if (x.plain ? (x.ip ? !priv(x.ip) : false) : false) { chip(ht, "sem TLS", "warn"); plain.push(b + 1); } if (x.from ? true : x.ip) { var fr = add(hr, "div", "", "color:#334155;overflow-wrap:anywhere;"); fr.appendChild(document.createTextNode("de ")); add(fr, "span", or(x.from, "?") + (x.ip ? " [" + x.ip + "]" : ""), MONO); } if (x.by) { var br = add(hr, "div", "", "color:#334155;overflow-wrap:anywhere;"); br.appendChild(document.createTextNode("por ")); add(br, "span", x.by, MONO); if (x.wi) { br.appendChild(document.createTextNode(" com " + x.wi)); } } } for (var s1 = 0; s1 !== slow.length; s1++) { note(out, "warn", "A mensagem ficou parada " + dur(slow[s1][1]) + " em " + slow[s1][2] + ", entre o salto " + (slow[s1][0] - 1) + " e o salto " + slow[s1][0] + ". Uma espera assim "+U(233)+" fila: esse servidor n"+U(227)+"o conseguiu repassar a mensagem na hora e tentou de novo, ou o servidor seguinte adiou a entrega.", QUEUE, "Por que alguns e-mails chegam atrasados"); } if (skew.length) { note(out, "info", plural(skew.length, "O salto ", "Os saltos ") + skew.join(", ") + plural(skew.length, " tem", " t"+U(234)+"m") + " hor"+U(225)+"rio anterior ao do salto de antes: os rel"+U(243)+"gios dos servidores n"+U(227)+"o batem, ent"+U(227)+"o esse atraso n"+U(227)+"o d"+U(225)+" para medir."); } if (plain.length) { note(out, "info", plural(plain.length, "O salto ", "Os saltos ") + plain.join(", ") + plural(plain.length, " chegou", " chegaram") + " de um endere"+U(231)+"o p"+U(250)+"blico sem TLS, ent"+U(227)+"o esse trecho n"+U(227)+"o foi criptografado."); } } if (spfIP) { note(out, "info", "O servidor que enviou foi " + spfIP + ". Confira o DNS reverso dele: e-mail de um IP sem um PTR que aponte de volta costuma ser recusado.", RDNS, "Verificador de DNS reverso"); } var sp = add(document.createElement("div"), "div", "", ""); var any = false; var xs = get(h, "x-spam-status"); if (xs) { any = true; var yes = starts(low(xs).trim(), "yes"); var sc = kv(xs, "score"); var rq = kv(xs, "required"); var ti = low(xs).indexOf("tests="); var tests = ""; if (ti !== -1) { tests = xs.slice(ti + 6); var cut = [" autolearn=", " version=", " shortcircuit="]; for (var u = 0; u !== cut.length; u++) { var ci = low(tests).indexOf(cut[u]); if (ci !== -1) { tests = tests.slice(0, ci); } } tests = tests.split(" ").join("").split(",").filter(function (z) { return z !== ""; }).slice(0, 10).join(", "); } row(sp, "Spam", yes ? "spam" : "n"+U(227)+"o "+U(233)+" spam", sc ? "nota " + sc + (rq ? " de " + rq : "") : "", "", "", "SpamAssassin (X-Spam-Status)" + (tests ? ". Regras que dispararam: " + tests : "") + ".", yes ? "bad" : "ok"); } var xsc = get(h, "x-spam-score"); if (xsc ? !xs : false) { any = true; row(sp, "Spam", "nota", xsc, "", "", "Nota de spam do X-Spam-Score. Cada filtro define o pr"+U(243)+"prio limite.", "info"); } var far = get(h, "x-forefront-antispam-report"); if (far) { any = true; var mp = {}; var pr = far.split(";"); for (var z = 0; z !== pr.length; z++) { var ix = pr[z].indexOf(":"); if (gt(ix, 0)) { mp[pr[z].slice(0, ix).trim().toUpperCase()] = pr[z].slice(ix + 1).trim(); } } var sfv = or(mp.SFV, "").toUpperCase(); var cat = or(mp.CAT, "").toUpperCase(); row(sp, "Microsoft", sfv ? sfv : "relat"+U(243)+"rio", cat ? "CAT:" + cat : "", "", "", (sfv ? "SFV:" + sfv + (SFV[sfv] ? ", " + SFV[sfv] : "") + ". " : "") + (cat ? "CAT:" + cat + (CAT[cat] ? ", " + CAT[cat] : "") + ". " : "") + (mp.SCL ? "SCL " + mp.SCL + ": no Microsoft 365, o SCL n"+U(227)+"o decide mais o resultado; o SFV e o CAT mostram o que aconteceu." : "")); } if (any) { var spc = add(out, "div", "", CARD); add(spc, "div", "Filtro de spam", HEAD); spc.appendChild(sp); } var mc = add(out, "div", "", CARD); add(mc, "div", "Mensagem", HEAD); var keys = [["From", "from"], ["Reply-To", "reply-to"], ["Return-Path", "return-path"], ["To", "to"], ["Subject", "subject"], ["Date", "date"], ["Message-ID", "message-id"]]; for (var y = 0; y !== keys.length; y++) { var vv = get(h, keys[y][1]); if (vv) { var mr = add(mc, "div", "", "display:flex;flex-wrap:wrap;gap:0 10px;border-top:1px solid #eef2f6;padding:5px 0;font-size:13.5px;"); add(mr, "strong", keys[y][0], "flex:0 0 96px;color:#334155;"); add(mr, "span", vv, "flex:1 1 220px;min-width:0;overflow-wrap:anywhere;color:#0F172A;"); } } var rt = dom(addr(get(h, "reply-to")).mail); if (rt ? (fromD ? org(rt) !== org(fromD) : false) : false) { note(out, "info", "As respostas v"+U(227)+"o para " + rt + ", um dom"+U(237)+"nio diferente de " + fromD + ". "+U(201)+" normal em newsletters e centrais de atendimento, e tamb"+U(233)+"m "+U(233)+" um truque cl"+U(225)+"ssico de phishing.", PHISH, "Como reconhecer phishing"); } if (has(fa.name, "@") ? dom(fa.name) !== fromD : false) { note(out, "bad", "O nome de exibi"+U(231)+U(227)+"o mostra " + fa.name + ", mas a mensagem vem de " + fa.mail + ". Mostrar um endere"+U(231)+"o e enviar de outro "+U(233)+" um truque comum de phishing.", PHISH, "Como reconhecer phishing"); } } add(root0, "div", "Analisador de cabe"+U(231)+"alho de e-mail", "font-weight:800;font-size:19px;color:#0b3d91;margin-bottom:4px;"); add(root0, "p", "Cole o cabe"+U(231)+"alho completo de uma mensagem. O analisador l"+U(234)+" os resultados de SPF, DKIM e DMARC que o servidor que recebeu registrou, confere se cada um bate com o dom"+U(237)+"nio do remetente e mostra o caminho que a mensagem fez, com o tempo em cada servidor. Nada sai do seu navegador.", "margin:0 0 10px;line-height:1.5;font-size:14.5px;"); var det = add(root0, "details", "", "margin:0 0 10px;background:#ffffff;border:1px solid #d5dce5;border-radius:10px;padding:8px 12px;font-size:14px;line-height:1.5;"); add(det, "summary", "Como copiar o cabe"+U(231)+"alho", "cursor:pointer;font-weight:700;color:#0b3d91;"); var ul = add(det, "ul", "", "margin:6px 0 2px;padding-left:20px;"); var HOW = [["Gmail: ", "abra a mensagem, clique nos tr"+U(234)+"s pontinhos ao lado de Responder e escolha Mostrar original. Copie tudo a partir da primeira linha."], ["Outlook na web e novo Outlook: ", "Mais a"+U(231)+U(245)+"es (tr"+U(234)+"s pontinhos), Exibir, Exibir detalhes da mensagem. No Outlook cl"+U(225)+"ssico, abra a mensagem em janela pr"+U(243)+"pria, depois Arquivo, Propriedades, e copie a caixa Cabe"+U(231)+"alhos da Internet."], ["Webmail da Homehost (Roundcube): ", "Mais (tr"+U(234)+"s pontinhos), Exibir c"+U(243)+"digo-fonte."], ["Thunderbird: ", "Ctrl+U (Cmd+U no Mac)."], ["Mail do Mac: ", "Visualizar, Mensagem, Todos os Cabe"+U(231)+"alhos."], ["No celular: ", "os aplicativos do Gmail e do iPhone n"+U(227)+"o mostram o cabe"+U(231)+"alho. Abra o e-mail no navegador do computador."]]; for (var h0 = 0; h0 !== HOW.length; h0++) { var li = add(ul, "li", "", ""); add(li, "strong", HOW[h0][0], ""); li.appendChild(document.createTextNode(HOW[h0][1])); } var lab = add(root0, "label", "Cabe"+U(231)+"alho da mensagem", "display:block;font-weight:700;font-size:14px;color:#0b3d91;margin-bottom:4px;"); lab.setAttribute("for", PFX + "in"); var ta = add(root0, "textarea", "", "width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid #9aa7b8;border-radius:8px;font-size:13px;line-height:1.45;background:#ffffff;color:#0F172A;font-family:Consolas,Menlo,monospace;resize:vertical;margin:0;"); ta.id = PFX + "in"; ta.setAttribute("rows", "9"); ta.setAttribute("spellcheck", "false"); ta.setAttribute("autocomplete", "off"); ta.setAttribute("autocapitalize", "off"); ta.setAttribute("placeholder", "Cole o cabe"+U(231)+"alho aqui, come"+U(231)+"ando por Delivered-To: ou Received:"); var bar = add(root0, "div", "", "display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;"); var bex = add(bar, "button", "Carregar um exemplo", "padding:7px 14px;border:1px solid #0b3d91;border-radius:8px;background:#ffffff;color:#0b3d91;font-size:14px;font-weight:700;cursor:pointer;line-height:1.3;"); bex.type = "button"; bex.id = PFX + "ex"; var bcl = add(bar, "button", "Limpar", "padding:7px 14px;border:1px solid #9aa7b8;border-radius:8px;background:#ffffff;color:#334155;font-size:14px;font-weight:700;cursor:pointer;line-height:1.3;"); bcl.type = "button"; bcl.id = PFX + "clr"; var st0 = add(root0, "div", "", "margin-top:10px;font-size:14px;color:#b45309;line-height:1.5;"); st0.id = PFX + "st"; st0.setAttribute("aria-live", "polite"); var out0 = add(root0, "div", "", "margin-top:4px;"); out0.id = PFX + "out"; out0.setAttribute("aria-live", "polite"); add(root0, "p", "Os resultados de SPF, DKIM e DMARC s"+U(227)+"o as verifica"+U(231)+U(245)+"es do pr"+U(243)+"prio servidor que recebeu, tiradas do cabe"+U(231)+"alho Authentication-Results de cima. O alinhamento segue o modo relaxado, em que um subdom"+U(237)+"nio da mesma organiza"+U(231)+U(227)+"o conta como igual.", "margin:14px 0 0;font-size:12.5px;color:#475569;line-height:1.5;"); ta.addEventListener("input", calc); bex.addEventListener("click", function () { ta.value = example(); calc(); }); bcl.addEventListener("click", function () { ta.value = ""; calc(); ta.focus(); }); })();</script>



<h2 class="wp-block-heading">O que é o cabeçalho de um e-mail</h2>



<p class="wp-block-paragraph">Todo e-mail tem duas partes: o cabeçalho e o corpo. O corpo é o texto, as imagens e os anexos. O cabeçalho é uma lista de campos no formato <strong>Nome: valor</strong>, um por linha, que vem antes do corpo.</p>



<p class="wp-block-paragraph">Parte desses campos é escrita por quem envia: <strong>From</strong> (remetente), <strong>To</strong> (destinatário), <strong>Subject</strong> (assunto), <strong>Date</strong> (data) e <strong>Message-ID</strong>, um identificador único da mensagem. O resto é acrescentado no caminho. Cada servidor que recebe a mensagem e a repassa adiante coloca uma linha <strong>Received</strong> no topo do cabeçalho, e o servidor que entrega a mensagem na sua caixa registra o resultado das verificações de autenticação.</p>



<p class="wp-block-paragraph">Por isso o cabeçalho funciona como um histórico da viagem do e-mail. Os campos escritos pelo remetente podem ser falsificados. Já as linhas acrescentadas pelo seu próprio provedor, que ficam no topo do cabeçalho, não podem ser alteradas por quem enviou.</p>



<h2 class="wp-block-heading">Como ver o cabeçalho completo do e-mail</h2>



<p class="wp-block-paragraph">O caminho muda de um serviço para outro, mas a ideia é sempre a mesma: abrir a mensagem e procurar a opção de ver o original, o código-fonte ou os detalhes da mensagem.</p>



<p class="wp-block-paragraph"><strong>Gmail (no computador)</strong></p>



<ol class="wp-block-list">
<li>Abra a mensagem.</li>



<li>Clique nos três pontinhos ao lado do botão Responder.</li>



<li>Escolha <strong>Mostrar original</strong>.</li>



<li>Na página que abre, clique em <strong>Copiar para a área de transferência</strong> e cole no analisador.</li>
</ol>



<p class="wp-block-paragraph"><strong>Outlook na web, Outlook.com e novo Outlook</strong></p>



<ol class="wp-block-list">
<li>Abra a mensagem.</li>



<li>Clique em <strong>Mais ações</strong> (os três pontinhos).</li>



<li>Vá em <strong>Exibir</strong> e depois em <strong>Exibir detalhes da mensagem</strong>.</li>



<li>Selecione todo o texto da janela e copie.</li>
</ol>



<p class="wp-block-paragraph"><strong>Outlook clássico (Windows)</strong></p>



<ol class="wp-block-list">
<li>Abra a mensagem com dois cliques, para ela aparecer em uma janela própria.</li>



<li>Clique em <strong>Arquivo</strong> e depois em <strong>Propriedades</strong>.</li>



<li>O cabeçalho fica na caixa <strong>Cabeçalhos da Internet</strong>. Clique dentro dela, selecione tudo com Ctrl+A e copie.</li>
</ol>



<p class="wp-block-paragraph"><strong>Webmail da Homehost (Roundcube)</strong></p>



<ol class="wp-block-list">
<li>Entre no Webmail e abra a mensagem.</li>



<li>Clique em <strong>Mais</strong> (os três pontinhos) e escolha <strong>Exibir código-fonte</strong>.</li>



<li>Copie a parte de cima, até a primeira linha em branco: ali termina o cabeçalho e começa o corpo da mensagem.</li>
</ol>



<p class="wp-block-paragraph"><strong>Thunderbird:</strong> selecione a mensagem e pressione Ctrl+U (Cmd+U no Mac). Copie o início do código-fonte, até a primeira linha em branco.</p>



<p class="wp-block-paragraph"><strong>Mail do Mac:</strong> com a mensagem aberta, vá em <strong>Visualizar</strong>, <strong>Mensagem</strong>, <strong>Todos os Cabeçalhos</strong>.</p>



<p class="wp-block-paragraph"><strong>No celular:</strong> os aplicativos do Gmail e do Mail do iPhone não mostram o cabeçalho completo. Abra a mensagem pelo navegador de um computador e siga os passos acima.</p>



<p class="wp-block-paragraph">Um cuidado: o cabeçalho mostra o seu endereço de e-mail e os servidores da sua empresa. Se for pedir ajuda a alguém, envie só o cabeçalho, sem o corpo da mensagem.</p>



<h2 class="wp-block-heading">As linhas mais importantes do cabeçalho</h2>



<p class="wp-block-paragraph">Um cabeçalho real pode ter dezenas de linhas, mas poucas importam para entender o que aconteceu com a mensagem. Estas são as principais:</p>



<div style="overflow-x:auto; margin:24px 0;">
<table style="width:100%; border-collapse:collapse; font-family:Arial, Helvetica, sans-serif; font-size:14.5px; min-width:640px;">
<thead>
<tr style="background-color:#0b3d91; color:#ffffff; text-align:left;">
<th style="padding:12px 14px; border:1px solid #0b3d91; color:#ffffff; white-space:nowrap;">Campo</th>
<th style="padding:12px 14px; border:1px solid #0b3d91; color:#ffffff;">O que mostra</th>
<th style="padding:12px 14px; border:1px solid #0b3d91; color:#ffffff;">Quem escreve</th>
</tr>
</thead>
<tbody>
<tr style="background-color:#f7fafd;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Received</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">Cada servidor por onde a mensagem passou, com o IP e o horário. Há uma linha para cada servidor</td><td style="padding:11px 14px; border:1px solid #dde6ef;">Cada servidor do caminho</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Return-Path</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">O endereço que recebe os avisos de erro de entrega. É o domínio que o SPF confere</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O servidor que entrega a mensagem</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>From</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">O remetente que aparece para você</td><td style="padding:11px 14px; border:1px solid #dde6ef;">Quem envia (pode ser falsificado)</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Reply-To</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">Para onde vão as respostas, quando é diferente do From</td><td style="padding:11px 14px; border:1px solid #dde6ef;">Quem envia</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Message-ID</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">Um identificador único da mensagem</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O programa ou o servidor de quem envia</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Authentication-Results</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">O resultado do SPF, do DKIM e do DMARC</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O servidor que recebeu</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>Received-SPF</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">O resultado do SPF, numa linha separada</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O servidor que recebeu</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>DKIM-Signature</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">A assinatura digital e o domínio que assinou</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O servidor de quem envia</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>ARC-Authentication-Results</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">Os resultados guardados quando a mensagem é encaminhada</td><td style="padding:11px 14px; border:1px solid #dde6ef;">Os servidores que encaminham a mensagem</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:11px 14px; border:1px solid #dde6ef; white-space:nowrap;"><strong>X-Spam-Status</strong></td><td style="padding:11px 14px; border:1px solid #dde6ef;">A nota e as regras do filtro de spam SpamAssassin</td><td style="padding:11px 14px; border:1px solid #dde6ef;">O filtro de spam do servidor que recebeu</td></tr>
</tbody>
</table>
</div>



<p class="wp-block-paragraph">Os campos que começam com <strong>X-</strong> são extras: cada serviço cria os seus, e eles não seguem um padrão único. O analisador reconhece os mais comuns, como o <strong>X-Spam-Status</strong> do SpamAssassin, o filtro de spam padrão dos servidores com cPanel, e o relatório antispam da Microsoft.</p>



<h2 class="wp-block-heading">Como ler o caminho da mensagem</h2>



<p class="wp-block-paragraph">As linhas <strong>Received</strong> contam a viagem do e-mail, mas de trás para frente. Cada servidor acrescenta a sua linha no topo, então a de baixo é a do primeiro servidor, perto de quem enviou, e a de cima é a do servidor que entregou a mensagem para você.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.homehost.com.br/blog/wp-content/uploads/2026/10/infografico-como-ler-o-caminho-de-um-email-683x1024.png" alt="Infográfico - Como ler o caminho de um email" class="wp-image-18502" width="683" height="1024" srcset="https://www.homehost.com.br/blog/wp-content/uploads/2026/10/infografico-como-ler-o-caminho-de-um-email-683x1024.png 683w, https://www.homehost.com.br/blog/wp-content/uploads/2026/10/infografico-como-ler-o-caminho-de-um-email-200x300.png 200w, https://www.homehost.com.br/blog/wp-content/uploads/2026/10/infografico-como-ler-o-caminho-de-um-email-768x1152.png 768w, https://www.homehost.com.br/blog/wp-content/uploads/2026/10/infografico-como-ler-o-caminho-de-um-email.png 1024w" sizes="(max-width: 683px) 100vw, 683px" /></figure>



<p class="wp-block-paragraph">Uma linha Received típica tem quatro partes:</p>



<pre class="wp-block-code"><code>Received: from mail.example.com (mail.example.com &#91;198.51.100.24])
        by mx.google.com with ESMTPS id 5b1f17b1804b1;
        Tue, 20 Oct 2026 07:41:08 -0700 (PDT)</code></pre>



<ul class="wp-block-list">
<li><strong>from:</strong> o servidor que entregou a mensagem nesta etapa. O nome que vem logo depois de from é o que esse servidor disse ser. O IP entre colchetes é o que o servidor que recebeu viu de fato. Em caso de dúvida, confie no IP.</li>



<li><strong>by:</strong> o servidor que recebeu a mensagem nesta etapa.</li>



<li><strong>with:</strong> o protocolo usado. ESMTPS indica conexão criptografada com TLS.</li>



<li><strong>data e hora:</strong> quando a mensagem passou por ali, depois do ponto e vírgula.</li>
</ul>



<p class="wp-block-paragraph">Comparando os horários de uma linha para a outra, dá para ver onde a mensagem demorou. Diferenças de segundos são normais. Uma diferença de vários minutos ou horas indica que a mensagem ficou na fila de algum servidor, que não conseguiu repassá-la na hora e tentou de novo mais tarde. O artigo sobre <a href="https://www.homehost.com.br/blog/contas-de-email/codigos-de-erro-de-email/" data-wpel-link="internal" target="_self">códigos de erro de e-mail</a> explica por que alguns e-mails chegam atrasados. Às vezes o horário de uma linha aparece antes do horário da linha anterior: nesse caso, os relógios dos dois servidores não estão acertados, e o atraso não dá para medir.</p>



<p class="wp-block-paragraph">O IP do primeiro servidor externo, o que entregou a mensagem ao provedor de quem recebeu, é o IP de envio. É nele que os servidores de destino conferem o SPF e o <a href="https://www.homehost.com.br/blog/internet/dns-reverso/" data-wpel-link="internal" target="_self">DNS reverso</a>. Para ver se esse IP tem um registro PTR que aponta de volta para ele, use o <a href="https://www.homehost.com.br/blog/internet/dns-reverso/#hh-rdns" data-wpel-link="internal" target="_self">verificador de DNS reverso</a>.</p>



<h2 class="wp-block-heading">SPF, DKIM e DMARC: como ler o resultado</h2>



<p class="wp-block-paragraph">O resultado das três verificações fica na linha <strong>Authentication-Results</strong>, colocada pelo servidor que recebeu a mensagem. Ela costuma ser assim:</p>



<pre class="wp-block-code"><code>Authentication-Results: mx.google.com;
       dkim=pass header.i=@example.com header.s=default;
       spf=pass smtp.mailfrom=example.com;
       dmarc=pass (p=QUARANTINE) header.from=example.com</code></pre>



<ul class="wp-block-list">
<li><strong>spf=pass:</strong> o servidor que enviou está autorizado no registro SPF do domínio que aparece em smtp.mailfrom. Atenção: esse é o domínio do Return-Path, que nem sempre é o mesmo do remetente que você vê.</li>



<li><strong>dkim=pass:</strong> a assinatura digital confere, e a mensagem não foi alterada depois de assinada. O domínio que assinou aparece em header.d ou header.i.</li>



<li><strong>dmarc=pass:</strong> o SPF ou o DKIM passou para um domínio que bate com o do remetente (From). Essa correspondência se chama alinhamento, e é ela que impede alguém de usar o seu domínio no From enquanto envia por outro servidor.</li>
</ul>



<p class="wp-block-paragraph">É por causa do alinhamento que uma mensagem pode ter spf=pass e, mesmo assim, dmarc=fail. Isso acontece, por exemplo, quando você envia por uma plataforma de e-mail marketing que usa o próprio domínio no Return-Path e não assina com DKIM no seu domínio. O SPF passa, mas para o domínio da plataforma, e não para o seu.</p>



<p class="wp-block-paragraph">Os outros resultados possíveis são:</p>



<ul class="wp-block-list">
<li><strong>fail</strong> ou <strong>softfail:</strong> o servidor que enviou não está autorizado (no SPF) ou a assinatura não confere (no DKIM).</li>



<li><strong>none:</strong> o domínio não tem aquele registro, ou a mensagem não foi assinada.</li>



<li><strong>temperror:</strong> uma consulta de DNS falhou por um momento. Uma próxima mensagem pode passar.</li>



<li><strong>permerror:</strong> o registro está quebrado, por erro de sintaxe ou, no caso do SPF, por passar de 10 consultas de DNS.</li>
</ul>



<p class="wp-block-paragraph">Para entender a função de cada protocolo, veja o guia <a href="https://www.homehost.com.br/blog/contas-de-email/spf-dkim-dmarc/" data-wpel-link="internal" target="_self">o que são SPF, DKIM e DMARC</a>. Para conferir os registros do seu domínio, use o <a href="https://www.homehost.com.br/blog/tutoriais/email-marketing/como-configurar-spf-e-dkim-no-cpanel/#hh-spf" data-wpel-link="internal" target="_self">verificador de SPF, DKIM e DMARC</a>.</p>



<h2 class="wp-block-heading">Como saber se um e-mail é golpe pelo cabeçalho</h2>



<p class="wp-block-paragraph">O cabeçalho não diz sozinho se uma mensagem é golpe, mas mostra sinais que o resumo do programa de e-mail esconde. Estes são os mais comuns:</p>



<ol class="wp-block-list">
<li><strong>O nome de exibição mostra um endereço, e o remetente real é outro.</strong> Na linha From, o que vem entre aspas é só o nome de exibição; o endereço real é o que está entre os sinais de menor e maior. Num golpe, o nome imita o endereço do banco, e o endereço real é de um domínio sem relação com ele. Muitos programas mostram só o nome, e o golpe passa despercebido.</li>



<li><strong>O Reply-To aponta para outro domínio.</strong> A mensagem diz vir da empresa, mas a resposta vai para um endereço de terceiros. É comum em newsletters e centrais de atendimento, mas também é um truque clássico para receber a resposta da vítima.</li>



<li><strong>dmarc=fail num e-mail que diz vir de uma empresa conhecida.</strong> Empresas grandes costumam publicar DMARC. Uma falha num e-mail que diz vir do banco ou de uma loja conhecida é um sinal forte de falsificação.</li>



<li><strong>O primeiro servidor do caminho não tem relação com a empresa.</strong> Se a mensagem diz vir de uma loja brasileira, mas a linha Received de baixo mostra um servidor desconhecido, desconfie.</li>
</ol>



<p class="wp-block-paragraph">Um alerta importante: passar nas três verificações não prova que o e-mail é legítimo. O golpista pode registrar um domínio parecido com o verdadeiro, trocando ou repetindo uma letra, e configurar SPF, DKIM e DMARC nele. O cabeçalho confirma de qual domínio a mensagem veio. Cabe a você conferir se é o domínio certo. O guia sobre <a href="https://www.homehost.com.br/blog/tutoriais/seguranca/phishing/" data-wpel-link="internal" target="_self">phishing</a> mostra outros sinais de golpe e o que fazer se você caiu em um.</p>



<h2 class="wp-block-heading">O que o cabeçalho mostra quando o seu e-mail cai no spam</h2>



<p class="wp-block-paragraph">Se você envia e-mails pelo seu domínio e eles estão indo para o spam, o cabeçalho de uma mensagem que chegou lá mostra o motivo. Peça a um destinatário que copie o cabeçalho para você, ou envie um teste para uma conta sua no Gmail ou no Outlook, e cole no analisador. Os casos mais comuns são:</p>



<ul class="wp-block-list">
<li><strong>spf=softfail ou spf=fail:</strong> o servidor que enviou não está no seu registro SPF. Acrescente o include do serviço que envia, ou o IP dele.</li>



<li><strong>dkim=none:</strong> a mensagem saiu sem assinatura DKIM. Na hospedagem com cPanel, o DKIM é ativado na mesma tela do SPF, como mostra o tutorial de <a href="https://www.homehost.com.br/blog/tutoriais/email-marketing/como-configurar-spf-e-dkim-no-cpanel/" data-wpel-link="internal" target="_self">como configurar SPF e DKIM no cPanel</a>.</li>



<li><strong>dmarc=fail com spf=pass para outro domínio:</strong> a mensagem saiu por uma plataforma que usa o próprio Return-Path. A solução é configurar o DKIM do seu domínio nessa plataforma.</li>



<li><strong>dmarc=none:</strong> o seu domínio não tem registro DMARC. Monte o seu no <a href="https://www.homehost.com.br/blog/contas-de-email/spf-dkim-dmarc/#Gerador_de_registro_DMARC" data-wpel-link="internal" target="_self">gerador de registro DMARC</a>.</li>



<li><strong>X-Spam-Status com nota alta:</strong> o filtro de spam lista as regras que a mensagem disparou, o que ajuda a ver se o problema está no conteúdo, nos links ou na autenticação.</li>
</ul>



<p class="wp-block-paragraph">Se a mensagem nem chegou e voltou com um aviso de erro, o código do aviso diz o motivo. Cole o aviso no decodificador do artigo sobre <a href="https://www.homehost.com.br/blog/contas-de-email/codigos-de-erro-de-email/" data-wpel-link="internal" target="_self">códigos de erro de e-mail</a>.</p>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>O que é o cabeçalho de um e-mail?</strong></p>



<p class="wp-block-paragraph">É o bloco de linhas técnicas que vem antes do corpo da mensagem. Ele registra o remetente, o destinatário, o assunto e a data, e também o caminho que a mensagem fez entre os servidores e o resultado das verificações de SPF, DKIM e DMARC.</p>



<p class="wp-block-paragraph"><strong>Como ver o cabeçalho de um e-mail no Gmail?</strong></p>



<p class="wp-block-paragraph">No computador, abra a mensagem, clique nos três pontinhos ao lado de Responder e escolha Mostrar original. A página que abre tem o cabeçalho completo e um botão para copiar.</p>



<p class="wp-block-paragraph"><strong>Como ver o cabeçalho de um e-mail no Outlook?</strong></p>



<p class="wp-block-paragraph">No Outlook na web, no Outlook.com e no novo Outlook, abra a mensagem e vá em Mais ações, Exibir, Exibir detalhes da mensagem. No Outlook clássico, abra a mensagem em uma janela própria e vá em Arquivo, Propriedades. O cabeçalho fica na caixa Cabeçalhos da Internet.</p>



<p class="wp-block-paragraph"><strong>Dá para ver o cabeçalho pelo celular?</strong></p>



<p class="wp-block-paragraph">Os aplicativos do Gmail e do Mail do iPhone não mostram o cabeçalho completo. O jeito é abrir a mensagem pelo navegador de um computador.</p>



<p class="wp-block-paragraph"><strong>Como descobrir o IP de quem enviou um e-mail?</strong></p>



<p class="wp-block-paragraph">Leia as linhas Received de baixo para cima. O IP entre colchetes na linha do primeiro servidor externo é o IP de envio. Em mensagens enviadas pelo Gmail e por outros serviços de webmail grandes, esse costuma ser o IP do servidor do provedor, e não o da pessoa.</p>



<p class="wp-block-paragraph"><strong>O cabeçalho de um e-mail pode ser falsificado?</strong></p>



<p class="wp-block-paragraph">Em parte. Os campos escritos por quem envia, como From, Reply-To e Date, podem ser falsificados, e até as linhas Received acrescentadas antes da mensagem chegar ao seu provedor podem ser inventadas. As linhas que o seu provedor acrescenta no topo, como a Authentication-Results, não podem ser alteradas por quem enviou.</p>



<p class="wp-block-paragraph"><strong>O que significa dmarc=fail no cabeçalho?</strong></p>



<p class="wp-block-paragraph">Significa que nem o SPF nem o DKIM passaram para um domínio que bate com o do remetente. Pode ser uma mensagem falsificada ou um envio legítimo mal configurado, como uma plataforma de e-mail marketing sem o DKIM do seu domínio. O que acontece com a mensagem depende da política DMARC do domínio: none, quarantine ou reject.</p>



<p class="wp-block-paragraph"><strong>É seguro colar o cabeçalho no analisador?</strong></p>



<p class="wp-block-paragraph">Sim. A análise acontece no seu navegador, e o cabeçalho não é enviado para nenhum servidor. Se for mandar o cabeçalho para outra pessoa analisar, envie só ele, sem o corpo da mensagem.</p>



<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "O que é o cabeçalho de um e-mail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "É o bloco de linhas técnicas que vem antes do corpo da mensagem. Ele registra o remetente, o destinatário, o assunto e a data, e também o caminho que a mensagem fez entre os servidores e o resultado das verificações de SPF, DKIM e DMARC."
      }
    },
    {
      "@type": "Question",
      "name": "Como ver o cabeçalho de um e-mail no Gmail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No computador, abra a mensagem, clique nos três pontinhos ao lado de Responder e escolha Mostrar original. A página que abre tem o cabeçalho completo e um botão para copiar."
      }
    },
    {
      "@type": "Question",
      "name": "Como ver o cabeçalho de um e-mail no Outlook?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No Outlook na web, no Outlook.com e no novo Outlook, abra a mensagem e vá em Mais ações, Exibir, Exibir detalhes da mensagem. No Outlook clássico, abra a mensagem em uma janela própria e vá em Arquivo, Propriedades. O cabeçalho fica na caixa Cabeçalhos da Internet."
      }
    },
    {
      "@type": "Question",
      "name": "Dá para ver o cabeçalho pelo celular?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Os aplicativos do Gmail e do Mail do iPhone não mostram o cabeçalho completo. O jeito é abrir a mensagem pelo navegador de um computador."
      }
    },
    {
      "@type": "Question",
      "name": "Como descobrir o IP de quem enviou um e-mail?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Leia as linhas Received de baixo para cima. O IP entre colchetes na linha do primeiro servidor externo é o IP de envio. Em mensagens enviadas pelo Gmail e por outros serviços de webmail grandes, esse costuma ser o IP do servidor do provedor, e não o da pessoa."
      }
    },
    {
      "@type": "Question",
      "name": "O cabeçalho de um e-mail pode ser falsificado?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Em parte. Os campos escritos por quem envia, como From, Reply-To e Date, podem ser falsificados, e até as linhas Received acrescentadas antes da mensagem chegar ao seu provedor podem ser inventadas. As linhas que o seu provedor acrescenta no topo, como a Authentication-Results, não podem ser alteradas por quem enviou."
      }
    },
    {
      "@type": "Question",
      "name": "O que significa dmarc=fail no cabeçalho?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Significa que nem o SPF nem o DKIM passaram para um domínio que bate com o do remetente. Pode ser uma mensagem falsificada ou um envio legítimo mal configurado, como uma plataforma de e-mail marketing sem o DKIM do seu domínio. O que acontece com a mensagem depende da política DMARC do domínio: none, quarantine ou reject."
      }
    },
    {
      "@type": "Question",
      "name": "É seguro colar o cabeçalho no analisador?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sim. A análise acontece no seu navegador, e o cabeçalho não é enviado para nenhum servidor. Se for mandar o cabeçalho para outra pessoa analisar, envie só ele, sem o corpo da mensagem."
      }
    }
  ]
}
</script>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">O cabeçalho de e-mail é o histórico completo de uma mensagem: de onde ela saiu, por onde passou, quanto tempo levou e se o domínio do remetente foi confirmado. Com o analisador, você não precisa decifrar linha por linha: basta copiar o cabeçalho, colar e ver o resultado do SPF, do DKIM e do DMARC, o caminho entre os servidores e os sinais de golpe.</p>



<p class="wp-block-paragraph">Se o problema é com os e-mails que você envia, o cabeçalho aponta o que falta ajustar no seu domínio. No <a href="https://www.homehost.com.br/hospedagem-de-emails/" data-wpel-link="external" target="_blank" rel="external noopener">e-mail profissional da Homehost</a>, o SPF, o DKIM e o DMARC já vêm configurados desde a contratação.</p>



<p class="wp-block-paragraph"></p>
<p>O post <a href="https://www.homehost.com.br/blog/contas-de-email/cabecalho-de-email/" data-wpel-link="internal" target="_self">Cabeçalho de e-mail: o que é, como ver e analisador grátis</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18500</post-id>	</item>
		<item>
		<title>Link do WhatsApp: como criar o seu (com gerador e QR Code)</title>
		<link>https://www.homehost.com.br/blog/internet/link-do-whatsapp/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 17:37:06 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18408</guid>

					<description><![CDATA[<p>Para muitos negócios, o WhatsApp é o principal canal de vendas — e o caminho mais curto até ele é um link: um endereço que, ao ser tocado, abre a conversa com o seu número, muitas vezes com uma mensagem já escrita pelo cliente. Sem precisar salvar o contato, sem digitar nada. Neste guia, você [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/link-do-whatsapp/" data-wpel-link="internal" target="_self">Link do WhatsApp: como criar o seu (com gerador e QR Code)</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Para muitos negócios, <strong>o WhatsApp é o principal canal de vendas</strong> — e o caminho mais curto até ele é um <strong>link</strong>: um endereço que, ao ser tocado, abre a conversa com o seu número, <strong>muitas vezes com uma mensagem já escrita</strong> pelo cliente. Sem precisar salvar o contato, sem digitar nada.</p>



<p class="wp-block-paragraph">Neste guia, você cria o seu link no <strong>gerador</strong> logo abaixo — com o <strong>QR Code</strong> para imprimir e o <strong>código do botão</strong> para o site —, entende como o link funciona e vê os erros que fazem um link do WhatsApp não abrir.</p>



<div style="border:1px solid #9db4d6; border-left:4px solid #0b3d91; background:#eef3fa; border-radius:8px; padding:18px 22px; margin:24px 0; font-family:Arial, Helvetica, sans-serif;">
<div style="font-weight:700; color:#0b3d91; margin-bottom:10px; text-transform:uppercase; letter-spacing:.05em; font-size:14px;">Resposta rápida</div>
<p style="margin:0; line-height:1.65; color:#16243d;">O link do WhatsApp tem o formato <code>https://wa.me/5511999998888</code>: <strong>55</strong> (o código do Brasil), o <strong>DDD</strong> e o <strong>número</strong>, só com números — sem +, espaços, parênteses ou traços. Para abrir a conversa com uma mensagem pronta, acrescente <code>?text=</code> e o texto codificado. O gerador abaixo monta tudo isso para você.</p>
</div>



<h2 class="wp-block-heading">Gerador de link do WhatsApp</h2>



<p class="wp-block-paragraph">Digite o seu número e, se quiser, uma mensagem pronta. O gerador corrige o formato do número, monta o link, cria o QR Code para imprimir e entrega o código do botão flutuante para o seu site.</p>



<div class="hh-wa" style="max-width:780px;margin:28px auto;border:1px solid #c9d6ea;border-radius:14px;padding:22px 24px;background:#f7faff;font-family:Arial,Helvetica,sans-serif;color:#16243d;font-size:15px;">
<div style="font-weight:800;font-size:19px;color:#0b3d91;margin-bottom:4px;">Gerador de link do WhatsApp</div>
<p style="margin:0 0 14px;line-height:1.5;font-size:14.5px;">Digite o número e a mensagem. Você recebe o link, o QR Code e o código do botão para o site — tudo gerado no seu navegador.</p>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px 20px;">
<div><label for="hh-wa-num" style="display:block;font-weight:700;margin-bottom:4px;">Número do WhatsApp</label>
<input type="tel" id="hh-wa-num" value="(11) 99999-8888" placeholder="(11) 99999-8888" style="width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid #9db4d6;border-radius:8px;font-size:16px;">
<label style="display:block;margin-top:6px;font-size:13.5px;"><input type="checkbox" id="hh-wa-intl"> Número de outro país (digite com o código do país)</label>
<div id="hh-wa-numinfo" style="margin-top:6px;font-size:13.5px;"></div></div>
<div><label for="hh-wa-msg" style="display:block;font-weight:700;margin-bottom:4px;">Mensagem pronta (opcional)</label>
<textarea id="hh-wa-msg" rows="3" style="width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid #9db4d6;border-radius:8px;font-size:15px;font-family:Arial,Helvetica,sans-serif;resize:vertical;">Olá! Vim pelo site e gostaria de um orçamento.</textarea>
<div style="margin-top:4px;font-size:13px;">Modelos:
<button type="button" class="hh-wa-tpl" data-t="Olá! Vim pelo site e gostaria de um orçamento." style="margin:2px;padding:3px 8px;border:1px solid #0b3d91;background:#ffffff;color:#0b3d91;border-radius:6px;cursor:pointer;font-size:12.5px;">Orçamento</button>
<button type="button" class="hh-wa-tpl" data-t="Olá! Tenho uma dúvida sobre um produto." style="margin:2px;padding:3px 8px;border:1px solid #0b3d91;background:#ffffff;color:#0b3d91;border-radius:6px;cursor:pointer;font-size:12.5px;">Dúvida</button>
<button type="button" class="hh-wa-tpl" data-t="Olá! Gostaria de agendar um horário." style="margin:2px;padding:3px 8px;border:1px solid #0b3d91;background:#ffffff;color:#0b3d91;border-radius:6px;cursor:pointer;font-size:12.5px;">Agendamento</button>
<button type="button" class="hh-wa-tpl" data-t="" style="margin:2px;padding:3px 8px;border:1px solid #9db4d6;background:#ffffff;color:#3a4a63;border-radius:6px;cursor:pointer;font-size:12.5px;">Sem mensagem</button></div></div>
</div>
<div id="hh-wa-out" aria-live="polite" style="margin-top:16px;"></div>
<p style="margin:12px 0 0;font-size:12.5px;color:#3a4a63;line-height:1.5;">O link segue o formato oficial do WhatsApp (wa.me). O QR Code é gerado no seu navegador, sem enviar o número a nenhum serviço. Fonte: homehost.com.br</p>
</div>
<script>(function () { var RSM=[[1, 26, 16], [1, 44, 28], [1, 70, 44], [2, 50, 32], [2, 67, 43], [4, 43, 27], [4, 49, 31], [2, 60, 38, 2, 61, 39], [3, 58, 36, 2, 59, 37], [4, 69, 43, 1, 70, 44], [1, 80, 50, 4, 81, 51], [6, 58, 36, 2, 59, 37], [8, 59, 37, 1, 60, 38], [4, 64, 40, 5, 65, 41], [5, 65, 41, 5, 66, 42], [7, 73, 45, 3, 74, 46], [10, 74, 46, 1, 75, 47], [9, 69, 43, 4, 70, 44], [3, 70, 44, 11, 71, 45], [3, 67, 41, 13, 68, 42], [17, 68, 42], [17, 74, 46], [4, 75, 47, 14, 76, 48], [6, 73, 45, 14, 74, 46], [8, 75, 47, 13, 76, 48]]; function pw(k){return Math.pow(2,k);} function bit(x,i){return Math.floor(x/pw(i))%2;} function gfMul(x,y){var z=0;for(var i=7;i!==-1;i--){z=(z*2)^(Math.floor(z/128)*285);z=z^(bit(y,i)*x);}return z;} function rsDivisor(deg){var r=[];for(var i=0;i!==deg-1;i++){r.push(0);}r.push(1);var root=1;for(var i2=0;i2!==deg;i2++){for(var j=0;j!==r.length;j++){r[j]=gfMul(r[j],root);if(j+1!==r.length){r[j]=r[j]^r[j+1];}}root=gfMul(root,2);}return r;} function rsRemainder(data,div){var r=[];for(var i=0;i!==div.length;i++){r.push(0);}for(var k=0;k!==data.length;k++){var f=data[k]^r.shift();r.push(0);for(var j=0;j!==div.length;j++){r[j]=r[j]^gfMul(div[j],f);}}return r;} function utf8(s){var e=encodeURIComponent(s);var out=[];for(var i=0;i!==e.length;i++){var c=e.charAt(i);if(c==="%"){out.push(parseInt(e.substr(i+1,2),16));i+=2;}else{out.push(c.charCodeAt(0));}}return out;} function blocksInfo(v){var r=RSM[v-1];var b=[];for(var i=0;i!==r.length;i=i+3){for(var n=0;n!==r[i];n++){b.push([r[i+1],r[i+2]]);}}return b;} function capacity(v){var b=blocksInfo(v);var t=0;for(var i=0;i!==b.length;i++){t+=b[i][1];}return t;} function alignPos(v){if(v===1){return [];}var n=Math.floor(v/7)+2;var step=(v===32)?26:Math.ceil((v*4+4)/(n*2-2))*2;var res=[6];for(var p=v*4+10;res.length!==n;p-=step){res.splice(1,0,p);}return res;} function encode(text){var data=utf8(text);var v=0;for(var t=1;t!==26;t++){var ccBits=(t===10||Math.max(t,10)===t)?16:8;var need=4+ccBits+data.length*8;if(Math.max(need,capacity(t)*8)===capacity(t)*8){v=t;break;}}if(v===0){return null;} var bits=[];function put(val,len){for(var i=len-1;i!==-1;i--){bits.push(bit(val,i));}} put(4,4);put(data.length,Math.max(v,10)===v?16:8);for(var i=0;i!==data.length;i++){put(data[i],8);} var capBits=capacity(v)*8;var term=Math.min(4,capBits-bits.length);put(0,term);while(bits.length%8!==0){bits.push(0);}var padB=[236,17];var pi=0;while(bits.length!==capBits){put(padB[pi%2],8);pi++;} var bytes=[];for(var b2=0;b2!==bits.length;b2=b2+8){var x=0;for(var j=0;j!==8;j++){x=x*2+bits[b2+j];}bytes.push(x);} var blk=blocksInfo(v);var eccLen=blk[0][0]-blk[0][1];var div=rsDivisor(eccLen);var dB=[];var eB=[];var off=0;for(var k=0;k!==blk.length;k++){var d=bytes.slice(off,off+blk[k][1]);off+=blk[k][1];dB.push(d);eB.push(rsRemainder(d,div));} var maxD=0;for(var m=0;m!==dB.length;m++){maxD=Math.max(maxD,dB[m].length);}var final=[];for(var q=0;q!==maxD;q++){for(var m2=0;m2!==dB.length;m2++){if(q!==dB[m2].length){if(Math.max(q,dB[m2].length-1)===dB[m2].length-1){final.push(dB[m2][q]);}}}}for(var q2=0;q2!==eccLen;q2++){for(var m3=0;m3!==eB.length;m3++){final.push(eB[m3][q2]);}} var size=v*4+17;var M=[];var F=[];for(var r=0;r!==size;r++){M.push([]);F.push([]);for(var c=0;c!==size;c++){M[r].push(0);F[r].push(false);}} function setF(x,y,dark){M[y][x]=dark?1:0;F[y][x]=true;} for(var i3=0;i3!==size;i3++){setF(6,i3,i3%2===0);setF(i3,6,i3%2===0);} function finder(cx,cy){for(var dy=-4;dy!==5;dy++){for(var dx=-4;dx!==5;dx++){var xx=cx+dx,yy=cy+dy;if(Math.max(0,Math.min(size-1,xx))===xx){if(Math.max(0,Math.min(size-1,yy))===yy){var dist=Math.max(Math.abs(dx),Math.abs(dy));setF(xx,yy,dist!==2?(dist!==4):false);}}}}} finder(3,3);finder(size-4,3);finder(3,size-4); var ap=alignPos(v);for(var a1=0;a1!==ap.length;a1++){for(var a2=0;a2!==ap.length;a2++){var skip=(a1===0?(a2===0||a2===ap.length-1):false)||(a1===ap.length-1?a2===0:false);if(!skip){for(var dy2=-2;dy2!==3;dy2++){for(var dx2=-2;dx2!==3;dx2++){setF(ap[a1]+dx2,ap[a2]+dy2,Math.max(Math.abs(dx2),Math.abs(dy2))!==1);}}}}} function drawFormat(mask){var data2=mask;var rem=data2;for(var i=0;i!==10;i++){rem=(rem*2)^(Math.floor(rem/512)*1335);}var bits2=(data2*1024+rem)^21522; for(var i4=0;i4!==6;i4++){setF(8,i4,bit(bits2,i4)===1);}setF(8,7,bit(bits2,6)===1);setF(8,8,bit(bits2,7)===1);setF(7,8,bit(bits2,8)===1);for(var i5=9;i5!==15;i5++){setF(14-i5,8,bit(bits2,i5)===1);} for(var i6=0;i6!==8;i6++){setF(size-1-i6,8,bit(bits2,i6)===1);}for(var i7=8;i7!==15;i7++){setF(8,size-15+i7,bit(bits2,i7)===1);}setF(8,size-8,true);} drawFormat(0); if(Math.max(v,7)===v){var rem2=v;for(var i8=0;i8!==12;i8++){rem2=(rem2*2)^(Math.floor(rem2/2048)*7973);}var vb=v*4096+rem2;for(var i9=0;i9!==18;i9++){var bt=bit(vb,i9)===1;var aa=size-11+(i9%3);var bb=Math.floor(i9/3);setF(aa,bb,bt);setF(bb,aa,bt);}} var allBits=[];for(var f1=0;f1!==final.length;f1++){for(var f2=7;f2!==-1;f2--){allBits.push(bit(final[f1],f2));}} var idx=0;for(var right=size-1;Math.max(right,1)===right;right-=2){if(right===6){right=5;}for(var vert=0;vert!==size;vert++){for(var jj=0;jj!==2;jj++){var x2=right-jj;var upward=bit(right+1,1)===0;var y2=upward?size-1-vert:vert;if(!F[y2][x2]){if(idx!==allBits.length){M[y2][x2]=allBits[idx];idx++;}}}}} function maskFn(mk,x,y){if(mk===0){return (x+y)%2===0;}if(mk===1){return y%2===0;}if(mk===2){return x%3===0;}if(mk===3){return (x+y)%3===0;}if(mk===4){return (Math.floor(x/3)+Math.floor(y/2))%2===0;}if(mk===5){return (x*y)%2+(x*y)%3===0;}if(mk===6){return ((x*y)%2+(x*y)%3)%2===0;}return ((x+y)%2+(x*y)%3)%2===0;} function applyMask(mk){for(var yy2=0;yy2!==size;yy2++){for(var xx2=0;xx2!==size;xx2++){if(!F[yy2][xx2]){if(maskFn(mk,xx2,yy2)){M[yy2][xx2]=M[yy2][xx2]^1;}}}}} function penalty(){var p=0;for(var y=0;y!==size;y++){var run=1;for(var x=1;x!==size;x++){if(M[y][x]===M[y][x-1]){run++;if(run===5){p+=3;}else if(Math.max(run,6)===run){p+=1;}}else{run=1;}}} for(var x3=0;x3!==size;x3++){var run2=1;for(var y3=1;y3!==size;y3++){if(M[y3][x3]===M[y3-1][x3]){run2++;if(run2===5){p+=3;}else if(Math.max(run2,6)===run2){p+=1;}}else{run2=1;}}} for(var y4=0;y4!==size-1;y4++){for(var x4=0;x4!==size-1;x4++){var cc=M[y4][x4];if(cc===M[y4][x4+1]){if(cc===M[y4+1][x4]){if(cc===M[y4+1][x4+1]){p+=3;}}}}} var dark=0;for(var y5=0;y5!==size;y5++){for(var x5=0;x5!==size;x5++){dark+=M[y5][x5];}}var total=size*size;var kk=Math.ceil(Math.abs(dark*20-total*10)/total)-1;p+=Math.max(kk,0)*10;return p;} var best=-1,bestP=0;for(var mk=0;mk!==8;mk++){applyMask(mk);drawFormat(mk);var pen=penalty();if(best===-1||Math.min(pen,bestP)===pen){if(best===-1||pen!==bestP){best=mk;bestP=pen;}}applyMask(mk);} applyMask(best);drawFormat(best);return {size:size,version:v,m:M};} var LT=String.fromCharCode(60);var GT=String.fromCharCode(62);var AMP=String.fromCharCode(38);var QU=String.fromCharCode(34); var DDD=[11,12,13,14,15,16,17,18,19,21,22,24,27,28,31,32,33,34,35,37,38,41,42,43,44,45,46,47,48,49,51,53,54,55,61,62,63,64,65,66,67,68,69,71,73,74,75,77,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99]; var GREEN="#0F7A43"; function el(id){return document.getElementById(id);} function add(p,tag,text,style){var n=document.createElement(tag);if(text){n.textContent=text;}if(style){n.setAttribute("style",style);}p.appendChild(n);return n;} function digits(s){var o="";s=String(s||"");for(var i=0;i!==s.length;i++){if("0123456789".indexOf(s.charAt(i))!==-1){o+=s.charAt(i);}}return o;} function phone(raw,intl){var d=digits(raw);var notes=[]; if(intl){if(d.indexOf("00")===0){d=d.slice(2);}if(Math.max(d.length,8)!==d.length){return {ok:false,err:"Digite o número completo, com o código do país."};}if(Math.min(d.length,15)!==d.length){return {ok:false,err:"Número longo demais: o padrão internacional tem até 15 dígitos."};}return {ok:true,full:d,display:"+"+d,notes:notes};} if(d.indexOf("00")===0){d=d.slice(2);} var nat=d;if(d.indexOf("55")===0){if(d.length===12||d.length===13){nat=d.slice(2);}} while(nat.charAt(0)==="0"){nat=nat.slice(1);} if(nat.length===0){return {ok:false,err:""};} if(nat.length!==10){if(nat.length!==11){return {ok:false,err:"Digite o DDD e o número, como (11) 99999-8888."};}} var ddd=Number(nat.slice(0,2));if(DDD.indexOf(ddd)===-1){return {ok:false,err:"O DDD "+nat.slice(0,2)+" não existe no Brasil. Confira os dois primeiros dígitos."};} var num=nat.slice(2); if(num.length===9){if(num.charAt(0)!=="9"){return {ok:false,err:"Celulares com 9 dígitos começam com 9. Confira o número."};}} else{var f=num.charAt(0);if("6789".indexOf(f)!==-1){num="9"+num;notes.push("Acrescentamos o 9 na frente: todo celular brasileiro tem 9 dígitos.");}else{notes.push("É um número fixo. O WhatsApp funciona com fixo se ele estiver cadastrado no WhatsApp Business.");}} var disp="+55 ("+nat.slice(0,2)+") "+(num.length===9?num.slice(0,5)+"-"+num.slice(5):num.slice(0,4)+"-"+num.slice(4)); return {ok:true,full:"55"+nat.slice(0,2)+num,display:disp,notes:notes};} function escHtml(s){return String(s).split(AMP).join(AMP+"amp;").split(LT).join(AMP+"lt;").split(GT).join(AMP+"gt;").split(QU).join(AMP+"quot;");} function copyText(t,msgEl){var done=function(){msgEl.textContent="Copiado!";setTimeout(function(){msgEl.textContent="";},2000);};if(navigator.clipboard){if(navigator.clipboard.writeText){navigator.clipboard.writeText(t).then(done,function(){msgEl.textContent="Selecione e copie manualmente.";});return;}}msgEl.textContent="Selecione e copie manualmente.";} function codeBox(parent,text){return add(parent,"div",text,"font-family:Consolas,Menlo,monospace;font-size:13px;background:#0f172a;color:#f1f5f9;padding:10px 12px;border-radius:8px;word-break:break-all;white-space:pre-wrap;margin-top:6px;");} function copyBtn(parent,getText){var b=add(parent,"button","Copiar","margin-top:6px;padding:7px 14px;border:0;background:#0b3d91;color:#ffffff;border-radius:7px;cursor:pointer;font-weight:700;");b.setAttribute("type","button");var m=add(parent,"span","","margin-left:8px;font-size:13.5px;color:#155e2c;");b.addEventListener("click",function(){copyText(getText(),m);});return b;} var state={side:"right",label:"Fale conosco"}; function render(){var out=el("hh-wa-out");while(out.firstChild){out.removeChild(out.firstChild);}var info=el("hh-wa-numinfo");while(info.firstChild){info.removeChild(info.firstChild);} var p=phone(el("hh-wa-num").value,el("hh-wa-intl").checked); if(!p.ok){if(p.err){add(info,"div",p.err,"color:#8f1f12;font-weight:700;");}return;} add(info,"div","Número: "+p.display,"color:#155e2c;font-weight:700;");for(var i=0;i!==p.notes.length;i++){add(info,"div",p.notes[i],"color:#6b3d00;margin-top:3px;");} var msg=String(el("hh-wa-msg").value||"");var link="https://wa.me/"+p.full+(msg.trim()===""?"":"?text="+encodeURIComponent(msg)); var box=add(out,"div",null,"padding:16px 18px;background:#ffffff;border:1px solid #dbe4f2;border-radius:10px;line-height:1.5;"); add(box,"div","1. Seu link","font-weight:800;color:#0b3d91;");codeBox(box,link);var row=add(box,"div");copyBtn(row,function(){return link;});var t=add(row,"a","Testar o link","margin-left:12px;color:#0b3d91;font-weight:700;text-decoration:underline;");t.setAttribute("href",link);t.setAttribute("target","_blank");t.setAttribute("rel","noopener"); add(box,"div","Use na bio do Instagram, em anúncios, no e-mail e em qualquer lugar que aceite um link.","font-size:13.5px;color:#3a4a63;margin-top:6px;"); add(box,"div","2. QR Code","font-weight:800;color:#0b3d91;margin-top:16px;"); var q=encode(link);if(!q){add(box,"div","A mensagem é longa demais para um QR Code. Encurte o texto.","color:#8f1f12;font-weight:700;margin-top:6px;");}else{ var cv=document.createElement("canvas");var scale=Math.max(4,Math.floor(232/(q.size+8)));var px=(q.size+8)*scale;cv.width=px;cv.height=px;cv.setAttribute("style","display:block;margin-top:8px;border:1px solid #dbe4f2;border-radius:6px;width:"+Math.min(px,232)+"px;height:auto;image-rendering:pixelated;");cv.setAttribute("aria-label","QR Code do link do WhatsApp");box.appendChild(cv); var ctx=cv.getContext?cv.getContext("2d"):null;if(ctx){ctx.fillStyle="#ffffff";ctx.fillRect(0,0,px,px);ctx.fillStyle="#000000";for(var y=0;y!==q.size;y++){for(var x=0;x!==q.size;x++){if(q.m[y][x]===1){ctx.fillRect((x+4)*scale,(y+4)*scale,scale,scale);}}}} var dl=add(box,"button","Baixar QR Code (PNG)","margin-top:8px;padding:7px 14px;border:1px solid #0b3d91;background:#ffffff;color:#0b3d91;border-radius:7px;cursor:pointer;font-weight:700;");dl.setAttribute("type","button");dl.addEventListener("click",function(){try{var big=document.createElement("canvas");var s2=12;var n=(q.size+8)*s2;big.width=n;big.height=n;var c2=big.getContext("2d");c2.fillStyle="#ffffff";c2.fillRect(0,0,n,n);c2.fillStyle="#000000";for(var yy=0;yy!==q.size;yy++){for(var xx=0;xx!==q.size;xx++){if(q.m[yy][xx]===1){c2.fillRect((xx+4)*s2,(yy+4)*s2,s2,s2);}}}var a=document.createElement("a");a.href=big.toDataURL("image/png");a.download="qrcode-whatsapp.png";document.body.appendChild(a);a.click();document.body.removeChild(a);}catch(e){}}); if(Math.max(q.version,10)===q.version){add(box,"div","A mensagem longa deixa o QR Code denso. Para cartões e embalagens, prefira uma mensagem curta — fica mais fácil de ler pela câmera.","font-size:13.5px;color:#6b3d00;margin-top:6px;");}else{add(box,"div","Imprima com pelo menos 2 cm de largura e teste com a câmera do celular antes de mandar para a gráfica.","font-size:13.5px;color:#3a4a63;margin-top:6px;");}} add(box,"div","3. Botão flutuante para o site","font-weight:800;color:#0b3d91;margin-top:16px;"); var opts=add(box,"div",null,"display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:6px;font-size:14px;");add(opts,"span","Texto do botão:");var lab=add(opts,"input");lab.setAttribute("type","text");lab.value=state.label;lab.setAttribute("style","padding:6px 8px;border:1px solid #9db4d6;border-radius:6px;width:150px;");add(opts,"span","Lado:");var side=add(opts,"select");side.setAttribute("style","padding:6px 8px;border:1px solid #9db4d6;border-radius:6px;");var o1=add(side,"option","Direita");o1.value="right";var o2=add(side,"option","Esquerda");o2.value="left";side.value=state.side; var label=String(state.label||"").trim();var style="position:fixed;bottom:20px;"+state.side+":20px;z-index:9999;display:inline-flex;align-items:center;gap:8px;background:"+GREEN+";color:#ffffff;padding:12px 18px;border-radius:999px;font:700 15px/1 Arial,sans-serif;text-decoration:none;box-shadow:0 4px 14px rgba(0,0,0,.25);"; var html=LT+"a href="+QU+link+QU+" target="+QU+"_blank"+QU+" rel="+QU+"noopener"+QU+" aria-label="+QU+"Conversar pelo WhatsApp"+QU+" style="+QU+style+QU+GT+"&#x1f4ac;"+(label?" "+escHtml(label):"")+LT+"/a"+GT; var prev=add(box,"div",null,"margin-top:10px;padding:14px;background:#f1f5f9;border-radius:8px;");add(prev,"div","Prévia:","font-size:13px;color:#3a4a63;margin-bottom:6px;");add(prev,"span","&#x1f4ac;"+(label?" "+label:""),"display:inline-flex;align-items:center;gap:8px;background:"+GREEN+";color:#ffffff;padding:12px 18px;border-radius:999px;font:700 15px/1 Arial,sans-serif;box-shadow:0 4px 14px rgba(0,0,0,.25);"); codeBox(box,html);copyBtn(add(box,"div"),function(){return html;}); add(box,"div","Cole antes do fechamento do body, no rodapé do tema ou num bloco de HTML personalizado. No WordPress, um plugin de botão do WhatsApp faz o mesmo sem mexer no código.","font-size:13.5px;color:#3a4a63;margin-top:6px;"); lab.addEventListener("change",function(){state.label=lab.value;render();});side.addEventListener("change",function(){state.side=side.value;render();});} function init(){var n=el("hh-wa-num");if(!n){return;}if(n.getAttribute("data-hh-ready")==="1"){return;}n.setAttribute("data-hh-ready","1");var t=null;var go=function(){if(t){clearTimeout(t);}t=setTimeout(render,200);}; n.addEventListener("input",go);el("hh-wa-msg").addEventListener("input",go);el("hh-wa-intl").addEventListener("change",render); var tp=n.parentNode.parentNode.querySelectorAll("button.hh-wa-tpl");for(var i=0;i!==tp.length;i++){tp[i].addEventListener("click",function(){el("hh-wa-msg").value=this.getAttribute("data-t");render();});}render();} if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",init);}else{init();} })();</script>



<h2 class="wp-block-heading">Como funciona o link do WhatsApp</h2>



<p class="wp-block-paragraph">O link do WhatsApp é um endereço oficial, no domínio <strong>wa.me</strong>, que abre uma conversa com um número específico. Ele tem duas partes:</p>



<p class="wp-block-paragraph"><strong>1. O número, no formato internacional.</strong> Depois de <code>wa.me/</code> vem o número completo <strong>só com dígitos</strong>: o código do país (55, no Brasil), o DDD e o número. Nada de +, espaços, parênteses, traços ou zero antes do DDD.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Como o número aparece</th><th>Como fica no link</th></tr></thead><tbody><tr><td>(11) 99999-8888</td><td><code>wa.me/5511999998888</code></td></tr><tr><td>+55 21 98888-7777</td><td><code>wa.me/5521988887777</code></td></tr><tr><td>0xx31 97777-6666</td><td><code>wa.me/5531977776666</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>2. A mensagem pronta (opcional).</strong> Para a conversa abrir com um texto já digitado, acrescente <code>?text=</code> e a mensagem <strong>codificada</strong>: os espaços viram <code>%20</code>, os acentos viram códigos como <code>%C3%A1</code>, e caracteres como <code>&amp;</code> também precisam ser convertidos — senão a mensagem é cortada. Por exemplo:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;wa.me/5511999998888?text=Ol%C3%A1!%20Quero%20um%20or%C3%A7amento</code></pre>



<p class="wp-block-paragraph">O cliente ainda vê a mensagem antes de enviar e pode editá-la. <strong>O gerador acima faz essa codificação automaticamente.</strong></p>



<p class="wp-block-paragraph">Quando alguém toca no link, o WhatsApp abre no celular — ou o WhatsApp Web, no computador — já com a conversa e o texto prontos.</p>



<h2 class="wp-block-heading">Onde usar o link do WhatsApp</h2>



<p class="wp-block-paragraph">O link funciona em qualquer lugar que aceite um endereço de internet:</p>



<ul class="wp-block-list">
<li><strong>Na bio do Instagram e do TikTok</strong>, onde só cabe um link.</li>



<li><strong>No perfil da empresa no Google</strong>, no campo de site ou de mensagens.</li>



<li><strong>Em anúncios</strong>, levando o cliente direto para a conversa.</li>



<li>Na <a href="https://www.homehost.com.br/blog/contas-de-email/gerador-de-assinatura-de-e-mail/" data-wpel-link="internal" target="_self">assinatura do e-mail</a> e em respostas automáticas.</li>



<li><strong>No site</strong>, como botão flutuante ou em páginas de produto — cada página pode ter uma mensagem diferente, como <em>&#8220;Quero saber mais sobre o produto X&#8221;</em>.</li>
</ul>



<p class="wp-block-paragraph"><strong>E o QR Code leva o link para o mundo físico:</strong> cartão de visita, cardápio, embalagem, vitrine, nota fiscal. O cliente aponta a câmera e cai na conversa.</p>



<p class="wp-block-paragraph">O WhatsApp já é o principal canal de vendas on-line das empresas brasileiras: segundo a pesquisa TIC Empresas 2025, do Cetic.br, <strong>80% das empresas que vendem pela internet usam o WhatsApp</strong>, contra 32% que vendem pelo próprio site. Nosso levantamento sobre <a href="https://www.homehost.com.br/blog/hospedagem-de-sites/empresas-com-site-no-brasil/" data-wpel-link="internal" target="_self">empresas com site no Brasil</a> traz os números completos.</p>



<h2 class="wp-block-heading">Como colocar o botão do WhatsApp no site</h2>



<p class="wp-block-paragraph">O gerador entrega o código de um <strong>botão flutuante</strong> — aquele que fica fixo no canto da tela enquanto o visitante rola a página. Para usar:</p>



<ol class="wp-block-list">
<li><strong>Copie o código</strong> do item 3 do gerador.</li>



<li><strong>Cole antes do fechamento da tag body</strong> do site, no rodapé do tema ou num bloco de HTML personalizado.</li>



<li><strong>Teste no celular</strong>, que é de onde vem a maioria dos cliques.</li>
</ol>



<p class="wp-block-paragraph"><strong>No WordPress, há um caminho sem código:</strong> plugins como o Click to Chat criam o botão com algumas configurações. Nosso tutorial mostra <a href="https://www.homehost.com.br/blog/wordpress/botao-do-whatsapp-no-wordpress/" data-wpel-link="internal" target="_self">como criar um botão do WhatsApp no WordPress</a>, passo a passo.</p>



<p class="wp-block-paragraph"><strong>Uma escolha de design:</strong> o botão do gerador usa um verde mais escuro que o tradicional. O verde clássico do WhatsApp, com texto branco, tem contraste baixo demais para ser lido com facilidade — o tom escolhido mantém a identidade e passa nas regras de acessibilidade.</p>



<h2 class="wp-block-heading">Por que o meu link do WhatsApp não funciona?</h2>



<p class="wp-block-paragraph">Quando o link abre uma tela de erro ou uma conversa com o número errado, a causa quase sempre é uma destas:</p>



<ul class="wp-block-list">
<li><strong>Faltou o 55.</strong> Sem o código do país, o WhatsApp não sabe de onde é o número.</li>



<li><strong>Sobrou o zero ou o código da operadora.</strong> <code>wa.me/5501199999...</code> ou <code>wa.me/55011...</code> não funcionam: o DDD vem direto depois do 55.</li>



<li><strong>Faltou o nono dígito.</strong> Todo celular brasileiro tem 9 dígitos, começando por 9. Números antigos, de 8 dígitos, precisam do 9 na frente.</li>



<li><strong>Ficaram símbolos no número.</strong> Parênteses, traços, espaços ou o sinal de + quebram o link.</li>



<li><strong>A mensagem não foi codificada.</strong> Um <code>&amp;</code> ou um <code>#</code> no meio do texto corta a mensagem naquele ponto.</li>



<li><strong>O número não tem WhatsApp.</strong> Telefone fixo só funciona se estiver cadastrado no WhatsApp Business.</li>
</ul>



<h2 class="wp-block-heading">O link curto do WhatsApp Business</h2>



<p class="wp-block-paragraph">O aplicativo <strong>WhatsApp Business</strong> também oferece um link curto e um QR Code próprios, na área de ferramentas comerciais — dependendo da versão do aplicativo. <strong>A vantagem do link wa.me é o controle:</strong> ele funciona com qualquer número e permite uma mensagem diferente para cada canal — uma para o Instagram, outra para o cardápio, outra para cada produto do site —, o que ajuda a saber de onde vem cada cliente.</p>



<p class="wp-block-paragraph"><strong>Um cuidado de privacidade:</strong> o número aparece no link. Use o número comercial da empresa, não o pessoal.</p>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>Como criar um link do WhatsApp?</strong><br>Use o formato <code>https://wa.me/</code> seguido do número completo, só com dígitos: 55 (o código do Brasil), o DDD e o número, como <code>https://wa.me/5511999998888</code>. Para incluir uma mensagem pronta, acrescente <code>?text=</code> e o texto codificado. O gerador desta página monta o link automaticamente.</p>



<p class="wp-block-paragraph"><strong>Como colocar uma mensagem automática no link do WhatsApp?</strong><br>Acrescente <code>?text=</code> ao fim do link, seguido da mensagem codificada para a internet — com os espaços como <code>%20</code> e os acentos convertidos. O cliente recebe a mensagem já digitada e só precisa tocar em enviar, podendo editá-la antes.</p>



<p class="wp-block-paragraph"><strong>Preciso do WhatsApp Business para criar um link?</strong><br>Não. O link wa.me funciona com qualquer conta de WhatsApp, pessoal ou Business. O WhatsApp Business é necessário só se o número for de telefone fixo, e oferece recursos extras para empresas, como catálogo e respostas automáticas.</p>



<p class="wp-block-paragraph"><strong>O link do WhatsApp funciona no computador?</strong><br>Sim. No computador, o link abre o WhatsApp Web ou o aplicativo do WhatsApp para desktop, com a conversa e a mensagem prontas. Se o WhatsApp não estiver conectado, o navegador mostra a opção de abrir a conversa.</p>



<p class="wp-block-paragraph"><strong>Como fazer um QR Code do WhatsApp?</strong><br>Gere o link do WhatsApp e transforme-o em QR Code — o gerador desta página faz os dois de uma vez e permite baixar a imagem. Imprima com pelo menos 2 cm de largura e teste com a câmera do celular antes de mandar para a gráfica.</p>



<p class="wp-block-paragraph"><strong>Por que o link do WhatsApp não funciona?</strong><br>Os erros mais comuns são a falta do 55, o zero antes do DDD, a falta do nono dígito nos celulares, símbolos no número e mensagens com caracteres especiais sem codificação. Também não funciona se o número não tiver conta no WhatsApp.</p>



<p class="wp-block-paragraph"><strong>O link do WhatsApp expira?</strong><br>Não. O link wa.me funciona enquanto o número tiver uma conta ativa no WhatsApp. Se você trocar de número, precisa gerar um link novo — e atualizar os QR Codes impressos.</p>



<p class="wp-block-paragraph"><strong>Posso ter links diferentes para o mesmo número?</strong><br>Sim. Você pode criar quantos links quiser para o mesmo número, cada um com uma mensagem pronta diferente. Isso ajuda a identificar de onde vem cada cliente — do Instagram, do site, do cardápio ou de um anúncio.</p>



<p class="wp-block-paragraph"><strong>Qual a diferença entre wa.me e api.whatsapp.com?</strong><br>Os dois são endereços oficiais do WhatsApp e abrem a mesma conversa. O wa.me é a versão curta, recomendada pelo próprio WhatsApp, e é o formato que o gerador desta página usa.</p>



<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{"@type":"Question","name":"Como criar um link do WhatsApp?","acceptedAnswer":{"@type":"Answer","text":"Use o formato https://wa.me/ seguido do número completo, só com dígitos: 55, o código do Brasil, o DDD e o número, como https://wa.me/5511999998888. Para incluir uma mensagem pronta, acrescente ?text= e o texto codificado."}},
{"@type":"Question","name":"Como colocar uma mensagem automática no link do WhatsApp?","acceptedAnswer":{"@type":"Answer","text":"Acrescente ?text= ao fim do link, seguido da mensagem codificada para a internet, com os espaços como %20 e os acentos convertidos. O cliente recebe a mensagem já digitada e só precisa tocar em enviar, podendo editá-la antes."}},
{"@type":"Question","name":"Preciso do WhatsApp Business para criar um link do WhatsApp?","acceptedAnswer":{"@type":"Answer","text":"Não. O link wa.me funciona com qualquer conta de WhatsApp, pessoal ou Business. O WhatsApp Business é necessário só se o número for de telefone fixo, e oferece recursos extras para empresas, como catálogo e respostas automáticas."}},
{"@type":"Question","name":"O link do WhatsApp funciona no computador?","acceptedAnswer":{"@type":"Answer","text":"Sim. No computador, o link abre o WhatsApp Web ou o aplicativo do WhatsApp para desktop, com a conversa e a mensagem prontas. Se o WhatsApp não estiver conectado, o navegador mostra a opção de abrir a conversa."}},
{"@type":"Question","name":"Como fazer um QR Code do WhatsApp?","acceptedAnswer":{"@type":"Answer","text":"Gere o link do WhatsApp e transforme-o em QR Code. Imprima com pelo menos 2 cm de largura e teste com a câmera do celular antes de mandar para a gráfica."}},
{"@type":"Question","name":"Por que o link do WhatsApp não funciona?","acceptedAnswer":{"@type":"Answer","text":"Os erros mais comuns são a falta do 55, o zero antes do DDD, a falta do nono dígito nos celulares, símbolos no número e mensagens com caracteres especiais sem codificação. Também não funciona se o número não tiver conta no WhatsApp."}},
{"@type":"Question","name":"O link do WhatsApp expira?","acceptedAnswer":{"@type":"Answer","text":"Não. O link wa.me funciona enquanto o número tiver uma conta ativa no WhatsApp. Se você trocar de número, precisa gerar um link novo e atualizar os QR Codes impressos."}},
{"@type":"Question","name":"Posso ter links diferentes do WhatsApp para o mesmo número?","acceptedAnswer":{"@type":"Answer","text":"Sim. Você pode criar quantos links quiser para o mesmo número, cada um com uma mensagem pronta diferente. Isso ajuda a identificar de onde vem cada cliente: do Instagram, do site, do cardápio ou de um anúncio."}},
{"@type":"Question","name":"Qual a diferença entre wa.me e api.whatsapp.com?","acceptedAnswer":{"@type":"Answer","text":"Os dois são endereços oficiais do WhatsApp e abrem a mesma conversa. O wa.me é a versão curta, recomendada pelo próprio WhatsApp."}}
]
}
</script>



<div style="max-width:760px; margin:32px auto; background:linear-gradient(135deg,#1a73e8 0%,#0b3d91 100%); border-radius:16px; padding:32px 28px; font-family:Arial, Helvetica, sans-serif; color:#fff; box-shadow:0 10px 30px rgba(26,115,232,.25);">
<div style="display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap;">
<div style="flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; width:52px; height:52px; border-radius:12px; background:rgba(255,255,255,.18);">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
</div>
<div style="flex:1 1 320px; min-width:260px;">
<div style="font-weight:800; line-height:1.25; margin-bottom:8px; font-size:19px; color:#ffffff;">O WhatsApp atende; o site convence</div>
<p style="margin:0 0 18px; line-height:1.6; color:#ffffff;">Com um site próprio, o cliente conhece seus produtos antes de chamar no WhatsApp — e chega à conversa pronto para comprar. Na Homehost, a hospedagem sai a partir de R$ 7,90/mês, com SSL grátis, servidor no Brasil e suporte em português.</p>
<a href="https://www.homehost.com.br/hospedagem-de-sites/" style="display:inline-flex; align-items:center; gap:8px; background:#fff; color:#0b3d91; font-weight:700; text-decoration:none; padding:13px 26px; border-radius:10px; box-shadow:0 4px 12px rgba(0,0,0,.15);" data-wpel-link="external" target="_blank" rel="external noopener">
Ver planos de hospedagem
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0b3d91" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"></path></svg>
</a>
</div>
</div>
</div>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">O link do WhatsApp é a forma mais curta de transformar um visitante em conversa: <strong>wa.me, o 55, o DDD e o número, só com dígitos</strong> — e, se quiser, uma mensagem pronta codificada no fim. Com ele, o cliente não precisa salvar contato nem digitar nada.</p>



<p class="wp-block-paragraph">O mesmo link vira QR Code para o cartão e a embalagem, e botão flutuante para o site. <strong>Crie um link diferente para cada canal</strong>, com uma mensagem que identifique a origem, e você passa a saber de onde vêm os clientes. E, antes de divulgar, teste: um link sem o 55 ou sem o nono dígito é o erro mais comum — e o mais fácil de evitar.</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/link-do-whatsapp/" data-wpel-link="internal" target="_self">Link do WhatsApp: como criar o seu (com gerador e QR Code)</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18408</post-id>	</item>
		<item>
		<title>Máscara de sub-rede e CIDR: tabela completa e calculadora de IP</title>
		<link>https://www.homehost.com.br/blog/internet/mascara-de-sub-rede/</link>
		
		<dc:creator><![CDATA[Gustavo Gallas]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 11:32:55 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<guid isPermaLink="false">https://www.homehost.com.br/blog/?p=18371</guid>

					<description><![CDATA[<p>Todo endereço IP vem acompanhado de uma máscara — o 255.255.255.0 que aparece na configuração de rede, ou o /24 que o comando ip addr mostra no Linux. É ela que diz quais endereços fazem parte da mesma rede, quantos dispositivos cabem nela e onde a rede começa e termina. Este guia traz uma calculadora [&#8230;]</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/mascara-de-sub-rede/" data-wpel-link="internal" target="_self">Máscara de sub-rede e CIDR: tabela completa e calculadora de IP</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Todo endereço IP vem acompanhado de uma máscara — o <code>255.255.255.0</code> que aparece na configuração de rede, ou o <code>/24</code> que o comando <code>ip addr</code> mostra no Linux. <strong>É ela que diz quais endereços fazem parte da mesma rede</strong>, quantos dispositivos cabem nela e onde a rede começa e termina.</p>



<p class="wp-block-paragraph">Este guia traz uma <strong>calculadora</strong> que faz todas essas contas para qualquer endereço, a <strong>tabela completa de máscaras</strong>, de <code>/8</code> a <code>/32</code>, e a explicação de como o cálculo funciona — incluindo como dividir uma rede em sub-redes menores.</p>



<div style="border:1px solid #9db4d6; border-left:4px solid #0b3d91; background:#eef3fa; border-radius:8px; padding:18px 22px; margin:24px 0; font-family:Arial, Helvetica, sans-serif;">
<div style="font-weight:700; color:#0b3d91; margin-bottom:10px; text-transform:uppercase; letter-spacing:.05em; font-size:14px;">Resposta rápida</div>
<p style="margin:0; line-height:1.65; color:#16243d;">A <strong>máscara de sub-rede</strong> separa o endereço IP em duas partes: a <strong>rede</strong> e o <strong>dispositivo</strong>. O <strong>/24</strong> — ou <strong>255.255.255.0</strong> — significa que os primeiros 24 bits identificam a rede, sobrando <strong>256 endereços</strong>, dos quais <strong>254 podem ser usados</strong> por dispositivos: o primeiro é o endereço da rede e o último, o de broadcast.</p>
</div>



<h2 class="wp-block-heading">Calculadora de IP e sub-rede</h2>



<p class="wp-block-paragraph">Digite um endereço com o prefixo — como 192.168.1.10/24 — ou escolha a máscara na lista. A calculadora mostra o endereço de rede, o broadcast, a faixa de IPs utilizáveis, o número de hosts, a máscara em binário e o tipo de endereço — e divide a rede em sub-redes menores.</p>



<div class="hh-subnet" style="max-width:780px;margin:28px auto;border:1px solid #c9d6ea;border-radius:14px;padding:22px 24px;background:#f7faff;font-family:Arial,Helvetica,sans-serif;color:#16243d;font-size:15px;">
<div style="font-weight:800;font-size:19px;color:#0b3d91;margin-bottom:4px;">Calculadora de IP e sub-rede</div>
<p style="margin:0 0 12px;line-height:1.5;font-size:14.5px;">Digite um endereço IPv4 — com o prefixo, como 192.168.1.10/24, ou escolha a máscara na lista.</p>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px 22px;">
<div><label for="hh-sn-ip" style="display:block;font-weight:700;margin-bottom:4px;">Endereço IP</label>
<input type="text" id="hh-sn-ip" value="192.168.1.10/24" style="width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid #9db4d6;border-radius:8px;font-family:Consolas,Menlo,monospace;font-size:16px;"></div>
<div><label for="hh-sn-mask" style="display:block;font-weight:700;margin-bottom:4px;">Máscara de sub-rede</label>
<select id="hh-sn-mask" style="width:100%;padding:9px 10px;border:1px solid #9db4d6;border-radius:8px;font-family:Consolas,Menlo,monospace;font-size:14.5px;"></select></div>
</div>
<div id="hh-sn-out" aria-live="polite" style="margin-top:14px;"></div>
<div style="margin-top:14px;">
<label for="hh-sn-div" style="display:block;font-weight:700;margin-bottom:4px;">Dividir esta rede</label>
<select id="hh-sn-div" style="width:100%;max-width:360px;padding:8px 10px;border:1px solid #9db4d6;border-radius:8px;"></select>
<div id="hh-sn-subs" style="margin-top:10px;"></div>
</div>
<p style="margin:12px 0 0;font-size:12.5px;color:#3a4a63;line-height:1.5;">Cálculos para IPv4. Nas redes /31 (ligações ponto a ponto) os dois endereços são utilizáveis, e uma /32 representa um único endereço. Fonte: homehost.com.br</p>
</div>
<script>(function () { var TWO32=4294967296; function inR(v,a,b){return Math.max(a,Math.min(b,v))===v;} function pow2(k){return Math.pow(2,k);} function digitsOnly(s){if(s===""){return false;}for(var i=0;i!==s.length;i++){if("0123456789".indexOf(s.charAt(i))===-1){return false;}}return true;} function parseIP(s){s=String(s||"").split(" ").join("");var p=s.split(".");if(p.length!==4){return null;}var n=0;for(var i=0;i!==4;i++){if(!digitsOnly(p[i])){return null;}if(p[i].length===4){return null;}if(Math.max(p[i].length,3)!==3){return null;}var v=Number(p[i]);if(!inR(v,0,255)){return null;}n=n*256+v;}return n;} function ipStr(n){var o=[];for(var i=0;i!==4;i++){o.unshift(n%256);n=Math.floor(n/256);}return o.join(".");} function maskToPrefix(m){var host=TWO32-m;for(var k=0;k!==33;k++){if(pow2(k)===host){return 32-k;}}return -1;} function calc(ip,prefix){var size=pow2(32-prefix);var net=ip-(ip%size);var bc=net+size-1;var first,last,usable;if(prefix===32){first=net;last=net;usable=1;}else if(prefix===31){first=net;last=bc;usable=2;}else{first=net+1;last=bc-1;usable=size-2;}return {net:net,bc:bc,first:first,last:last,usable:usable,total:size,mask:TWO32-size,wild:size-1,prefix:prefix};} function inNet(ip,base,prefix){var size=pow2(32-prefix);return ip-(ip%size)===base;} var KINDS=[["255.255.255.255",32,"Broadcast limitado — usado para falar com toda a rede local de uma vez"],["0.0.0.0",8,"Reservado (este host) — não é usado como endereço de um dispositivo"],["10.0.0.0",8,"Privado (RFC 1918) — usado em redes locais"],["172.16.0.0",12,"Privado (RFC 1918) — usado em redes locais"],["192.168.0.0",16,"Privado (RFC 1918) — usado em redes locais"],["100.64.0.0",10,"CGNAT (RFC 6598) — compartilhado pelas operadoras entre vários clientes"],["127.0.0.0",8,"Loopback — aponta para o próprio computador (localhost)"],["169.254.0.0",16,"Link-local — atribuído automaticamente quando o DHCP falha"],["192.0.2.0",24,"Reservado para documentação e exemplos"],["198.51.100.0",24,"Reservado para documentação e exemplos"],["203.0.113.0",24,"Reservado para documentação e exemplos"],["198.18.0.0",15,"Reservado para testes de desempenho de rede"],["224.0.0.0",4,"Multicast — envio para um grupo de dispositivos"],["240.0.0.0",4,"Reservado para uso futuro"]]; function kind(ip){for(var i=0;i!==KINDS.length;i++){if(inNet(ip,parseIP(KINDS[i][0]),KINDS[i][1])){return KINDS[i][2];}}return "Público — roteável na internet";} function bits(n){var s=n.toString(2);while(s.length!==32){s="0"+s;}return s;} function el(id){return document.getElementById(id);} function add(p,tag,text,style){var n=document.createElement(tag);if(text!==null){if(text!==undefined){n.textContent=String(text);}}if(style){n.setAttribute("style",style);}p.appendChild(n);return n;} function fmt(n){return Number(n).toLocaleString("pt-BR");} function clear(n){while(n.firstChild){n.removeChild(n.firstChild);}} function row(tb,label,value,strong){var tr=add(tb,"tr");add(tr,"td",label,"padding:7px 10px;border-bottom:1px solid #e3eaf4;color:#3a4a63;");add(tr,"td",value,"padding:7px 10px;border-bottom:1px solid #e3eaf4;font-family:Consolas,Menlo,monospace;text-align:right;"+(strong?"font-weight:700;color:#0b3d91;":""));} function binLine(parent,label,n,prefix){var line=add(parent,"div",null,"font-family:Consolas,Menlo,monospace;font-size:13.5px;margin-top:4px;word-break:break-all;");add(line,"span",label,"display:inline-block;min-width:92px;color:#3a4a63;font-family:Arial,Helvetica,sans-serif;");var b=bits(n);for(var o=0;o!==4;o++){for(var i=0;i!==8;i++){var idx=o*8+i;var isNet=Math.max(idx,prefix-1)===prefix-1;add(line,"span",b.charAt(idx),isNet?"color:#0b3d91;font-weight:700;":"color:#b06a00;");}if(o!==3){add(line,"span",".","color:#9db4d6;");}}} var state={ip:null,prefix:24}; function readInput(){var raw=String(el("hh-sn-ip").value||"").trim();var ipPart=raw;var pre=null;var maskErr=false; if(raw.indexOf("/")!==-1){var sp=raw.split("/");ipPart=sp[0];var p=sp[1].trim();if(digitsOnly(p)){var pn=Number(p);if(inR(pn,0,32)){pre=pn;}else{maskErr=true;}}else{var mm=parseIP(p);var mp=mm===null?-1:maskToPrefix(mm);if(mp===-1){maskErr=true;}else{pre=mp;}}} else{var parts=raw.split(" ").filter(function(x){return x!=="";});if(parts.length===2){ipPart=parts[0];var m2=parseIP(parts[1]);var mp2=m2===null?-1:maskToPrefix(m2);if(mp2===-1){maskErr=true;}else{pre=mp2;}}} return {ip:parseIP(ipPart),prefix:pre,maskErr:maskErr};} function render(){var out=el("hh-sn-out");clear(out);var r=readInput(); if(r.prefix!==null){el("hh-sn-mask").value=String(r.prefix);} var prefix=Number(el("hh-sn-mask").value);state.prefix=prefix;state.ip=r.ip; var box=add(out,"div",null,"padding:14px 16px;background:#ffffff;border:1px solid #dbe4f2;border-radius:10px;line-height:1.5;"); if(r.ip===null){add(box,"div","Endereço inválido. Use quatro números de 0 a 255 separados por pontos, como 192.168.1.10.","color:#8f1f12;font-weight:700;");buildDiv();return;} if(r.maskErr){add(box,"div","Máscara inválida: os bits 1 da máscara precisam ser contínuos, como em 255.255.255.0. Usando a máscara escolhida na lista.","color:#8a5000;font-weight:700;margin-bottom:8px;");} var c=calc(r.ip,prefix); add(box,"div",ipStr(c.net)+"/"+prefix,"font-family:Consolas,Menlo,monospace;font-size:24px;font-weight:800;color:#0b3d91;"); add(box,"div",kind(r.ip),"margin:2px 0 10px;color:#3a4a63;font-size:14px;"); var tb=add(add(box,"table",null,"width:100%;border-collapse:collapse;font-size:14.5px;"),"tbody"); row(tb,"Endereço de rede",ipStr(c.net),true); if(prefix===32){row(tb,"Endereço único",ipStr(c.net),true);}else{row(tb,"Primeiro IP utilizável",ipStr(c.first));row(tb,"Último IP utilizável",ipStr(c.last));row(tb,"Broadcast",prefix===31?"não há (rede /31)":ipStr(c.bc));} row(tb,"Hosts utilizáveis",fmt(c.usable),true);row(tb,"Total de endereços",fmt(c.total));row(tb,"Máscara de sub-rede",ipStr(c.mask));row(tb,"Máscara curinga (wildcard)",ipStr(c.wild));row(tb,"Notação CIDR","/"+prefix); var bin=add(box,"div",null,"margin-top:12px;");add(bin,"div","Em binário — rede em azul, hosts em laranja","font-weight:700;font-size:13.5px;");binLine(bin,"Endereço",r.ip,prefix);binLine(bin,"Máscara",c.mask,prefix); var notes=[];if(Math.max(prefix,30)===30){if(r.ip===c.net){notes.push("Este é o endereço de rede: ele identifica a rede inteira e não pode ser usado por um dispositivo.");}if(r.ip===c.bc){notes.push("Este é o endereço de broadcast: ele fala com todos os dispositivos da rede e não pode ser usado por um deles.");}} if(notes.length){var w=add(box,"div",null,"margin-top:12px;padding:10px 12px;background:#fff8e8;border:1px solid #f0d9a8;border-radius:8px;font-size:13.5px;");for(var i=0;i!==notes.length;i++){add(w,"div",notes[i]);}} buildDiv();} function buildDiv(){var sel=el("hh-sn-div");var keep=sel.value;clear(sel);var prefix=state.prefix;add(sel,"option","— escolha —").setAttribute("value","");var maxP=Math.min(32,prefix+8);for(var np=prefix+1;np!==maxP+1;np++){var n=pow2(np-prefix);var o=add(sel,"option","Em "+fmt(n)+" sub-redes /"+np+" ("+fmt(pow2(32-np))+" endereços cada)");o.setAttribute("value",String(np));}if(keep!==""){var ok=false;for(var k=0;k!==sel.options.length;k++){if(sel.options[k].value===keep){ok=true;}}sel.value=ok?keep:"";}renderSubs();} function renderSubs(){var box=el("hh-sn-subs");clear(box);var v=el("hh-sn-div").value;if(v===""){return;}if(state.ip===null){return;}var np=Number(v);var base=calc(state.ip,state.prefix);var size=pow2(32-np);var n=pow2(np-state.prefix);var show=Math.min(n,64); var wrap=add(box,"div",null,"overflow-x:auto;");var t=add(wrap,"table",null,"width:100%;border-collapse:collapse;font-size:13.5px;min-width:460px;");var th=add(add(t,"thead"),"tr",null,"background:#0b3d91;");var heads=["Sub-rede","Primeiro utilizável","Último utilizável","Broadcast"];for(var h=0;h!==4;h++){add(th,"th",heads[h],"padding:8px 10px;color:#ffffff;text-align:left;");}var tb=add(t,"tbody"); for(var i=0;i!==show;i++){var c=calc(base.net+i*size,np);var tr=add(tb,"tr",null,i%2===0?"background:#f7fafd;":"background:#ffffff;");add(tr,"td",ipStr(c.net)+"/"+np,"padding:7px 10px;border-bottom:1px solid #e3eaf4;font-family:Consolas,Menlo,monospace;font-weight:700;");add(tr,"td",ipStr(c.first),"padding:7px 10px;border-bottom:1px solid #e3eaf4;font-family:Consolas,Menlo,monospace;");add(tr,"td",ipStr(c.last),"padding:7px 10px;border-bottom:1px solid #e3eaf4;font-family:Consolas,Menlo,monospace;");add(tr,"td",np===31?"—":(np===32?"—":ipStr(c.bc)),"padding:7px 10px;border-bottom:1px solid #e3eaf4;font-family:Consolas,Menlo,monospace;");} if(n!==show){add(box,"div","Mostrando as primeiras 64 de "+fmt(n)+" sub-redes.","margin-top:6px;font-size:13px;color:#3a4a63;");}} function init(){var sel=el("hh-sn-mask");if(!sel){return;}if(sel.getAttribute("data-hh-ready")==="1"){return;}sel.setAttribute("data-hh-ready","1"); for(var p=32;p!==-1;p--){var o=add(sel,"option","/"+p+" — "+ipStr(TWO32-pow2(32-p)));o.setAttribute("value",String(p));}sel.value="24"; var timer=null;var go=function(){if(timer){clearTimeout(timer);}timer=setTimeout(render,120);}; el("hh-sn-ip").addEventListener("input",go);el("hh-sn-ip").addEventListener("change",go); sel.addEventListener("change",function(){var ip=el("hh-sn-ip");var v=String(ip.value||"");if(v.indexOf("/")!==-1){ip.value=v.split("/")[0]+"/"+sel.value;}else{var sp=v.trim().split(" ").filter(function(x){return x!=="";});if(sp.length===2){ip.value=sp[0]+"/"+sel.value;}}render();}); el("hh-sn-div").addEventListener("change",renderSubs);render();} if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",init);}else{init();} })();</script>



<h2 class="wp-block-heading">O que é a máscara de sub-rede</h2>



<p class="wp-block-paragraph">Um endereço IP tem duas partes, como um endereço de rua: <strong>a rede</strong> — a rua — e <strong>o dispositivo</strong> — o número da casa. Como explicamos no guia sobre <a href="https://www.homehost.com.br/blog/internet/o-que-e-endereco-ip/" data-wpel-link="internal" target="_self">o que é endereço IP</a>, todos os aparelhos da sua casa costumam ter IPs que começam iguais e mudam só no final: eles estão na mesma rua.</p>



<p class="wp-block-paragraph"><strong>A máscara de sub-rede é o que diz onde termina a rua e começa o número.</strong> Na máscara <code>255.255.255.0</code>, cada <code>255</code> marca uma parte que pertence à rede, e o <code>0</code> marca a parte livre para os dispositivos. Com o IP <code>192.168.1.10</code>, a rede é <code>192.168.1</code> e o dispositivo é o <code>10</code>.</p>



<h2 class="wp-block-heading">O que significa o /24: a notação CIDR</h2>



<p class="wp-block-paragraph">Por baixo, um endereço IPv4 tem <strong>32 bits</strong> — zeros e uns —, e a máscara também. <strong>Cada 255 da máscara são oito bits 1 seguidos</strong>: <code>11111111</code>. A máscara <code>255.255.255.0</code> são, portanto, <strong>24 bits 1</strong> seguidos de <strong>8 bits 0</strong>.</p>



<p class="wp-block-paragraph"><strong>A notação CIDR conta esses bits 1.</strong> Em vez de escrever <code>255.255.255.0</code>, escreve-se <code>/24</code>. É o que o comando <code>ip addr</code> mostra no Linux — como explicamos no guia do <a href="https://www.homehost.com.br/blog/tutoriais/linux/comando-ip-no-linux/" data-wpel-link="internal" target="_self">comando ip</a>.</p>



<p class="wp-block-paragraph"><strong>A conta do tamanho da rede sai daí:</strong> os bits que sobram para os dispositivos são <code>32 − 24 = 8</code>, e 8 bits formam <code>2⁸ = 256</code> combinações — os 256 endereços da rede. <strong>Cada bit a mais no prefixo divide a rede pela metade:</strong> um <code>/25</code> tem 128 endereços, um <code>/26</code>, 64.</p>



<h2 class="wp-block-heading">Tabela de máscaras de sub-rede</h2>



<p class="wp-block-paragraph">Todas as máscaras de /8 a /32, com a máscara curinga — usada em listas de acesso de roteadores e firewalls — e o número de hosts de cada uma:</p>



<div style="overflow-x:auto; margin:24px 0;">
<table style="width:100%; border-collapse:collapse; font-family:Arial, Helvetica, sans-serif; font-size:14.5px; min-width:600px;">
<thead>
<tr style="background-color:#0b3d91; color:#ffffff; text-align:left;">
<th style="padding:11px 12px; border:1px solid #0b3d91; color:#ffffff;">Prefixo</th>
<th style="padding:11px 12px; border:1px solid #0b3d91; color:#ffffff;">Máscara</th>
<th style="padding:11px 12px; border:1px solid #0b3d91; color:#ffffff;">Curinga</th>
<th style="padding:11px 12px; border:1px solid #0b3d91; color:#ffffff;">Endereços</th>
<th style="padding:11px 12px; border:1px solid #0b3d91; color:#ffffff;">Hosts utilizáveis</th>
</tr>
</thead>
<tbody>
<tr style="background-color:#eaf1fb;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/8</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.0.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.255.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">16.777.216</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">16.777.214</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/9</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.128.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.127.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">8.388.608</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">8.388.606</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/10</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.192.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.63.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">4.194.304</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">4.194.302</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/11</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.224.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.31.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2.097.152</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2.097.150</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/12</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.240.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.15.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1.048.576</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1.048.574</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/13</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.248.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.7.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">524.288</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">524.286</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/14</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.252.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.3.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">262.144</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">262.142</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/15</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.254.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.1.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">131.072</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">131.070</td></tr>
<tr style="background-color:#eaf1fb;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/16</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">65.536</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">65.534</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/17</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.128.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.127.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">32.768</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">32.766</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/18</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.192.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.63.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">16.384</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">16.382</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/19</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.224.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.31.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">8.192</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">8.190</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/20</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.240.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.15.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">4.096</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">4.094</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/21</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.248.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.7.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2.048</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2.046</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/22</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.252.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.3.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1.024</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1.022</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/23</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.254.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.1.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">512</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">510</td></tr>
<tr style="background-color:#eaf1fb;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/24</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">256</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">254</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/25</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.128</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.127</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">128</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">126</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/26</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.192</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.63</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">64</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">62</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/27</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.224</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.31</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">32</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">30</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/28</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.240</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.15</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">16</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">14</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/29</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.248</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.7</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">8</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">6</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/30</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.252</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.3</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">4</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2</td></tr>
<tr style="background-color:#ffffff;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/31</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.254</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.1</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">2</td></tr>
<tr style="background-color:#f7fafd;"><td style="padding:9px 12px; border:1px solid #dde6ef; font-weight:700; color:#0b3d91; font-family:Consolas,Menlo,monospace;">/32</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">255.255.255.255</td><td style="padding:9px 12px; border:1px solid #dde6ef; font-family:Consolas,Menlo,monospace;">0.0.0.0</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1</td><td style="padding:9px 12px; border:1px solid #dde6ef; text-align:right;">1</td></tr>
</tbody>
</table>
<p style="margin:8px 0 0; font-size:13px; color:#3a4a63; font-family:Arial, Helvetica, sans-serif; line-height:1.5;">Em destaque, os três prefixos mais comuns. Nas redes /31 os dois endereços são utilizáveis (ligações ponto a ponto), e uma /32 representa um único endereço.</p>
</div>



<h2 class="wp-block-heading">Como calcular a sub-rede na mão</h2>



<p class="wp-block-paragraph">Veja o cálculo do IP <code>192.168.1.100/26</code>, passo a passo:</p>



<ol class="wp-block-list">
<li><strong>O tamanho do bloco.</strong> Sobram <code>32 − 26 = 6</code> bits para os dispositivos, e <code>2⁶ = 64</code>. Cada rede /26 tem <strong>64 endereços</strong>.</li>



<li><strong>O endereço de rede.</strong> As redes /26 começam nos múltiplos de 64 do último número: 0, 64, 128 e 192. O 100 fica entre 64 e 127, então <strong>a rede é <code>192.168.1.64</code></strong>.</li>



<li><strong>O broadcast.</strong> É o último endereço do bloco: <code>64 + 64 − 1 = 127</code>, ou seja, <strong><code>192.168.1.127</code></strong>.</li>



<li><strong>A faixa utilizável.</strong> Tudo entre os dois: de <strong><code>192.168.1.65</code> a <code>192.168.1.126</code></strong> — <strong>62 dispositivos</strong>.</li>
</ol>



<p class="wp-block-paragraph">Confira na calculadora acima: digite <code>192.168.1.100/26</code> e o resultado é o mesmo.</p>



<h2 class="wp-block-heading">Como dividir uma rede em sub-redes</h2>



<p class="wp-block-paragraph"><strong>Dividir uma rede é aumentar o prefixo.</strong> Cada bit a mais divide a rede em duas partes iguais; dois bits a mais, em quatro.</p>



<p class="wp-block-paragraph">Por exemplo, a rede <code>192.168.1.0/24</code> — 256 endereços — dividida em <strong>quatro sub-redes</strong> precisa de 2 bits a mais, e vira quatro redes <strong>/26</strong> de 64 endereços cada:</p>



<ul class="wp-block-list">
<li><code>192.168.1.0/26</code> — dispositivos de <code>.1</code> a <code>.62</code></li>



<li><code>192.168.1.64/26</code> — de <code>.65</code> a <code>.126</code></li>



<li><code>192.168.1.128/26</code> — de <code>.129</code> a <code>.190</code></li>



<li><code>192.168.1.192/26</code> — de <code>.193</code> a <code>.254</code></li>
</ul>



<p class="wp-block-paragraph"><strong>É assim que uma empresa separa a rede do escritório da rede de visitantes, das câmeras ou dos servidores.</strong> Na calculadora, escolha a opção em &#8220;Dividir esta rede&#8221; para ver a lista de qualquer divisão.</p>



<h2 class="wp-block-heading">Por que dois endereços não podem ser usados</h2>



<p class="wp-block-paragraph"><strong>Em quase toda rede, o primeiro e o último endereço são reservados:</strong></p>



<ul class="wp-block-list">
<li><strong>O primeiro é o endereço da rede</strong> — ele identifica a rede inteira, como o nome da rua.</li>



<li><strong>O último é o broadcast</strong> — uma mensagem enviada para ele chega a todos os dispositivos da rede de uma vez.</li>
</ul>



<p class="wp-block-paragraph"><strong>É por isso que um /24 tem 256 endereços, mas só 254 hosts.</strong> As exceções são as duas menores redes: <strong>o /31</strong>, usado em ligações diretas entre dois roteadores, em que os dois endereços são utilizáveis, e <strong>o /32</strong>, que representa um único endereço — comum em regras de firewall para liberar ou bloquear um IP específico.</p>



<h2 class="wp-block-heading">Endereços que você vai reconhecer</h2>



<p class="wp-block-paragraph">A calculadora também mostra o tipo de cada endereço. Os mais comuns:</p>



<ul class="wp-block-list">
<li><strong><code>192.168.x.x</code>, <code>10.x.x.x</code> e <code>172.16.x.x</code> a <code>172.31.x.x</code></strong> — <strong>privados</strong>: usados dentro de casas e empresas, nunca na internet.</li>



<li><strong><code>100.64.x.x</code> a <code>100.127.x.x</code></strong> — <strong>CGNAT</strong>: a faixa que as operadoras usam quando colocam vários clientes atrás do mesmo IP público.</li>



<li><strong><code>127.0.0.1</code></strong> — <strong>loopback</strong>, o próprio computador.</li>



<li><strong><code>169.254.x.x</code></strong> — <strong>link-local</strong>: o endereço que o computador atribui a si mesmo quando não consegue um IP do roteador. <strong>Se você vê um desses, o DHCP falhou.</strong></li>
</ul>



<h2 class="wp-block-heading">Perguntas frequentes</h2>



<p class="wp-block-paragraph"><strong>O que é máscara de sub-rede?</strong><br>É o número que divide um endereço IP em duas partes: a rede e o dispositivo. Na máscara 255.255.255.0, os três primeiros blocos identificam a rede, e o último fica livre para os dispositivos — 254 deles.</p>



<p class="wp-block-paragraph"><strong>O que significa o /24 depois do IP?</strong><br>É a notação CIDR: o número de bits que identificam a rede. Um /24 tem 24 bits de rede, o mesmo que a máscara 255.255.255.0, e deixa 256 endereços na rede, dos quais 254 podem ser usados por dispositivos.</p>



<p class="wp-block-paragraph"><strong>Qual a máscara de um /24, /16 e /8?</strong><br>O /24 é 255.255.255.0, com 254 hosts; o /16 é 255.255.0.0, com 65.534 hosts; e o /8 é 255.0.0.0, com 16.777.214 hosts. A tabela deste artigo mostra todas as máscaras de /8 a /32.</p>



<p class="wp-block-paragraph"><strong>Como calcular quantos hosts uma rede tem?</strong><br>Subtraia o prefixo de 32, eleve 2 a esse resultado e tire 2 — o endereço de rede e o broadcast. Num /26: 32 − 26 = 6, 2⁶ = 64, e 64 − 2 = 62 hosts.</p>



<p class="wp-block-paragraph"><strong>Por que um /24 tem 254 hosts e não 256?</strong><br>Porque dois endereços são reservados: o primeiro identifica a rede e o último é o broadcast, que fala com todos os dispositivos de uma vez. Sobram 254 para computadores, celulares e outros aparelhos.</p>



<p class="wp-block-paragraph"><strong>O que é máscara curinga (wildcard)?</strong><br>É o inverso da máscara de sub-rede: onde a máscara tem 255, a curinga tem 0, e vice-versa. A curinga de 255.255.255.0 é 0.0.0.255. Ela é usada em listas de acesso de roteadores e firewalls.</p>



<p class="wp-block-paragraph"><strong>O que é um endereço 169.254?</strong><br>É um endereço link-local, que o computador atribui a si mesmo quando não consegue receber um IP do roteador pelo DHCP. Na prática, ele indica que a conexão com a rede falhou.</p>



<p class="wp-block-paragraph"><strong>Como dividir uma rede /24 em 4 sub-redes?</strong><br>Aumente o prefixo em 2 bits, para /26. A rede 192.168.1.0/24 vira quatro redes de 64 endereços: 192.168.1.0/26, 192.168.1.64/26, 192.168.1.128/26 e 192.168.1.192/26, cada uma com 62 hosts.</p>



<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{"@type":"Question","name":"O que é máscara de sub-rede?","acceptedAnswer":{"@type":"Answer","text":"É o número que divide um endereço IP em duas partes: a rede e o dispositivo. Na máscara 255.255.255.0, os três primeiros blocos identificam a rede, e o último fica livre para os dispositivos, 254 deles."}},
{"@type":"Question","name":"O que significa o /24 depois do IP?","acceptedAnswer":{"@type":"Answer","text":"É a notação CIDR: o número de bits que identificam a rede. Um /24 tem 24 bits de rede, o mesmo que a máscara 255.255.255.0, e deixa 256 endereços na rede, dos quais 254 podem ser usados por dispositivos."}},
{"@type":"Question","name":"Qual a máscara de um /24, /16 e /8?","acceptedAnswer":{"@type":"Answer","text":"O /24 é 255.255.255.0, com 254 hosts; o /16 é 255.255.0.0, com 65.534 hosts; e o /8 é 255.0.0.0, com 16.777.214 hosts."}},
{"@type":"Question","name":"Como calcular quantos hosts uma rede tem?","acceptedAnswer":{"@type":"Answer","text":"Subtraia o prefixo de 32, eleve 2 a esse resultado e tire 2, que são o endereço de rede e o broadcast. Num /26: 32 menos 26 é 6, 2 elevado a 6 é 64, e 64 menos 2 são 62 hosts."}},
{"@type":"Question","name":"Por que um /24 tem 254 hosts e não 256?","acceptedAnswer":{"@type":"Answer","text":"Porque dois endereços são reservados: o primeiro identifica a rede e o último é o broadcast, que fala com todos os dispositivos de uma vez. Sobram 254 para computadores, celulares e outros aparelhos."}},
{"@type":"Question","name":"O que é máscara curinga (wildcard)?","acceptedAnswer":{"@type":"Answer","text":"É o inverso da máscara de sub-rede: onde a máscara tem 255, a curinga tem 0, e vice-versa. A curinga de 255.255.255.0 é 0.0.0.255. Ela é usada em listas de acesso de roteadores e firewalls."}},
{"@type":"Question","name":"O que é um endereço 169.254?","acceptedAnswer":{"@type":"Answer","text":"É um endereço link-local, que o computador atribui a si mesmo quando não consegue receber um IP do roteador pelo DHCP. Na prática, ele indica que a conexão com a rede falhou."}},
{"@type":"Question","name":"Como dividir uma rede /24 em 4 sub-redes?","acceptedAnswer":{"@type":"Answer","text":"Aumente o prefixo em 2 bits, para /26. A rede 192.168.1.0/24 vira quatro redes de 64 endereços: 192.168.1.0/26, 192.168.1.64/26, 192.168.1.128/26 e 192.168.1.192/26, cada uma com 62 hosts."}}
]
}
</script>



<div style="max-width:760px; margin:32px auto; background:linear-gradient(135deg,#1a73e8 0%,#0b3d91 100%); border-radius:16px; padding:32px 28px; font-family:Arial, Helvetica, sans-serif; color:#fff; box-shadow:0 10px 30px rgba(26,115,232,.25);">
<div style="display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap;">
<div style="flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; width:52px; height:52px; border-radius:12px; background:rgba(255,255,255,.18);">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="2" width="20" height="8" rx="2"></rect><rect x="2" y="14" width="20" height="8" rx="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg>
</div>
<div style="flex:1 1 320px; min-width:260px;">
<div style="font-weight:800; line-height:1.25; margin-bottom:8px; font-size:19px; color:#ffffff;">Seu próprio servidor, com a rede sob seu controle</div>
<p style="margin:0 0 18px; line-height:1.6; color:#ffffff;">Nos servidores VPS da Homehost, você tem acesso root para configurar a rede, o firewall e os serviços do jeito que precisar — em data centers no Brasil, com suporte em português.</p>
<a href="https://www.homehost.com.br/servidores-vps/" style="display:inline-flex; align-items:center; gap:8px; background:#fff; color:#0b3d91; font-weight:700; text-decoration:none; padding:13px 26px; border-radius:10px; box-shadow:0 4px 12px rgba(0,0,0,.15);" data-wpel-link="external" target="_blank" rel="external noopener">
Conhecer os servidores VPS
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0b3d91" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"></path></svg>
</a>
</div>
</div>
</div>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">A máscara de sub-rede responde a uma pergunta simples: <strong>quais endereços estão na mesma rede?</strong> O /24 do comando ip e o 255.255.255.0 das configurações de rede dizem a mesma coisa — 24 bits de rede, 256 endereços, 254 dispositivos —, e cada bit a mais no prefixo divide a rede pela metade.</p>



<p class="wp-block-paragraph">Com essa regra, todo o resto vira conta: o endereço de rede é o início do bloco, o broadcast é o fim, e os dispositivos ficam no meio. <strong>A calculadora acima faz essas contas para qualquer endereço</strong> — e a tabela mostra, de uma vez, o tamanho de cada máscara de /8 a /32.</p>
<p>O post <a href="https://www.homehost.com.br/blog/internet/mascara-de-sub-rede/" data-wpel-link="internal" target="_self">Máscara de sub-rede e CIDR: tabela completa e calculadora de IP</a> apareceu primeiro em <a href="https://www.homehost.com.br/blog" data-wpel-link="internal" target="_self">Homehost</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18371</post-id>	</item>
	</channel>
</rss>
