---
title: Meta Generator
description: 100% free · no signup       Title + meta in 30 seconds       Google &amp; social previews       Shareable link       Copy · Markdown · download         Free Mox
url: https://moxseo.com/tools/meta-tag-generator
date_modified: 2026-07-31
author: Admin
language: en_US
---

.mox-meta{
  /* ============ MOXSEO BRAND TOKENS — edit here to rebrand ============
     MoxSEO identity: near-black ink, white canvas, single orange accent.
     Swap --mox-primary for your exact brand orange in one place. */
  --mox-bg:        #ffffff;
  --mox-panel:     #ffffff;
  --mox-ink:       #0e0f12;
  --mox-ink-soft:  #525866;
  --mox-line:      #e8e8ea;
  --mox-primary:   #ff5a1f;
  --mox-primary-d: #e8470a;
  --mox-accent:    #ff5a1f;
  --mox-dark:      #0e0f12;
  --mox-dark-2:    #181a1f;
  --mox-good:      #16a077;
  --mox-warn:      #e8a20c;
  --mox-risk:      #e34d5b;
  --mox-r:         18px;
  --mox-r-sm:      12px;
  --mox-font-d:    'Sora', sans-serif;
  --mox-font-b:    'Inter', sans-serif;
  --mox-font-m:    'IBM Plex Mono', monospace;
  --mox-font-g:    'Roboto', Arial, sans-serif;
  --mox-ease:      cubic-bezier(0.34,1.3,0.64,1);
  font-family:var(--mox-font-b);
  color:var(--mox-ink) !important;
  background:var(--mox-bg);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
.mox-meta *,.mox-meta *::before,.mox-meta *::after{box-sizing:border-box;margin:0;padding:0}
.mox-meta img{max-width:100%}
.mox-meta a{text-decoration:none}
.mox-meta button{font-family:inherit}
.mox-wrap{max-width:1180px;margin:0 auto;padding:0 22px}
.mox-sec{padding:88px 0}
.mox-sec--dark{background:var(--mox-dark)}
.mox-sec--dark .mox-h2,.mox-sec--dark p,.mox-sec--dark h3,.mox-sec--dark li{color:#f4f4f6 !important}
.mox-sec--dark .mox-sub{color:#a7acb5 !important}
.mox-eyebrow{display:inline-flex;align-items:center;gap:8px;font-family:var(--mox-font-m);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--mox-primary) !important;margin-bottom:16px}
.mox-eyebrow::before{content:"";width:22px;height:2px;background:var(--mox-accent)}
.mox-sec--dark .mox-eyebrow{color:var(--mox-accent) !important}
.mox-h1{font-family:var(--mox-font-d);font-size:clamp(32px,4.6vw,54px);font-weight:800;line-height:1.12;letter-spacing:-0.02em;color:var(--mox-ink) !important}
.mox-h2{font-family:var(--mox-font-d);font-size:clamp(26px,3.4vw,38px);font-weight:700;line-height:1.18;letter-spacing:-0.015em;color:var(--mox-ink) !important;max-width:760px}
.mox-sub{font-size:17px;color:var(--mox-ink-soft) !important;max-width:680px;margin-top:14px}
.mox-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--mox-font-d);font-weight:700;font-size:15px;padding:15px 28px;border-radius:999px;border:2px solid transparent;cursor:pointer;transition:transform .25s var(--mox-ease),box-shadow .25s,background .2s,border-color .2s;white-space:nowrap}
.mox-btn:hover{transform:translateY(-2px)}
.mox-btn:focus-visible{outline:3px solid var(--mox-primary);outline-offset:2px}
.mox-btn--primary{background:var(--mox-primary);color:#fff !important;box-shadow:0 10px 26px rgba(255,90,31,.32)}
.mox-btn--primary:hover{background:var(--mox-primary-d)}
.mox-btn--ghost{background:transparent;border-color:var(--mox-line);color:var(--mox-ink) !important}
.mox-btn--ghost:hover{border-color:var(--mox-primary)}
.mox-btn--sm{padding:11px 16px;font-size:13px}
.mox-btn--dark-ghost{background:transparent;border-color:rgba(255,255,255,.25);color:#fff !important}
.mox-btn--dark-ghost:hover{border-color:var(--mox-accent)}
/* reveal on scroll */
.mox-rv{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s var(--mox-ease)}
.mox-rv.mox-in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.mox-rv{opacity:1;transform:none;transition:none}.mox-meta *{animation:none !important;transition:none !important}}
/* If JS fails to load, still show content (scroll-reveal requires .mox-js on root) */
.mox-meta:not(.mox-js) .mox-rv{opacity:1;transform:none}

/* ---------- TRUST BAR ---------- */
.mox-trust{background:var(--mox-dark);padding:14px 0}
.mox-trust__row{display:flex;flex-wrap:wrap;justify-content:center;gap:10px 28px;font-family:var(--mox-font-m);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:#a7acb5 !important}
.mox-trust__row span{display:inline-flex;align-items:center;gap:8px}
.mox-trust__row span::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mox-accent)}

/* ---------- HERO ---------- */
.mox-hero{padding:84px 0 72px;background:
  radial-gradient(900px 500px at 85% -10%,rgba(255,90,31,.12),transparent 60%),
  radial-gradient(700px 420px at -10% 30%,rgba(255,90,31,.08),transparent 55%),
  var(--mox-bg)}
.mox-hero__grid{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center}
.mox-hero p.mox-lead{font-size:18px;color:var(--mox-ink-soft) !important;margin:20px 0 28px;max-width:560px}
.mox-hero__cta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:26px}
.mox-hero__ticks{display:flex;flex-wrap:wrap;gap:10px 22px;font-size:14px;color:var(--mox-ink-soft) !important}
.mox-hero__ticks span{display:inline-flex;align-items:center;gap:7px}
.mox-hero__ticks span::before{content:"✓";color:var(--mox-good);font-weight:700}

/* live SERP preview card */
.mox-serpcard{background:var(--mox-bg);border:1px solid var(--mox-line);border-radius:14px;padding:20px 22px;box-shadow:0 30px 70px rgba(14,15,18,.18);position:relative;transform:rotate(-1deg);max-width:560px}
.mox-serpcard__tag{font-family:var(--mox-font-m);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--mox-primary) !important;margin-bottom:14px}
.mox-serpcard__crumb{font-size:12.5px;color:var(--mox-ink-soft) !important;margin-bottom:6px;font-family:var(--mox-font-b)}
.mox-serpcard__title{font-family:var(--mox-font-g);font-size:20px;line-height:1.3;color:#1a0dab !important;font-weight:400;margin-bottom:6px;word-break:break-word}
.mox-serpcard__desc{font-family:var(--mox-font-g);font-size:14px;line-height:1.58;color:#4d5156 !important;word-break:break-word}
.mox-serpcard__meta{font-family:var(--mox-font-g);font-size:12px;color:#5f6368 !important;margin-top:6px}
.mox-serpcard__pill{position:absolute;top:-12px;right:18px;background:var(--mox-primary);color:#fff !important;font-family:var(--mox-font-m);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;padding:5px 11px;border-radius:99px;box-shadow:0 6px 14px rgba(255,90,31,.35)}

/* ---------- TOOL ---------- */
.mox-tool{background:linear-gradient(180deg,var(--mox-bg) 0%,#f6f6f7 100%)}
.mox-tool__shell{display:grid;grid-template-columns:1.05fr .95fr;gap:26px;margin-top:44px;align-items:start}
.mox-panel{background:var(--mox-panel);border:1px solid var(--mox-line);border-radius:22px;padding:30px;box-shadow:0 20px 50px rgba(14,15,18,.06)}
.mox-panel h3{font-family:var(--mox-font-d);font-size:19px;font-weight:700;margin-bottom:6px;color:var(--mox-ink) !important}
.mox-panel .mox-panelsub{font-size:14px;color:var(--mox-ink-soft) !important;margin-bottom:22px}
.mox-field{margin-bottom:16px}
.mox-field label{display:block;font-weight:600;font-size:13.5px;margin-bottom:7px;color:var(--mox-ink) !important}
.mox-field small{display:block;font-size:12.5px;color:var(--mox-ink-soft) !important;margin-top:5px}
.mox-field input[type=text],.mox-field select,.mox-field textarea{width:100%;font-family:var(--mox-font-b);font-size:15px;color:var(--mox-ink) !important;background:#fbfbfc;border:1.5px solid var(--mox-line);border-radius:var(--mox-r-sm);padding:13px 15px;outline:none;transition:border .2s,box-shadow .2s;appearance:auto}
.mox-field textarea{resize:vertical;min-height:64px;line-height:1.5}
.mox-field input:focus,.mox-field select:focus,.mox-field textarea:focus{border-color:var(--mox-primary);box-shadow:0 0 0 4px rgba(255,90,31,.14)}
.mox-2col{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.mox-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.mox-tile{display:flex;align-items:center;justify-content:center;text-align:center;font-size:13px;font-weight:600;color:var(--mox-ink) !important;background:#fbfbfc;border:1.5px solid var(--mox-line);border-radius:10px;padding:11px 10px;cursor:pointer;transition:.2s;user-select:none}
.mox-tile:hover{border-color:var(--mox-primary)}
.mox-tile.mox-picked{background:rgba(255,90,31,.07);border-color:var(--mox-primary);color:var(--mox-primary) !important}
.mox-tile small{display:block;font-size:10.5px;font-weight:500;color:var(--mox-ink-soft) !important;margin-top:2px;font-family:var(--mox-font-m);letter-spacing:.04em;text-transform:uppercase}
.mox-tile.mox-picked small{color:var(--mox-primary) !important}
.mox-nav{display:flex;gap:12px;margin-top:20px;flex-wrap:wrap;align-items:center}

/* E-E-A-T advanced section */
.mox-eeat-section{margin:6px 0 18px;border:1px solid var(--mox-line);border-radius:12px;background:#fbfbfc;padding:0;overflow:hidden}
.mox-eeat-section>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:13px 16px;font-family:var(--mox-font-d);font-weight:600;font-size:14px;color:var(--mox-ink) !important;background:#fff;transition:background .2s;user-select:none}
.mox-eeat-section>summary::-webkit-details-marker{display:none}
.mox-eeat-section>summary:hover{background:#f6f6f7}
.mox-eeat-section>summary small{font-weight:400;color:var(--mox-ink-soft) !important;font-family:var(--mox-font-b);font-size:12.5px}
.mox-eeat-section[open]>summary{border-bottom:1px solid var(--mox-line);background:#f6f6f7}
.mox-eeat-section>summary>.mox-eeat-arrow{margin-left:auto;transition:transform .2s var(--mox-ease);color:var(--mox-primary);font-size:12px}
.mox-eeat-section[open]>summary>.mox-eeat-arrow{transform:rotate(180deg)}
.mox-eeat-badge{font-family:var(--mox-font-m);font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;background:rgba(255,90,31,.12);color:var(--mox-primary) !important;padding:4px 8px;border-radius:5px}
.mox-eeat-section>div.mox-field,.mox-eeat-section>.mox-2col{padding:0 16px}
.mox-eeat-section>.mox-field:first-of-type{padding-top:6px}
.mox-eeat-section>.mox-2col:last-of-type{padding-bottom:6px}
.mox-eeat-section>.mox-field:last-child{padding-bottom:14px}
.mox-nav .mox-btn{padding:13px 24px;font-size:14px}
.mox-divider{height:1px;background:var(--mox-line);margin:24px 0 18px}

/* ---------- RESULT ---------- */
.mox-result{background:var(--mox-dark);border-radius:22px;padding:30px;color:#f4f4f6 !important;position:sticky;top:24px;transition:box-shadow .4s}
.mox-result h3,.mox-result h4{color:#fff !important;font-family:var(--mox-font-d)}
.mox-result__empty{text-align:center;padding:40px 10px}
.mox-result__empty .mox-surf__ic{margin:0 auto 18px;width:56px;height:56px;font-size:22px}
.mox-result__empty p{color:#a7acb5 !important;font-size:14.5px;max-width:320px;margin:10px auto 0}
.mox-surf__ic{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-family:var(--mox-font-m);font-weight:600;font-size:18px;background:rgba(255,90,31,.16);color:var(--mox-accent) !important;margin-bottom:14px}

/* score gauge */
.mox-gaugewrap{display:flex;align-items:center;gap:22px;margin:6px 0 22px;flex-wrap:wrap}
.mox-gauge{display:flex;justify-content:center}
.mox-gauge svg{width:170px;height:108px;overflow:visible}
.mox-gauge .mox-gbg{stroke:rgba(255,255,255,.12)}
.mox-gauge .mox-gfg{stroke:var(--mox-accent);stroke-linecap:round;transition:stroke-dashoffset 1.1s var(--mox-ease),stroke .4s}
.mox-gauge text{font-family:var(--mox-font-m);fill:#fff;font-weight:600}
.mox-gauge__meta{flex:1;min-width:160px}
.mox-gauge__label{font-family:var(--mox-font-m);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#a7acb5 !important;margin-bottom:6px}
.mox-gauge__verdict{font-family:var(--mox-font-d);font-weight:700;font-size:20px;color:var(--mox-accent) !important;margin-bottom:6px}
.mox-gauge__hint{font-size:13px;color:#a7acb5 !important;line-height:1.55}

/* bars */
.mox-bars{display:grid;gap:11px;margin-bottom:20px}
.mox-bar__top{display:flex;justify-content:space-between;font-size:13px;color:#a7acb5 !important;margin-bottom:5px}
.mox-bar__top b{color:#fff !important;font-family:var(--mox-font-m)}
.mox-bar__track{height:7px;border-radius:99px;background:rgba(255,255,255,.1);overflow:hidden}
.mox-bar__fill{height:100%;border-radius:99px;background:var(--mox-accent);width:0;transition:width 1s var(--mox-ease) .2s}
.mox-bar__fill--warn{background:var(--mox-warn)}
.mox-bar__fill--risk{background:var(--mox-risk)}
.mox-bar--eeat .mox-bar__top span{color:#ffb347 !important}
.mox-bar--eeat .mox-bar__fill{background:linear-gradient(90deg,var(--mox-accent),#ffb347)}

/* hero recommendation card */
.mox-hero-card{background:var(--mox-dark-2);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:18px 20px;margin-bottom:18px}
.mox-hero-card__tag{font-family:var(--mox-font-m);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--mox-accent) !important;margin-bottom:8px}
.mox-hero-card__title{font-family:var(--mox-font-d);font-size:18px;font-weight:700;color:#fff !important;line-height:1.35;margin-bottom:6px;word-break:break-word}
.mox-hero-card__desc{font-size:13.5px;color:#d4d6db !important;line-height:1.55;word-break:break-word}

/* option list */
.mox-options{display:grid;gap:11px;margin-bottom:20px}
.mox-opt{background:var(--mox-dark-2);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:14px 16px;transition:border-color .2s}
.mox-opt:hover{border-color:rgba(255,90,31,.5)}
.mox-opt__top{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}
.mox-opt__lbl{font-family:var(--mox-font-m);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#85898f !important}
.mox-opt__lbl b{color:var(--mox-accent) !important;margin-right:6px}
.mox-opt__copy{font-family:var(--mox-font-m);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--mox-accent) !important;background:none;border:1px solid rgba(255,255,255,.18);border-radius:6px;padding:3px 9px;cursor:pointer}
.mox-opt__copy:hover{border-color:var(--mox-accent)}
.mox-opt__copy:focus-visible{outline:2px solid var(--mox-accent);outline-offset:2px}
.mox-opt__t{font-size:14.5px;color:#fff !important;font-weight:600;line-height:1.4;margin-bottom:6px;word-break:break-word}
.mox-opt__d{font-size:13px;color:#d4d6db !important;line-height:1.55;word-break:break-word}
.mox-meter{display:flex;align-items:center;gap:8px;margin-top:8px;font-family:var(--mox-font-m);font-size:10.5px;color:#85898f !important}
.mox-meter__bar{flex:1;height:4px;border-radius:99px;background:rgba(255,255,255,.1);overflow:hidden;position:relative}
.mox-meter__fill{position:absolute;top:0;left:0;height:100%;background:var(--mox-accent);transition:width .4s}
.mox-meter__fill--warn{background:var(--mox-warn)}
.mox-meter__fill--risk{background:var(--mox-risk)}
.mox-meter__num{font-weight:600;letter-spacing:.04em}
.mox-meter__num--good{color:var(--mox-good) !important}
.mox-meter__num--warn{color:var(--mox-warn) !important}
.mox-meter__num--risk{color:var(--mox-risk) !important}

/* quick wins */
.mox-block{background:var(--mox-dark-2);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:15px 16px;margin-bottom:12px}
.mox-block h4{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--mox-accent) !important;margin-bottom:8px;font-family:var(--mox-font-m);font-weight:600}
.mox-block p,.mox-block li{font-size:14px;color:#d4d6db !important}
.mox-block ol{padding-left:18px;display:grid;gap:6px}
.mox-quickwin{display:flex;gap:11px;align-items:flex-start;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.07)}
.mox-quickwin:last-child{border-bottom:0}
.mox-quickwin__n{flex:none;width:24px;height:24px;border-radius:7px;background:rgba(255,90,31,.16);color:var(--mox-accent) !important;font-family:var(--mox-font-m);font-weight:600;font-size:12px;display:grid;place-items:center;margin-top:1px}
.mox-quickwin__t{font-weight:600;color:#fff !important;font-size:14px;line-height:1.4}
.mox-quickwin__d{font-size:12.5px;color:#a7acb5 !important;margin-top:3px}
.mox-imp{display:inline-block;margin-left:8px;font-family:var(--mox-font-m);font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:2px 7px;border-radius:5px;vertical-align:middle}
.mox-imp--h{background:rgba(227,77,91,.18);color:#ff8a95 !important}
.mox-imp--m{background:rgba(232,162,12,.18);color:#ffc759 !important}
.mox-imp--l{background:rgba(22,160,119,.18);color:#5fd6b1 !important}

/* preview toggle */
.mox-prevtabs{display:flex;gap:6px;margin-bottom:14px;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:0}
.mox-prevtab{flex:none;font-family:var(--mox-font-m);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#85898f !important;background:none;border:0;padding:9px 12px;cursor:pointer;border-bottom:2px solid transparent;transition:.2s}
.mox-prevtab:hover{color:#fff !important}
.mox-prevtab.mox-on{color:var(--mox-accent) !important;border-color:var(--mox-accent)}
.mox-prevtab:focus-visible{outline:2px solid var(--mox-accent);outline-offset:2px}
.mox-prevpanes{position:relative}
.mox-prevpane{display:none}
.mox-prevpane.mox-show{display:block;animation:moxfade .3s ease}
@keyframes moxfade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* twitter / og cards */
.mox-ogcard{border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden;background:#0a0b0d}
.mox-ogcard__img{height:130px;background:linear-gradient(135deg,#1f2128 0%,#0e0f12 100%);position:relative;display:grid;place-items:center}
.mox-ogcard__img:before{content:"";position:absolute;inset:0;background:radial-gradient(400px 180px at 75% 30%,rgba(255,90,31,.32),transparent 60%)}
.mox-ogcard__img span{position:relative;font-family:var(--mox-font-d);font-weight:800;font-size:22px;color:#fff !important;padding:0 16px;text-align:center;letter-spacing:-.01em}
.mox-ogcard__body{padding:14px 16px;background:#161719}
.mox-ogcard__domain{font-family:var(--mox-font-m);font-size:11px;color:#85898f !important;text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}
.mox-ogcard__title{font-family:var(--mox-font-d);font-weight:600;font-size:15px;color:#e6e7ea !important;line-height:1.35;margin-bottom:5px;word-break:break-word}
.mox-ogcard__desc{font-size:12.5px;color:#a7acb5 !important;line-height:1.5;word-break:break-word}

/* ---------- INTRO / FEATURES / ETC ---------- */
.mox-grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.mox-card{background:var(--mox-panel);border:1px solid var(--mox-line);border-radius:var(--mox-r);padding:26px;transition:transform .3s var(--mox-ease),box-shadow .3s}
.mox-card:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(14,15,18,.08)}
.mox-card h3{font-family:var(--mox-font-d);font-size:17px;font-weight:700;margin:14px 0 8px;color:var(--mox-ink) !important}
.mox-card p{font-size:14.5px;color:var(--mox-ink-soft) !important}
.mox-chip{display:inline-flex;font-family:var(--mox-font-m);font-size:11px;font-weight:600;letter-spacing:.08em;padding:5px 10px;border-radius:6px;background:rgba(255,90,31,.1);color:var(--mox-primary) !important}

/* how it works steps */
.mox-flow{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:40px}
.mox-flow__step{position:relative;background:var(--mox-panel);border:1px solid var(--mox-line);border-radius:var(--mox-r);padding:24px 22px}
.mox-flow__n{font-family:var(--mox-font-m);font-size:13px;font-weight:600;color:var(--mox-primary) !important}
.mox-flow__step h3{font-family:var(--mox-font-d);font-size:18px;font-weight:700;margin:8px 0 6px;color:var(--mox-ink) !important}
.mox-flow__step p{font-size:14.5px;color:var(--mox-ink-soft) !important}

/* example cards */
.mox-ex{background:var(--mox-panel);border:1px solid var(--mox-line);border-radius:var(--mox-r);padding:22px;border-top:4px solid var(--mox-primary);transition:transform .3s var(--mox-ease),box-shadow .3s}
.mox-ex:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(14,15,18,.08)}
.mox-ex__kw{font-family:var(--mox-font-d);font-weight:700;font-size:15px;color:var(--mox-ink) !important;margin-bottom:12px}
.mox-ex__row{padding:8px 0;border-bottom:1px solid var(--mox-line);font-size:13.5px}
.mox-ex__row:last-child{border-bottom:0}
.mox-ex__lbl{font-family:var(--mox-font-m);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--mox-primary) !important;display:block;margin-bottom:3px}
.mox-ex__val{color:var(--mox-ink) !important;font-weight:500;word-break:break-word}

/* ---------- FAQ ---------- */
.mox-faq{max-width:820px;margin:44px auto 0}
.mox-q{background:var(--mox-panel);border:1px solid var(--mox-line);border-radius:var(--mox-r-sm);margin-bottom:12px;overflow:hidden}
.mox-q>button{width:100%;display:flex;justify-content:space-between;align-items:center;gap:16px;text-align:left;font-family:var(--mox-font-d);font-weight:600;font-size:15.5px;color:var(--mox-ink) !important;background:none;border:0;padding:18px 20px;cursor:pointer}
.mox-q>button:focus-visible{outline:3px solid var(--mox-primary);outline-offset:-3px}
.mox-q__x{font-family:var(--mox-font-m);color:var(--mox-primary) !important;font-size:20px;transition:transform .3s var(--mox-ease);flex:none}
.mox-q.mox-open .mox-q__x{transform:rotate(45deg)}
.mox-q__a{max-height:0;overflow:hidden;transition:max-height .35s ease}
.mox-q__a p{padding:0 20px 18px;font-size:14.5px;color:var(--mox-ink-soft) !important}

/* ---------- CTA ---------- */
.mox-cta{text-align:center;background:
  radial-gradient(700px 380px at 50% -20%,rgba(255,90,31,.16),transparent 60%),var(--mox-dark)}
.mox-cta .mox-h2{margin:0 auto;color:#fff !important}
.mox-cta .mox-sub{color:#a7acb5 !important;margin:14px auto 0}
.mox-cta .mox-hero__cta{justify-content:center;margin-top:30px}
.mox-cta small{display:block;margin-top:22px;font-size:13px;color:#85898f !important}

/* ---------- RESPONSIVE ---------- */
@media(max-width:980px){
  .mox-hero__grid,.mox-tool__shell{grid-template-columns:1fr}
  .mox-grid3{grid-template-columns:1fr 1fr}
  .mox-flow{grid-template-columns:1fr}
  .mox-serpcard{transform:none}
  .mox-result{position:static}
}
@media(max-width:620px){
  .mox-sec{padding:64px 0}
  .mox-grid3,.mox-2col,.mox-tiles{grid-template-columns:1fr 1fr}
  .mox-tiles{grid-template-columns:1fr 1fr}
  .mox-hero{padding:64px 0 52px}
}

  
    
      100% free · no signup
      Title + meta in 30 seconds
      Google & social previews
      Shareable link
      Copy · Markdown · download
    
  

  
    
      Free MoxSEO Tool
      
# Write a meta title & description that actually gets clicked

      
Type your page details, pick a tone, and get three ranked title + description options with live Google, Twitter, and OG previews — scored against Google pixel budgets, H1 rewrite risk, AI Overview citability, and E-E-A-T trust signals.

      
        [Generate Meta Tags](#mox-tool)
        [How Scoring Works](#mox-how)
      
      
        No signup, no API keys
        Runs in your browser
        Title & meta in 30s
        Shareable preview link
      
    
    
      
        Sample output
        Google preview
        example.com › services › web-design
        Web Design for Small Business — Sites That Bring Leads | Acme Studio
        Conversion-focused websites for SMBs, freelancers & local shops. Fixed pricing, 14-day launch, real case studies. Free 20-min consult — book today.
        ★★★★★ · 4.9 from 60+ small business owners
      
    
  

  
    
      Meta Generator
      
## Tell us about the page. Get three ranked title + description combos.

      
No wizard, no detour. Fill the form on the left, watch the Google preview update live on the right, then copy the result or share a link with your client.

    
    

      
      
        
### Page details

        
Everything is optional except a topic. Defaults are tuned for freelancers & SMBs.

        
          Page type
          
            BlogPOST
            ServiceOFFER
            ProductSELL
            LandingCONVERT
            LocalNEAR ME
            AboutBRAND
            FAQANSWER
            CourseLEARN
          
        

        
          Page topic / focus keyword *
          
          The single phrase a searcher would type. Used inside every generated title and description.
        

        
          
            Brand name
            
          
          
            Primary audience
            
          
        

        
          
            City / region (local pages)
            
          
          
            Domain (for preview breadcrumb)
            
          
        

        
          Main benefit or differentiator
          
        

        
          
            E-E-A-T
            Advanced trust signals (author, H1, credentials — recommended for ranking & AI citations)
            ▾
          

          
            Page H1 (visible heading)
            
            Google rewrites title tags when they don't match the H1. We'll flag a mismatch as rewrite risk.
          

          
            
              Author / founder name
              
            
            
              Credentials / proof
              
            
          

          
            
              Organization / company
              
            
            
              Year / freshness signal
              
            
          

          
            Author / brand links (for sameAs schema)
            
            Space-separated. Used to build Person / Organization schema with verifiable identity — a core E-E-A-T signal.
          
        

        
          Tone of voice
          
            ProfessionalTRUSTED
            FriendlyWARM
            BoldDIRECT
            PlayfulQUIRKY
          
        

        

        
          Generate meta tags
          Reset
          🔗 Copy share link
          Link copied ✓
        
      

      
      
        
          M
          
### Your meta tags appear here

          
Fill the form on the left and click **Generate**. You'll get three ranked titles + descriptions, a click-magnet score, Google / Twitter / OG previews, quick wins, and a copy-ready plan.

        

        
          
            Google
            Twitter / X
            Open Graph
            Score
          

          
            
            
              
                Recommended
                —
                —
              
              
            

            
            
              
                Your Page Title Goes Here
                
                  example.com
                  —
                  —
                
              
              
Twitter card preview · updated live

            

            
            
              
                Your Page Title Goes Here
                
                  example.com
                  —
                  —
                
              
              
                
#### Open Graph & Twitter card tags

                

                
                
#### E-E-A-T schema (JSON-LD)

                

                
Add author/org trust signals Google uses for E-E-A-T. Paste inside a `<script type="application/ld+json">` block in your page head or body.

              
            

            
            
              
                
                  
                    
                    
                    0
                  
                
                
                  Click-magnet score
                  —
                  Score combines pixel length, keyword position, H1 rewrite risk, format citability, specificity, tone, proof, quality, and E-E-A-T readiness.
                
              

              
                Title length (pixels)**—**
                Description length (mobile / desktop px)**—**
                Keyword front-loaded**—**
                Title rewrite risk (H1 match)**—**
                Format explicit (AI Overview citability)**—**
                Specificity (numbers · year · named entities)**—**
                Tone · audience · brand match**—**
                Power words & proof**—**
                Bait / boilerplate free**—**
                E-E-A-T readiness (author · credentials · org · sameAs)**—**
              
            
          

          
            
#### Quick wins before you publish

            
          

          
            
#### Publish-ready plan

            

          

          
            Copy recommended
            Copy all options
            Copy Markdown
            Download .md
            Copied ✓
          
        
      
    
  

  
    
      How Scoring Works
      
## Three steps. Honest scoring. Built so the recommended option is the one you should actually ship.

    
    
      STEP 01
### Tell us the page

Pick a page type, drop in the focus keyword, add your brand and audience. Everything else is optional and tuned for freelancers & small businesses.

      STEP 02
### Generate three ranked combos

Each pair is scored on pixel length, keyword position, H1 rewrite risk, format citability, specificity, bait/boilerplate, proof, tone, and E-E-A-T readiness — aligned with current Google guidance.

      STEP 03
### Preview, copy, share

See the result in Google, Twitter, and Open Graph previews. Copy a single line, all options, or a Markdown plan. Share the link so a client sees the same preview.

    
  

  
    
      Real Examples
      
## What good output looks like

      
Three real-world freelancer & SMB pages, with the kind of meta tags this tool generates for each.

    
    
      
        Freelance bookkeeper · Brooklyn
        TitleBrooklyn Bookkeeping for Freelancers & Small Business | Ledger Co.
        DescriptionMonthly books, tax-ready financials, and payroll for NY freelancers. Flat monthly plans. 5★ on Google. Free 15-min consult — book online.
        Why it worksKeyword front-loaded · local proof · clear offer · soft CTA
      
      
        Handmade jewelry shop
        TitleHandmade Jewelry for Everyday & Gifts — Free US Shipping | Maren Studio
        DescriptionSmall-batch earrings, necklaces & rings made by hand in Portland. Limited drops, gift-ready packaging, 30-day returns. New arrivals every Friday.
        Why it worksBrand voice · product breadth · shipping hook · drop cadence
      
      
        Plumber landing page · Austin
        Title24/7 Plumber in Austin — 60-Min Response | Bluewave Plumbing
        DescriptionLicensed Austin plumbers for leaks, water heaters & drain clogs. Upfront flat pricing, 60-minute response, 1-year warranty. Call now or book online.
        Why it worksUrgency · location · trust signals · dual CTA · specific promise
      
    
  

  
    
      What You Get
      
## Everything a freelancer or SMB needs to ship meta tags today

    
    
      OUTPUT 01
### Three ranked combos

Three title + description pairs ranked by a click-magnet score. The top one is the recommended pick.

      OUTPUT 02
### Google preview

Live SERP card with the exact title, description, breadcrumb, and star rating a searcher would see.

      OUTPUT 03
### Twitter & OG previews

See how your page looks when shared on X / Twitter, Facebook, LinkedIn, and Slack. OG tags included.

      OUTPUT 04
### Pixel + rewrite-risk scoring

Title ≤600px, description mobile/desktop px budgets, plus H1 alignment to reduce Google title rewrites.

      OUTPUT 05
### E-E-A-T + quick wins

Author/org schema JSON-LD plus prioritized fixes for rewrite risk, bait, format, proof, and CTA quality.

      OUTPUT 06
### Shareable link

All inputs encoded in the URL. Send a client one link and they see the exact same preview you do.

    
  

  
    
      FAQ
      
## Meta title & description questions, answered honestly

    
    
      How long should a meta title and description be? +
Google measures in **pixels**, not characters. Aim for title ≤**600px** (~50–60 chars) and description ≤**680px mobile** / ≤**920px desktop** (~120–155 chars). The tool scores pixel budgets, not char counts alone.

      Does the focus keyword need to be at the start of the title? +
Yes — placing the focus keyword in the first 30–40 characters of the title is one of the highest-leverage changes for click-through rate. Both Google and AI search engines weight the front of the title more. The score reflects keyword position.

      Are these meta tags SEO-optimized? +
Yes — aligned with Google Search Essentials: keyword front-loaded, benefit-led descriptions, pixel-safe length, H1/title alignment, format-explicit titles for AI Overviews, bait/boilerplate avoidance, and optional E-E-A-T schema for YMYL/trust pages.

      Can I use these for AI Overviews and ChatGPT? +
Yes. AI search engines read meta descriptions heavily when summarizing pages, and they often quote the title tag verbatim. A clear, benefit-led title and description is one of the strongest AI-search signals you control.

      What is title rewrite risk and why does H1 matter? +
Google sometimes replaces your title tag with on-page text — often your H1. When intent diverges, CTR drops. Enter your H1 and the tool scores how closely the generated title matches it, flagging rewrite risk before you publish.

      How does E-E-A-T fit into meta tags? +
Meta tags alone don't prove expertise, but author credentials, organization name, and `sameAs` profile links support Experience, Expertise, Authoritativeness, and Trustworthiness — especially on YMYL pages. The tool generates Person/Organization JSON-LD you can paste on the page.

            Does the tool save my inputs? +
Inputs are encoded in the shareable URL only. Nothing is sent to a server — the tool runs entirely in your browser and your data stays on your machine.

      Can I edit the suggestions? +
Treat the suggestions as a strong first draft. Most freelancers & SMBs use them as-is, but the recommended block, all three options, and the Markdown plan are designed to be edited in your CMS without losing the structure.

      Why three options and not one? +
Because meta tags have multiple valid winning styles: benefit-led, proof-led, and question-led. You see all three so you can pick the one that matches your brand voice, instead of getting one opinion and shipping it.

    
  

  
    Start Now
    
## Write the meta tags your page actually deserves

    
No signup. No API keys. Three ranked title + description pairs in under thirty seconds — with previews you can share with a client.

    
      [Generate Meta Tags](#mox-tool)
    
    100% client-side · your inputs never leave the browser · share via URL only
  

(function(){
  var root=document.getElementById('mox-meta-root');
  if(!root)return;
  root.classList.add('mox-js');

  /* ========== Tile group helper ========== */
  function tileGroup(id,onChange){
    root.querySelectorAll('#'+id+' .mox-tile').forEach(function(t){
      t.addEventListener('click',function(){
        root.querySelectorAll('#'+id+' .mox-tile').forEach(function(o){o.classList.remove('mox-picked');});
        t.classList.add('mox-picked');
        if(onChange)onChange(t.dataset.v);
      });
    });
  }
  tileGroup('mox-ptype');
  tileGroup('mox-tone');

  /* ========== Reveal on scroll ========== */
  try{
    var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('mox-in');io.unobserve(e.target);}});},{threshold:.12});
    root.querySelectorAll('.mox-rv').forEach(function(el){io.observe(el);});
  }catch(e){root.querySelectorAll('.mox-rv').forEach(function(el){el.classList.add('mox-in');});}

  /* ========== FAQ accordion ========== */
  root.querySelectorAll('.mox-q>button').forEach(function(btn){
    btn.addEventListener('click',function(){
      var q=btn.parentElement,a=q.querySelector('.mox-q__a'),open=q.classList.contains('mox-open');
      root.querySelectorAll('.mox-q.mox-open').forEach(function(o){o.classList.remove('mox-open');o.querySelector('.mox-q__a').style.maxHeight='0';});
      if(!open){q.classList.add('mox-open');a.style.maxHeight=a.scrollHeight+'px';}
    });
  });

  /* ========== Inputs ========== */
  function gv(id){var el=document.getElementById(id);return el?el.value.trim():'';}
  function readInputs(){
    return {
      ptype: (root.querySelector('#mox-ptype .mox-picked')||{}).dataset||{v:'blog'},
      topic: gv('mox-topic'),
      brand: gv('mox-brand'),
      audience: gv('mox-audience'),
      city: gv('mox-city'),
      domain: gv('mox-domain')||'example.com',
      benefit: gv('mox-benefit'),
      tone: (root.querySelector('#mox-tone .mox-picked')||{}).dataset||{v:'pro'},
      h1: gv('mox-h1'),
      author: gv('mox-author'),
      credentials: gv('mox-credentials'),
      org: gv('mox-org'),
      sameAs: gv('mox-sameas'),
      year: gv('mox-year')
    };
  }
  function writeInputs(o){
    function pick(group,val){
      root.querySelectorAll('#'+group+' .mox-tile').forEach(function(t){t.classList.toggle('mox-picked',t.dataset.v===val);});
    }
    pick('mox-ptype',o.ptype||'blog');
    pick('mox-tone',o.tone||'pro');
    var fields={topic:'mox-topic',brand:'mox-brand',audience:'mox-audience',city:'mox-city',domain:'mox-domain',benefit:'mox-benefit',h1:'mox-h1',author:'mox-author',credentials:'mox-credentials',org:'mox-org',sameAs:'mox-sameas',year:'mox-year'};
    Object.keys(fields).forEach(function(k){
      var node=document.getElementById(fields[k]);if(node&&o[k]!=null)node.value=o[k];
    });
  }
  /* ========== Helpers ========== */
  function cap(s){return s?s.charAt(0).toUpperCase()+s.slice(1):s;}
  function clean(s){return (s||'').replace(/\s+/g,' ').trim();}
  function trunc(s,n){s=clean(s);return s.length>n?s.slice(0,n-1)+'…':s;}

  var POWER_WORDS=['free','proven','fast','easy','quick','simple','best','top','new','guaranteed','trusted','expert','exclusive','limited','instant','save','boost','double','unlock','effortless','handmade','flat-rate','fixed-price','same-day','24/7','free','step-by-step','no-risk','risk-free'];
  var PROOF_PHRASES=['free consult','free quote','free trial','free sample','free estimate','no signup','no contract','flat pricing','fixed pricing','same-day','next-day','24/7','5-star','top-rated','licensed','insured','certified','years of experience','case studies','reviews','testimonials','warranty','money-back'];
  /* 2026 benefit-anchored CTAs (replacing generic "Book today"-style) — Google guidance: name the mechanism + the gap. */
  var CTA_DESC=[
    'See real case studies from {aud}.',
    'Get a fixed-price quote in 24 hours.',
    'See {kw}-specific pricing upfront — no surprise bills.',
    'Read 5\u2011star reviews from {aud} before you book.',
    'Book a free 20-min {kw} consult — no pitch deck.',
    'Start with a free {kw} audit — see the gaps in 48h.',
    'Compare plans side-by-side, then book in 60 sec.',
    'See the exact {kw} process before you commit.',
    'Get a free {kw} sample delivered in 24h.',
    'Talk to a {credentials}-level expert today.'
  ];
  /* ========== Format-explicit token list (AI Overview citability + Google "explicit format" preference) ========== */
  var FORMAT_TOKENS=['guide','checklist','template','how to','tutorial','cheatsheet','cheat sheet','examples','examples','comparison','alternatives','review','pricing','cost','examples','walkthrough','playbook','roadmap','framework','blueprint','sample','examples','case study','examples','examples'];
  /* ========== Clickbait / boilerplate detector (2026 accuracy-first ranking) ========== */
  var BAIT_PATTERNS=['you won\'t believe','mind-blowing','insane','jaw-dropping','this one trick','doctors hate','one weird trick','click here to find out','secret','shocking','unbelievable','literally','game-changer','game changer','absolute best','#1','number 1'];
  var BOILERPLATE_PATTERNS=['welcome to','home of the','your one-stop','all your needs','for all your','we offer a wide range','committed to providing','dedicated to excellence','industry-leading solutions'];
  var TONE_TITLES={
    pro:['{kw} — Trusted by {aud} | {brand}','{kw}: {benefit} | {brand}','{brand} — {kw} Done Right'],
    friendly:['{kw}, Made Simple | {brand}','Hey {aud}, Meet Your New {kw} | {brand}','{kw} That Actually Works — {brand}'],
    bold:['Stop Searching. Start {kw}. | {brand}','The {kw} {aud} Actually Want | {brand}','{kw} That Beats the Rest | {brand}'],
    playful:['{kw} (Yes, Really) | {brand}','{brand} Does {kw} — Without the Boring Bits','Plot Twist: {kw}, Simplified | {brand}']
  };
  var TONE_DESC={
    pro:['{brand} delivers {kw} for {aud}. {benefit} {cta}','Looking for {kw}? {brand} helps {aud} ship results fast. {benefit} {cta}','{kw}, done with the rigor {aud} expect. {brand} brings {benefit} {cta}'],
    friendly:['Hey {aud} — {brand} makes {kw} genuinely easy. {benefit} {cta}','We built {kw} so {aud} don\'t have to stress. {benefit} {cta}','{brand} helps {aud} with {kw} — minus the jargon. {benefit} {cta}'],
    bold:['{kw} without the fluff. {brand} ships {benefit} for {aud}. {cta}','Tired of bad {kw}? {brand} built a better way for {aud}. {benefit} {cta}','{aud} deserve {kw} that works. {brand} delivers. {benefit} {cta}'],
    playful:['{kw}, minus the headache — that\'s the {brand} way. {benefit} {cta}','Plot twist: {kw} can actually be fun. {brand} proves it for {aud}. {cta}','We make {kw} so easy it feels like cheating. {benefit} {cta}']
  };
  /* ========== Template fill ========== */
  function fillTpl(tpl,vars){
    var s=tpl;
    Object.keys(vars).forEach(function(k){s=s.split('{'+k+'}').join(vars[k]||'');});
    return clean(s).replace(/\s+\|/g,' |').replace(/\|\s+/g,'| ').replace(/&/g,'&');
  }
  function pickPhrase(arr){
    if(!arr||!arr.length)return '';
    return arr[Math.floor(Math.random()*arr.length)];
  }
  function addSeoHook(title,desc,vars,ptype,tone){
    /* prepend keyword-front for non-question patterns if missing */
    var kw=vars.kw;
    var startKw=(title||'').toLowerCase().indexOf((kw||'').toLowerCase())===0;
    if(!startKw&&kw){
      var front='cap(kw)';
      /* only prepend for non-landing/local where keyword lead matters */
      if(ptype!=='about'){
        title=cap(kw)+' — '+(title||vars.benefit||'Expert guide');
      }
    }
    /* append benefit-led hook if missing */
    if(desc&&vars.benefit&&desc.toLowerCase().indexOf(vars.benefit.toLowerCase())=0)return city;
    return 'in '+city;
  }

  /* ========== Main generator ========== */
  function generate(inp){
    var topic=cap(inp.topic||'your topic');
    var kw=inp.topic||'';
    var brand=inp.brand||(inp.ptype.v==='local'?'Your Local Business':'Your Brand');
    var aud=inp.audience||(inp.ptype.v==='local'?'local customers':'small business owners');
    var city=inp.city;
    var benefit=clean(inp.benefit)||(inp.ptype.v==='service'?'expert-led, on-time, fixed pricing':inp.ptype.v==='product'?'fast shipping & 30-day returns':inp.ptype.v==='local'?'licensed & trusted locally':'practical, no-fluff, ready to use');
    var tone=inp.tone.v;

    var vars={
      kw:topic,topic:kw,brand:brand,aud:aud,
      benefit:cap(benefit),city:buildLocalSuffix(city),
      author:inp.author||'',credentials:inp.credentials||'',
      org:inp.org||brand,sameAs:inp.sameAs||'',year:inp.year||''
    };

    /* title patterns per page type */
    var titles=[];
    if(inp.ptype.v==='blog'){
      if(inp.year){
        titles=[
          fillTpl('{kw} Guide ({year}) | {brand}',vars),
          fillTpl('{kw} — {benefit} ({year}) | {brand}',vars),
          fillTpl('How to {kw} ({year} Guide for {aud}) | {brand}',vars)
        ];
      }else{
        titles=[
          fillTpl('{kw}: {benefit} ({aud} guide) | {brand}',vars),
          fillTpl('{kw} — Practical Guide for {aud} | {brand}',vars),
          fillTpl('How to {kw} ({aud} guide) | {brand}',vars)
        ];
      }
    }else if(inp.ptype.v==='service'){
      titles=[
        fillTpl('{kw} — Trusted by {aud} | {brand}',vars),
        fillTpl('{brand}: {kw} for {aud}',vars),
        fillTpl('{kw} {city} | Flat-Rate Pricing — {brand}',vars)
      ];
    }else if(inp.ptype.v==='product'){
      titles=[
        fillTpl('{kw} — Free Shipping | {brand}',vars),
        fillTpl('{brand} {kw} | Handcrafted, Limited Drops',vars),
        fillTpl('Shop {kw}: Best-Sellers & New Arrivals | {brand}',vars)
      ];
    }else if(inp.ptype.v==='landing'){
      titles=[
        fillTpl('{kw} — {benefit} | {brand}',vars),
        fillTpl('Get {kw} in 24 Hours | {brand}',vars),
        fillTpl('Try {kw} Free for 14 Days | {brand}',vars)
      ];
    }else if(inp.ptype.v==='local'){
      titles=[
        fillTpl('{kw} {city} — Licensed & Trusted | {brand}',vars),
        fillTpl('{brand}: Top-Rated {kw} {city}',vars),
        fillTpl('24/7 {kw} {city} | Free Quote — {brand}',vars)
      ];
    }else if(inp.ptype.v==='about'){
      titles=[
        fillTpl('About {brand} — Our Story, Mission & Team',vars),
        fillTpl('Meet {brand}: Built for {aud}',vars),
        fillTpl('{brand} — {kw}, Powered by People',vars)
      ];
    }else if(inp.ptype.v==='faq'){
      titles=[
        fillTpl('{kw} — Frequently Asked Questions | {brand}',vars),
        fillTpl('Top {kw} Questions, Answered | {brand}',vars),
        fillTpl('{kw} FAQ for {aud} | {brand}',vars)
      ];
    }else if(inp.ptype.v==='course'){
      titles=[
        fillTpl('{kw} Course — Learn in 30 Days | {brand}',vars),
        fillTpl('Master {kw}: Self-Paced Course | {brand}',vars),
        fillTpl('{kw} for {aud} | Certificate Included — {brand}',vars)
      ];
    }

    /* descriptions per tone */
    var descs=[];
    var dt=TONE_DESC[tone]||TONE_DESC.pro;
    dt.forEach(function(t){descs.push(fillTpl(t,vars));});

    /* apply local phrasing if city + local page */
    if(city&&inp.ptype.v==='local'){
      titles=titles.map(function(t){return t.indexOf('{city}')>=0?t:t.replace('|',' '+city+' |');});
    }

    /* ensure keyword front-load + benefit hook + CTA */
    var out=titles.map(function(t,i){return addSeoHook(t,descs[i]||descs[0],vars,inp.ptype.v,tone);});

    /* dedupe variants */
    var seen={},uniq=[];
    out.forEach(function(o){if(!seen[o.t]){seen[o.t]=1;uniq.push(o);}});

    /* score + rank */
    uniq=uniq.map(function(o){return scoreOption(o,vars,inp);});
    uniq.sort(function(a,b){return b.score-a.score;});

    return {combo:uniq[0],all:uniq.slice(0,3),vars:vars,inp:inp};
  }

  /* ========== Scoring ========== */
  /* Character-proxy pixel scoring — replaced by canvas measurement at render time when available.
     Defaults match Google's 2026 published thresholds:
       title:    ≤600px desktop, ≤580px safe, >620px truncates
       desc:     ≤920px desktop, ≤680px mobile safe, >960px truncates
     Averaged across common font widths. */
  var PX_PER_CHAR_TITLE=10.5;
  var PX_PER_CHAR_DESC=9.5;
  function estTitlePx(s){return (s||'').length*PX_PER_CHAR_TITLE;}
  function estDescPx(s){return (s||'').length*PX_PER_CHAR_DESC;}
  function pxScore(px,safe,max,warnAt){
    if(px<=safe)return 100;
    if(px<=warnAt)return Math.round(100-((px-safe)/(warnAt-safe))*15);
    if(px<=max)return Math.round(85-((px-warnAt)/(max-warnAt))*35);
    if(px=0;});}
  function countAny(s,arr){if(!s)return 0;var lc=s.toLowerCase();var n=0;arr.forEach(function(w){var re=new RegExp('\\b'+w.replace(/[-/\\^$*+?.()|[\]{}]/g,'\\$&')+'\\b','g');var m=lc.match(re);if(m)n+=m.length;});return n;}
  /* E-E-A-T detection helpers (2026 Google ranking factors) */
  function detectFormat(s){if(!s)return 0;var lc=s.toLowerCase();return FORMAT_TOKENS.filter(function(t){return lc.indexOf(t)>=0;}).length;}
  function detectBait(s){if(!s)return 0;var lc=s.toLowerCase();return BAIT_PATTERNS.filter(function(t){return lc.indexOf(t)>=0;}).length;}
  function detectBoilerplate(s){if(!s)return 0;var lc=s.toLowerCase();return BOILERPLATE_PATTERNS.filter(function(t){return lc.indexOf(t)>=0;}).length;}
  function detectNumbers(s){if(!s)return 0;var m=s.match(/\b\d+\b/g);return m?m.length:0;}
  function detectYear(s){if(!s)return 0;return /\b(19|20)\d{2}\b/.test(s)?1:0;}
  function detectEntity(s){if(!s)return 0;var m=s.match(/\b[A-Z][a-z]{2,}\b/g);return m?m.length:0;}
  function detectH1Match(t,h1){if(!h1||!t)return 100;var tLc=t.toLowerCase(),h1Lc=h1.toLowerCase();var tWords=tLc.split(/\s+/).filter(function(w){return w.length>3;});var h1Words=h1Lc.split(/\s+/).filter(function(w){return w.length>3;});if(!h1Words.length)return 70;var overlap=tWords.filter(function(w){return h1Words.indexOf(w)>=0;}).length;return Math.round((overlap/Math.max(h1Words.length,1))*100);}
  function estimateRewriteRisk(t,h1,topic){
    if(!t)return 50;
    var risk=20;
    var tLc=t.toLowerCase();
    if(h1){
      var match=detectH1Match(t,h1);
      if(match<50)risk+=40;
      else if(match30)risk+=20;
      else if(tl<0)risk+=30;
    }
    if(/\b(best|top|#1)\b/i.test(t)&&!/2[0-9]{3}/.test(t))risk+=10;
    return Math.min(100,Math.max(5,risk));
  }
  /* E-E-A-T trust readiness from author/brand/credentials/org presence */
  function eeatReadiness(inp){
    var s=0;
    if(inp.author)s+=25;
    if(inp.credentials)s+=25;
    if(inp.org&&inp.org!==inp.brand)s+=20;
    if(inp.sameAs)s+=20;
    if(inp.year)s+=10;
    return Math.min(100,s);
  }
  function buildSchemaLd(inp){
    var graphs=[],orgName=inp.org||inp.brand||'';
    var baseUrl=(inp.domain||'example.com').replace(/^https?:\/\//,'');
    var siteUrl=baseUrl.indexOf('http')===0?baseUrl:'https://'+baseUrl;
    if(orgName){
      var org={'@context':'https://schema.org','@type':'Organization','name':orgName,'url':siteUrl};
      if(inp.sameAs){
        var links=inp.sameAs.split(/[\s,]+/).filter(Boolean);
        if(links.length)org.sameAs=links;
      }
      graphs.push(org);
    }
    if(inp.author){
      var person={'@context':'https://schema.org','@type':'Person','name':inp.author};
      if(inp.credentials)person.jobTitle=inp.credentials;
      if(orgName)person.worksFor={'@type':'Organization','name':orgName};
      if(inp.sameAs){
        var plinks=inp.sameAs.split(/[\s,]+/).filter(Boolean);
        if(plinks.length)person.sameAs=plinks;
      }
      graphs.push(person);
    }
    if(!graphs.length)return '';
    if(graphs.length===1)return JSON.stringify(graphs[0],null,2);
    return JSON.stringify({'@context':'https://schema.org','@graph':graphs},null,2);
  }
  function scoreOption(o,vars,inp){
    var t=o.t||'',d=o.d||'';
    var tlen=t.length,dlen=d.length;
    /* === 2026 pixel-based length scoring === */
    var tPx=estTitlePx(t),dPx=estDescPx(d);
    var sTitle=pxScore(tPx,580,620,600);
    var sDesc=pxScore(dPx,680,920,960);
    /* === Keyword front-load === */
    var kw=(vars.kw||'').toLowerCase();
    var tLc=t.toLowerCase();
    var sKey=10;
    var pos=tLc.indexOf(kw);
    if(pos<0)sKey=10;
    else if(pos<=5)sKey=100;
    else if(pos=0||d.toLowerCase().indexOf((vars.aud||'').toLowerCase())>=0;
    var hasBrand=tLc.indexOf((vars.brand||'').toLowerCase())>=0;
    var sTone=40+(hasAud?30:0)+(hasBrand?30:0);
    if(hasAud&&hasBrand)sTone=Math.min(100,sTone+10);
    /* === Format explicitness (AI Overview citability) === */
    var fmtCount=detectFormat(t);
    var sFmt=fmtCount>=1?100:fmtCount>=0.5?60:30;
    /* === Rewrite risk (inverse — high score = low risk) === */
    var rewriteRisk=estimateRewriteRisk(t,inp.h1,vars.kw||vars.topic);
    var sRewrite=100-rewriteRisk;
    /* === Bait/boilerplate penalty === */
    var baitHits=detectBait(t)+detectBait(d);
    var boilHits=detectBoilerplate(t)+detectBoilerplate(d);
    var sQuality=100-Math.min(60,baitHits*30+boilHits*20);
    /* === E-E-A-T readiness (informational only — not added to weighted score) === */
    var sEeat=eeatReadiness(inp);
    /* === Weighted composite === */
    if(tlen<20||dlen=80)cls='mox-meter__fill';
    else if(num>=50)cls='mox-meter__fill--warn';
    else cls='mox-meter__fill--risk';
    var pct=Math.max(0,Math.min(100,num));
    var cnum=cls.replace('mox-meter__fill','mox-meter__num');
    var cnum2=num>=80?'mox-meter__num--good':num>=50?'mox-meter__num--warn':'mox-meter__num--risk';
    return ''+num+'';
  }
  function verdictText(s){
    if(s>=85)return 'Ship it';
    if(s>=70)return 'Strong — minor polish';
    if(s>=55)return 'Decent — needs work';
    if(s>=40)return 'Weak — rewrite suggested';
    return 'Not shippable';
  }

  function renderGauge(score){
    var arc=el('mox-garc'),num=el('mox-gnum');
    if(!arc||!num)return;
    /* arc length for r=70 from 16,96 to 154,96 ≈ 219.9 */
    var len=219.9;
    var off=len-(len*(score/100));
    arc.style.strokeDasharray=len;
    arc.style.strokeDashoffset=len; /* start at 0 */
    requestAnimationFrame(function(){arc.style.strokeDashoffset=off;});
    var n=0;
    var tick=function(){n=Math.min(score,n+Math.max(1,Math.round((score-n)/8)));num.textContent=n;if(n<score)requestAnimationFrame(tick);};
    tick();
  }

  function render(result){
    el('mox-empty').style.display='none';
    el('mox-output').style.display='block';

    var c=result.combo;
    setText('mox-rec-t',c.t);
    setText('mox-rec-d',c.d);

    /* Google live preview */
    var sample=document.getElementById('mox-sample');
    if(sample){
      var cr=sample.querySelector('.mox-serpcard__crumb');
      if(cr)cr.textContent=(result.inp.domain||'example.com').replace(/^https?:\/\//,'')+(result.inp.ptype.v==='local'?' › '+result.inp.city:result.inp.ptype.v==='about'?'':' › '+result.inp.ptype.v);
      sample.querySelector('.mox-serpcard__title').textContent=c.t;
      sample.querySelector('.mox-serpcard__desc').textContent=c.d;
    }

    /* Twitter */
    setText('mox-tw-img',trunc(c.t,40));
    setText('mox-tw-domain',(result.inp.domain||'example.com').replace(/^https?:\/\//,''));
    setText('mox-tw-title',c.t);
    setText('mox-tw-desc',c.d);

    /* OG */
    setText('mox-og-img',trunc(c.t,40));
    setText('mox-og-domain',(result.inp.domain||'example.com').replace(/^https?:\/\//,''));
    setText('mox-og-title',c.t);
    setText('mox-og-desc',c.d);
    var ogTags='<meta name="description" content="'+escAttr(c.d)+'">\n'
      +'<meta property="og:title" content="'+escAttr(c.t)+'">\n'
      +'<meta property="og:description" content="'+escAttr(c.d)+'">\n'
      +'<meta property="og:type" content="'+escAttr(result.inp.ptype.v)+'">\n'
      +'<meta name="twitter:card" content="summary_large_image">\n'
      +'<meta name="twitter:title" content="'+escAttr(c.t)+'">\n'
      +'<meta name="twitter:description" content="'+escAttr(c.d)+'">';
    setText('mox-og-tags',ogTags);
    var schemaLd=buildSchemaLd(result.inp);
    var schemaEl=el('mox-schema-ld');
    if(schemaEl){
      if(schemaLd){
        schemaEl.textContent=schemaLd;
      }else{
        schemaEl.textContent='Fill in Author + Organization (E-E-A-T section) to generate Person/Organization JSON-LD.';
      }
    }

    /* options list */
    var html='';
    result.all.forEach(function(o,i){
      html+=''
        +''
        +'**#'+(i+1)+'**'+o.tlen+' / '+o.dlen+' chars · score '+o.score+''
        +'copy'
        +''
        +''+escHtml(o.t)+''
        +''+escHtml(o.d)+meter(o.parts.title,50,60)+meter(o.parts.desc,120,155)+''
        +'';
    });
    el('mox-opts').innerHTML=html;

    /* wire copy buttons on options */
    el('mox-opts').querySelectorAll('.mox-opt__copy').forEach(function(b){
      b.addEventListener('click',function(){
        var t=b.getAttribute('data-copy-t')||'',d=b.getAttribute('data-copy-d')||'';
        copyText('Title: '+t+'\nDescription: '+d);
        flashOk(b,'Copied ✓');
      });
    });

    /* gauge + bars */
    renderGauge(c.score);
    setText('mox-verdict',verdictText(c.score)+' · '+c.score+'/100');
    var hint='Score: length (px) · keyword position · rewrite risk · format · specificity · tone · proof · quality.';
    if(c.score<70){
      var keys=Object.keys(c.parts),worst=keys[0];
      for(var i=1;i<keys.length;i++)if(c.parts[keys[i]]<c.parts[worst])worst=keys[i];
      var tips={
        title:'shorten the title to ≤580 px (≈55 chars)',
        desc:'tighten the description to ≤680 mobile / ≤920 desktop px (≈140–158 chars)',
        key:'put the focus keyword in the first 5 words of the title',
        rewrite:'match the H1 more closely — Google rewrites titles that disagree with the visible heading',
        format:'add an explicit format: "Guide", "Checklist", "How to", "Examples", "Pricing"',
        spec:'add specificity — a number, a year, or a named entity',
        power:'add proof: "5-star", "licensed", "free consult", "fixed pricing"',
        tone:'name your audience and brand',
        quality:'remove clickbait ("you won\'t believe") and boilerplate ("welcome to", "your one-stop")',
        eeat:'add author, credentials, organization, and sameAs links to lift E-E-A-T readiness'
      };
      hint='Biggest lift: '+tips[worst]+'.';
    }
    setText('mox-gauge-hint',hint);

    function bar(prefix,val,suffix){
      var fill=el('mox-b-'+prefix);
      if(fill){
        fill.classList.remove('mox-bar__fill--warn','mox-bar__fill--risk');
        if(val=50)fill.classList.add('mox-bar__fill--warn');
        else if(val<50)fill.classList.add('mox-bar__fill--risk');
        fill.style.width=Math.max(0,Math.min(100,val))+'%';
      }
      setText('mox-v-'+prefix,(suffix||val+'/100'));
    }
    bar('title',c.parts.title,Math.round(c.tPx)+' px · '+c.tlen+'c');
    bar('desc',c.parts.desc,Math.round(c.dPx*0.74)+' / '+Math.round(c.dPx)+' px · '+c.dlen+'c');
    bar('key',c.parts.key);
    bar('rewrite',c.parts.rewrite,'risk '+c.rewriteRisk+'/100');
    bar('format',c.parts.format,c.fmtCount+' marker'+(c.fmtCount===1?'':'s'));
    bar('spec',c.parts.spec,c.numCount+(c.hasYear?' + year':''));
    bar('tone',c.parts.tone);
    bar('power',c.parts.power);
    bar('quality',c.parts.quality);
    bar('eeat',c.parts.eeat);

    /* quick wins — aligned with Google length, rewrite-risk, quality, E-E-A-T */
    var wins=[];
    if(c.parts.title<70)wins.push({i:'h',t:'Shorten or rebalance title pixel width',d:'Google truncates around ~600px (~50–60 chars). Keep the focus keyword in the first 5 words and cut filler before the pipe.'});
    if(c.parts.desc<70)wins.push({i:'h',t:'Tune description for mobile + desktop px',d:'Mobile often cuts near ~680px (~120 chars); desktop allows ~920px. Lead with benefit, end with a benefit-anchored CTA.'});
    if(c.parts.rewrite<70)wins.push({i:'h',t:'Align title with on-page H1',d:'When Google rewrites your title, CTR drops. Match your H1 intent or shorten the title so it tracks the visible heading.'});
    if(c.parts.format<60)wins.push({i:'m',t:'State the page format explicitly',d:'Add Guide, Checklist, How-to, or FAQ in the title — AI Overviews quote format-explicit pages more reliably.'});
    if(c.parts.key<70)wins.push({i:'m',t:'Move the focus keyword to the front',d:'Front-loaded keywords lift CTR and match AI-overview extraction patterns.'});
    if(c.parts.quality<70)wins.push({i:'m',t:'Remove clickbait and boilerplate',d:'Phrases like "you won\'t believe" or "click here" hurt quality signals. Use specific proof instead.'});
    if(c.parts.spec<60)wins.push({i:'m',t:'Add specificity signals',d:'Include a year, number, or named entity (city, credential) so the snippet looks current and trustworthy.'});
    if(c.parts.power<60)wins.push({i:'m',t:'Add a power word and proof',d:'Pair words like "free", "proven", "licensed" with concrete proof — "5-star", "flat-rate", "free quote".'});
    if(c.parts.tone<70)wins.push({i:'m',t:'Name your audience and brand',d:'"For freelancers" + brand in the description improves relevance for Google and AI search.'});
    if(c.parts.eeat=85)wins.push({i:'l',t:'Ship it',d:'Passes scoring gates aligned with Google length, rewrite-risk, and quality signals. Publish, then iterate on real CTR from Search Console.'});

    var winsHtml=wins.map(function(w,i){return ''+(i+1)+''+escHtml(w.t)+''+(w.i==='h'?'High':w.i==='m'?'Med':'Low')+''+escHtml(w.d)+'';}).join('');
    el('mox-quickwins').innerHTML=winsHtml;

    /* plan */
    var plan=[
      'Paste the title inside **<title>** — target ≤600px width and align intent with your on-page **H1** to reduce rewrite risk.',
      'Paste the description in **<meta name="description">** — first meta in head, benefit-led with proof and a specific CTA.',
      'Add OG + Twitter tags from the OG tab so shares render correctly on X, LinkedIn, Slack.',
      'Paste the **JSON-LD schema** from the OG tab (author · org · sameAs) for E-E-A-T trust signals.',
      'Set **og:image** to a 1200×630 image with readable text overlay.',
      'After publish, request indexing in Google Search Console and compare live SERP vs preview within 48h.',
      'Re-test after 4 weeks against Search Console CTR — iterate on the weakest score bar.'
    ];
    el('mox-plan').innerHTML=plan.map(function(p){return '- '+p+'
';}).join('');

    /* flash + store for share */
    lastResult=result;
    flashResult();
  }

  var lastResult=null;

  function escHtml(s){return (s||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"');}
  function escAttr(s){return escHtml(s).replace(/'/g,''');}
  function flashResult(){var r=el('mox-result');r.classList.add('mox-flash');setTimeout(function(){r.classList.remove('mox-flash');},1200);}
  function flashOk(el,msg){
    var orig=el.textContent;
    el.textContent=msg;
    setTimeout(function(){el.textContent=orig;},1200);
  }

  /* ========== Copy / download ========== */
  function copyText(txt){
    if(navigator.clipboard&&navigator.clipboard.writeText){
      navigator.clipboard.writeText(txt).catch(function(){fallbackCopy(txt);});
    }else{
      fallbackCopy(txt);
    }
  }
  function fallbackCopy(txt){
    var ta=document.createElement('textarea');
    ta.value=txt;ta.style.position='fixed';ta.style.opacity='0';
    document.body.appendChild(ta);ta.select();
    try{document.execCommand('copy');}catch(e){}
    document.body.removeChild(ta);
  }
  function showCopyOk(){
    var s=el('mox-copy-ok');s.style.display='inline';
    setTimeout(function(){s.style.display='none';},1500);
  }

  function md(result){
    var c=result.combo;
    var lines=['# Meta tags','',
      '## Recommended','- **Title:** '+c.t,'- **Description:** '+c.d,'',
      '## All options'];
    result.all.forEach(function(o,i){
      lines.push('### Option '+(i+1)+' (score '+o.score+')');
      lines.push('- **Title:** '+o.t);
      lines.push('- **Description:** '+o.d);
      lines.push('');
    });
    lines.push('## HTML tags','```html',''+c.t+'','','','','','','','```');
    var ld=buildSchemaLd(result.inp);
    if(ld){
      lines.push('','## E-E-A-T JSON-LD','```html','',''+ld,'','```');
    }
    return lines.join('\n');
  }

  /* ========== URL state ========== */
  function encodeState(){
    var inp=readInputs();
    var o={};
    o.p=inp.ptype.v;o.t=inp.tone.v;
    if(inp.topic)o.k=inp.topic;
    if(inp.brand)o.b=inp.brand;
    if(inp.audience)o.a=inp.audience;
    if(inp.city)o.c=inp.city;
    if(inp.domain&&inp.domain!=='example.com')o.d=inp.domain;
    if(inp.benefit)o.x=inp.benefit;
    if(inp.h1)o.h1=inp.h1;
    if(inp.author)o.au=inp.author;
    if(inp.credentials)o.cr=inp.credentials;
    if(inp.org)o.og=inp.org;
    if(inp.sameAs)o.sa=inp.sameAs;
    if(inp.year)o.yr=inp.year;
    var params=new URLSearchParams();
    Object.keys(o).forEach(function(k){if(o[k])params.set(k,o[k]);});
    var q=params.toString();
    var base=location.origin+location.pathname;
    return q?base+'?'+q+'#mox-tool':base+'#mox-tool';
  }
  function loadState(){
    try{
      var p=new URLSearchParams(location.search);
      if(![...p.keys()].length)return false;
      var o={};
      if(p.get('p'))o.ptype=p.get('p');
      if(p.get('t'))o.tone=p.get('t');
      if(p.get('k'))o.topic=p.get('k');
      if(p.get('b'))o.brand=p.get('b');
      if(p.get('a'))o.audience=p.get('a');
      if(p.get('c'))o.city=p.get('c');
      if(p.get('d'))o.domain=p.get('d');
      if(p.get('x'))o.benefit=p.get('x');
      if(p.get('h1'))o.h1=p.get('h1');
      if(p.get('au'))o.author=p.get('au');
      if(p.get('cr'))o.credentials=p.get('cr');
      if(p.get('og'))o.org=p.get('og');
      if(p.get('sa'))o.sameAs=p.get('sa');
      if(p.get('yr'))o.year=p.get('yr');
      writeInputs(o);
      return true;
    }catch(e){return false;}
  }

  /* ========== Tabs ========== */
  root.querySelectorAll('.mox-prevtab').forEach(function(t){
    t.addEventListener('click',function(){
      var target=t.dataset.tab;
      root.querySelectorAll('.mox-prevtab').forEach(function(o){
        var on=o===t;
        o.classList.toggle('mox-on',on);
        o.setAttribute('aria-selected',on?'true':'false');
      });
      root.querySelectorAll('.mox-prevpane').forEach(function(p){p.classList.toggle('mox-show',p.dataset.pane===target);});
    });
  });

  /* ========== Buttons ========== */
  el('mox-generate').addEventListener('click',function(){
    var inp=readInputs();
    if(!inp.topic){
      var k=el('mox-topic');k.focus();
      k.style.borderColor='var(--mox-risk)';
      setTimeout(function(){k.style.borderColor='';},1400);
      return;
    }
    var r=generate(inp);
    render(r);
    /* update URL state silently */
    try{history.replaceState(null,'',encodeState());}catch(e){}
  });

  el('mox-reset').addEventListener('click',function(){
    ['mox-topic','mox-brand','mox-audience','mox-city','mox-domain','mox-benefit','mox-h1','mox-author','mox-credentials','mox-org','mox-sameas','mox-year'].forEach(function(k){var n=el('mox-'+k);if(n)n.value='';});
    writeInputs({ptype:'blog',tone:'pro'});
    el('mox-empty').style.display='block';
    el('mox-output').style.display='none';
    try{history.replaceState(null,'',location.origin+location.pathname+'#mox-tool');}catch(e){}
  });

  el('mox-share').addEventListener('click',function(){
    var url=encodeState();
    copyText(url);
    var ok=el('mox-share-ok');ok.style.display='inline';
    setTimeout(function(){ok.style.display='none';},1500);
  });

  el('mox-copy').addEventListener('click',function(){
    if(!lastResult)return;
    copyText('Title: '+lastResult.combo.t+'\nDescription: '+lastResult.combo.d);
    showCopyOk();
  });

  el('mox-copy-all').addEventListener('click',function(){
    if(!lastResult)return;
    var txt=lastResult.all.map(function(o,i){return '#'+(i+1)+' (score '+o.score+')\nTitle: '+o.t+'\nDescription: '+o.d;}).join('\n\n');
    copyText(txt);
    showCopyOk();
  });

  el('mox-copy-md').addEventListener('click',function(){
    if(!lastResult)return;
    copyText(md(lastResult));
    showCopyOk();
  });

  el('mox-download').addEventListener('click',function(){
    if(!lastResult)return;
    var blob=new Blob([md(lastResult)],{type:'text/markdown'});
    var a=document.createElement('a');
    a.href=URL.createObjectURL(blob);
    var slug=(lastResult.inp.topic||'meta').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'').slice(0,40);
    a.download=(slug||'meta')+'-tags.md';
    document.body.appendChild(a);a.click();document.body.removeChild(a);
    setTimeout(function(){URL.revokeObjectURL(a.href);},1000);
  });

  /* ========== Live preview (cheap) ========== */
  ['topic','brand','audience','city','domain','benefit','h1','author','credentials','org','sameas','year'].forEach(function(id){
    var n=el('mox-'+id);
    if(n)n.addEventListener('input',debounce(updateLivePreview,200));
  });
  root.querySelectorAll('#mox-ptype .mox-tile, #mox-tone .mox-tile').forEach(function(t){
    t.addEventListener('click',debounce(updateLivePreview,100));
  });
  function debounce(fn,ms){var t;return function(){clearTimeout(t);t=setTimeout(fn,ms);};}
  function updateLivePreview(){
    var inp=readInputs();
    var sample=document.getElementById('mox-sample');
    if(!sample)return;
    var topic=cap(inp.topic||'your page topic');
    var brand=inp.brand||(inp.ptype.v==='local'?'Your Local Business':'Your Brand');
    var aud=inp.audience||(inp.ptype.v==='local'?'local customers':'small business owners');
    var liveTitle=inp.topic
      ? topic+' — '+(inp.ptype.v==='about'?'Our Story':'Trusted by '+aud)+' | '+brand
      : 'Your Page Title Will Appear Here — Try the Generator | '+brand;
    var liveDesc=inp.topic
      ? 'Hi '+(inp.ptype.v==='local'?'neighbor':aud)+' — '+brand+' makes '+topic.toLowerCase()+' simple. '+cap(inp.benefit||'Practical, no-fluff, ready to use')+'. Book a free consult today.'
      : 'Type your page topic on the left and watch a real Google preview update live. No signup, no API keys — just three ranked title + description options in 30 seconds.';
    sample.querySelector('.mox-serpcard__crumb').textContent=(inp.domain||'example.com').replace(/^https?:\/\//,'')+(inp.ptype.v==='local'&&inp.city?' › '+inp.city:inp.ptype.v==='about'?'':' › '+inp.ptype.v);
    sample.querySelector('.mox-serpcard__title').textContent=liveTitle;
    sample.querySelector('.mox-serpcard__desc').textContent=liveDesc;
  }

  /* ========== Init ========== */
  var yrDefault=el('mox-year');
  if(yrDefault&&!yrDefault.value)yrDefault.value='2026';
  if(loadState()){
    /* auto-generate if topic present */
    var inp0=readInputs();
    if(inp0.topic){
      /* defer so first paint finishes */
      setTimeout(function(){
        var r=generate(inp0);
        render(r);
      },50);
    }
  }
})();

				
				
				
		
				
				
					.mxxl{--o:#F58427;font-family:'Neue Haas Grotesk Display Pro',sans-serif;max-width:1800px;margin:0 auto}.mxxl *{box-sizing:border-box}.mxxl .eb{display:inline-flex;align-items:center;gap:10px;font-family:'Unbounded',sans-serif;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--o)!important;margin:0 0 16px}.mxxl .eb:before{content:'';width:26px;height:2px;background:var(--o)}.mxxl h2{font-family:'Unbounded',sans-serif;font-weight:600;font-size:clamp(20px,2vw,27px);letter-spacing:-.5px;color:#fff!important;margin:0 0 14px}.mxxl p{color:#9a9a9a!important;font-size:15.5px;line-height:1.72;margin:0 0 22px;max-width:74ch}.mxxl p a{color:var(--o)!important;text-decoration:none;border-bottom:1px solid rgba(245,132,39,.4)}.mxxl .g{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.mxxl .k{display:block;background:#111;border:1px solid #242424;border-radius:13px;padding:17px 18px;text-decoration:none;transition:all .2s ease}.mxxl .k:hover{border-color:rgba(245,132,39,.45);transform:translateY(-3px)}.mxxl .k .l{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#7d7d7d!important;display:block;margin:0 0 7px}.mxxl .k .t{font-family:'Unbounded',sans-serif;font-weight:600;font-size:14px;color:#fff!important;line-height:1.3;display:block}.mxxl .k:hover .t{color:var(--o)!important}@media(max-width:1000px){.mxxl .g{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.mxxl .g{grid-template-columns:1fr}}Keep exploring
## More tools like this one

We built these for our own client work and published them because they were useful. No signup on any of them.

[ToolAI Answer Extractability Checker](https://moxseo.com/tools/ai-answer-extractability-checker/)[ToolAI Crawler Access Checker](https://moxseo.com/tools/ai-crawler-access-checker/)[ToolSchema Markup Validator](https://moxseo.com/tools/schema-markup-validator/)[AllSee all seven tools](https://moxseo.com/tools/)
