{"id":68,"date":"2026-07-01T13:37:38","date_gmt":"2026-07-01T13:37:38","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=68"},"modified":"2026-07-28T16:39:28","modified_gmt":"2026-07-28T16:39:28","slug":"seo-tools-2","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/seo-tools-2\/","title":{"rendered":"SEO Tools"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Meta Tags, Keyword Density, Sitemap Generator and SEO Checker tools.<\/p>\n\n\n\n<div id=\"seotools-root\" class=\"seotools-scope\">\n  <style>\n    \/* Absolute Component Reset & Scoping *\/\n    .seotools-scope {\n      box-sizing: border-box;\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n      font-size: 16px;\n      line-height: 1.5;\n      text-rendering: optimizeLegibility;\n      -webkit-font-smoothing: antialiased;\n      -moz-osx-font-smoothing: grayscale;\n      display: block;\n      width: 100%;\n      margin: 0 auto;\n      max-width: 1200px;\n      padding: 0;\n    }\n    .seotools-scope *, .seotools-scope *::before, .seotools-scope *::after { box-sizing: border-box; }\n    \n    .seotools-scope .seotools-app-container { \n      background-color: #ffffff; \n      padding: 1rem; \n      color: #1e293b; \n      display: flex;\n      flex-direction: column;\n      gap: 1rem;\n    }\n    \n    \/* Header Workspace Styling *\/\n    .seotools-scope .seotools-header { \n      border-bottom: 1px solid #e2e8f0; \n      padding-bottom: 1rem; \n    }\n    .seotools-scope .seotools-brand { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.25rem; }\n    .seotools-scope .seotools-icon-main { color: #0d9488; flex-shrink: 0; }\n    .seotools-scope .seotools-title { font-size: 1.4rem; font-weight: 700; color: #0f172a; margin: 0; padding: 0; border: none; }\n    .seotools-scope .seotools-tagline { font-size: 0.85rem; color: #64748b; margin: 0; }\n    \n    \/* Navigation Bar System *\/\n    .seotools-scope .seotools-nav-tabs { \n      display: flex; \n      background: #f1f5f9; \n      padding: 0.25rem; \n      border-radius: 8px; \n      gap: 0.25rem; \n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n    }\n    .seotools-scope .seotools-tab-btn { \n      flex: 1; \n      background: none; \n      border: none; \n      padding: 0.65rem 0.75rem; \n      font-size: 0.85rem; \n      font-weight: 600; \n      color: #475569; \n      border-radius: 6px; \n      cursor: pointer; \n      text-align: center; \n      white-space: nowrap; \n      transition: all 0.15s ease;\n      min-width: 120px;\n    }\n    .seotools-scope .seotools-tab-btn.seotools-active { background: #ffffff; color: #0d9488; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\n    \n    \/* Dynamic Structural Panels *\/\n    .seotools-scope .seotools-workspace { \n      display: flex;\n      flex-direction: column; \n      gap: 1rem; \n    }\n    \n    .seotools-scope .seotools-card { \n      background: #f8fafc; \n      border: 1px solid #e2e8f0; \n      border-radius: 12px; \n      padding: 1.25rem; \n      height: fit-content; \n    }\n    .seotools-scope .seotools-card-title { font-size: 1.05rem; font-weight: 600; color: #1e293b; margin: 0 0 1.25rem 0; padding-bottom: 0.5rem; border-bottom: 2px solid #e2e8f0; }\n    \n    .seotools-scope .seotools-form { display: flex; flex-direction: column; gap: 1rem; }\n    .seotools-scope .seotools-form-group { display: flex; flex-direction: column; gap: 0.4rem; }\n    .seotools-scope .seotools-label { font-size: 0.8rem; font-weight: 600; color: #334155; display: flex; justify-content: space-between; align-items: center; }\n    .seotools-scope .seotools-char-count { font-weight: 500; font-family: monospace; color: #64748b; background: #e2e8f0; padding: 0.1rem 0.4rem; border-radius: 4px; }\n    \n    .seotools-scope .seotools-input, .seotools-scope .seotools-textarea { \n      width: 100%; \n      border: 1px solid #cbd5e1; \n      border-radius: 6px; \n      padding: 0.75rem; \n      font-size: 0.95rem; \n      color: #334155; \n      background-color: #ffffff; \n      outline: none; \n      font-family: inherit; \n      transition: border 0.2s ease, box-shadow 0.2s ease;\n    }\n    .seotools-scope .seotools-textarea { resize: vertical; min-height: 110px; }\n    .seotools-scope .seotools-input:focus, .seotools-scope .seotools-textarea:focus { border-color: #0d9488; box-shadow: 0 0 0 3px rgba(13, 148, 136, 0.15); }\n    \n    \/* Interactive Button Framework *\/\n    .seotools-scope .seotools-btn { \n      display: inline-flex; \n      align-items: center; \n      justify-content: center; \n      font-weight: 600; \n      font-size: 0.95rem; \n      padding: 0.75rem 1.25rem; \n      border-radius: 6px; \n      border: 1px solid transparent; \n      cursor: pointer; \n      transition: all 0.15s ease; \n      width: 100%; \n      text-align: center;\n      min-height: 44px; \n    }\n    .seotools-scope .seotools-btn-primary { background-color: #0d9488; color: #ffffff; }\n    .seotools-scope .seotools-btn-primary:hover { background-color: #0f766e; }\n    .seotools-scope .seotools-btn-accent { background-color: #475569; color: #ffffff; }\n    .seotools-scope .seotools-btn-accent:hover { background-color: #334155; }\n    \n    \/* Metrics Box and Output Architecture *\/\n    .seotools-scope .seotools-output-box { width: 100%; height: 260px; background: #0f172a; border: 1px solid #1e293b; border-radius: 8px; padding: 0.85rem; color: #38bdf8; font-family: monospace; font-size: 0.85rem; resize: none; outline: none; }\n    \n    .seotools-scope .seotools-table-wrapper { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid #cbd5e1; border-radius: 8px; margin-top: 0.5rem; }\n    .seotools-scope .seotools-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 0.85rem; background: #ffffff; }\n    .seotools-scope .seotools-table th, .seotools-scope .seotools-table td { padding: 0.75rem 1rem; border-bottom: 1px solid #e2e8f0; white-space: nowrap; }\n    .seotools-scope .seotools-table th { background: #f8fafc; color: #475569; font-weight: 700; font-size: 0.75rem; text-transform: uppercase; border-bottom: 2px solid #cbd5e1; }\n    .seotools-scope .seotools-table tr:last-child td { border-bottom: none; }\n    \n    .seotools-scope .seotools-checker-list { display: flex; flex-direction: column; gap: 0.75rem; }\n    .seotools-scope .seotools-check-item { display: flex; flex-direction: column; gap: 0.5rem; background: #ffffff; border: 1px solid #e2e8f0; padding: 1rem; border-radius: 8px; font-size: 0.85rem; box-shadow: 0 1px 2px rgba(0,0,0,0.02); }\n    .seotools-scope .seotools-badge { font-weight: 700; border-radius: 4px; padding: 0.2rem 0.5rem; font-size: 0.7rem; text-transform: uppercase; display: inline-block; width: fit-content; text-align: center; }\n    .seotools-scope .seotools-badge-pass { background: #d1fae5; color: #065f46; }\n    .seotools-scope .seotools-badge-fail { background: #fee2e2; color: #991b1b; }\n    .seotools-scope .seotools-badge-warn { background: #fef3c7; color: #92400e; }\n    .seotools-scope .seotools-hidden { display: none !important; }\n    .seotools-scope .seotools-alt-title { font-size: 1.05rem; font-weight: 600; margin: 0 0 1rem 0; color: #0f172a; display: flex; justify-content: space-between; align-items: center; }\n\n    \/* Desktop Breakpoints Optimization *\/\n    @media (min-width: 768px) {\n      .seotools-scope .seotools-app-container { padding: 1.5rem; }\n      .seotools-scope .seotools-title { font-size: 1.65rem; }\n      .seotools-scope .seotools-tagline { font-size: 0.9rem; }\n      .seotools-scope .seotools-workspace { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 1.5rem; align-items: start; }\n      .seotools-scope .seotools-card { padding: 1.5rem; }\n      .seotools-scope .seotools-check-item { flex-direction: row; align-items: flex-start; gap: 1rem; }\n      .seotools-scope .seotools-badge { flex-shrink: 0; margin-top: 0.15rem; }\n    }\n  <\/style>\n\n  <div class=\"seotools-app-container\">\n    <header class=\"seotools-header\">\n      <div class=\"seotools-brand\">\n        <svg class=\"seotools-icon-main\" viewBox=\"0 0 24 24\" width=\"26\" height=\"26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"><\/line><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"><\/path><\/svg>\n        <h1 class=\"seotools-title\">Local SEO Control Suite<\/h1>\n      <\/div>\n      <p class=\"seotools-tagline\">Evaluate on-page structures, run content distributions, and audit production markup live.<\/p>\n    <\/header>\n\n    <nav class=\"seotools-nav-tabs\">\n      <button type=\"button\" class=\"seotools-tab-btn seotools-active\" data-tool=\"meta\">Meta Tags<\/button>\n      <button type=\"button\" class=\"seotools-tab-btn\" data-tool=\"density\">Keyword Density<\/button>\n      <button type=\"button\" class=\"seotools-tab-btn\" data-tool=\"sitemap\">Sitemap Generator<\/button>\n      <button type=\"button\" class=\"seotools-tab-btn\" data-tool=\"checker\">SEO Checker<\/button>\n    <\/nav>\n\n    <main class=\"seotools-workspace\">\n      <section class=\"seotools-card\">\n        <h2 class=\"seotools-card-title\" id=\"seotools-input-title\">Configure Metadata Settings<\/h2>\n        \n        <div id=\"seotools-panel-meta\" class=\"seotools-tool-panel\">\n          <form class=\"seotools-form\" onsubmit=\"return false;\">\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Site Title Meta Element <span id=\"seotools-title-cnt\" class=\"seotools-char-count\">0\/60<\/span><\/label>\n              <input type=\"text\" id=\"seotools-meta-title\" class=\"seotools-input\" value=\"Local Dental Clinic | Expert Family Dentistry\" placeholder=\"Target keyword-optimized page title...\">\n            <\/div>\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Meta Description Element <span id=\"seotools-desc-cnt\" class=\"seotools-char-count\">0\/160<\/span><\/label>\n              <textarea id=\"seotools-meta-desc\" class=\"seotools-textarea\" placeholder=\"Provide summary snippet brief write-up...\">Visit our local dental clinic for comprehensive family dentistry, emergency care, and teeth whitening. Schedule your appointment today for a healthy smile!<\/textarea>\n            <\/div>\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Robots Indexation Protocol Mapping<\/label>\n              <input type=\"text\" id=\"seotools-meta-robots\" class=\"seotools-input\" value=\"index, follow\">\n            <\/div>\n            <button type=\"button\" id=\"seotools-gen-meta-btn\" class=\"seotools-btn seotools-btn-primary\">Generate Tags<\/button>\n          <\/form>\n        <\/div>\n\n        <div id=\"seotools-panel-density\" class=\"seotools-tool-panel seotools-hidden\">\n          <form class=\"seotools-form\" onsubmit=\"return false;\">\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Article Text \/ Copy Content Area<\/label>\n              <textarea id=\"seotools-density-text\" class=\"seotools-textarea\" placeholder=\"Paste structural text blocks here to evaluate word frequency targets...\">Our local dental clinic offers top-tier dental care. Every dentist at our dental clinic treats family dental needs with care. Regular dental checkups at the clinic can prevent complex dental issues before they start.<\/textarea>\n            <\/div>\n            <button type=\"button\" id=\"seotools-calc-density-btn\" class=\"seotools-btn seotools-btn-primary\">Analyze Density<\/button>\n          <\/form>\n        <\/div>\n\n        <div id=\"seotools-panel-sitemap\" class=\"seotools-tool-panel seotools-hidden\">\n          <form class=\"seotools-form\" onsubmit=\"return false;\">\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Domain Root URL Address<\/label>\n              <input type=\"url\" id=\"seotools-sitemap-root\" class=\"seotools-input\" value=\"https:\/\/example.com\">\n            <\/div>\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Target Slug Permalinks (One per line)<\/label>\n              <textarea id=\"seotools-sitemap-urls\" class=\"seotools-textarea\" placeholder=\"Enter path structures layout...\">\/\n\/about\n\/services\n\/contact<\/textarea>\n            <\/div>\n            <button type=\"button\" id=\"seotools-gen-sitemap-btn\" class=\"seotools-btn seotools-btn-primary\">Compile XML Sitemap<\/button>\n          <\/form>\n        <\/div>\n\n        <div id=\"seotools-panel-checker\" class=\"seotools-tool-panel seotools-hidden\">\n          <form class=\"seotools-form\" onsubmit=\"return false;\">\n            <div class=\"seotools-form-group\">\n              <label class=\"seotools-label\">Raw Target Source Markup HTML String<\/label>\n              <textarea id=\"seotools-checker-html\" class=\"seotools-textarea\" placeholder=\"Paste clean component HTML target strings...\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n  &lt;title&gt;Emergency Dental Care | Local Clinic Specialists&lt;\/title&gt;\n  &lt;meta name=&#8221;description&#8221; content=&#8221;Affordable emergency dental treatment near you.&#8221;&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;h1&gt;Welcome to the Clinic&lt;\/h1&gt;\n  &lt;h1&gt;Duplicate Main Title Head&lt;\/h1&gt;\n  &lt;img src=&#8221;clinic.jpg&#8221;&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/textarea>\n            <\/div>\n            <button type=\"button\" id=\"seotools-run-check-btn\" class=\"seotools-btn seotools-btn-primary\">Inspect Elements<\/button>\n          <\/form>\n        <\/div>\n      <\/section>\n\n      <section class=\"seotools-card\" style=\"background-color: #f1f5f9; border-color: #cbd5e1;\">\n        <h2 class=\"seotools-card-title\">Compilation Metrics Area<\/h2>\n        \n        <div id=\"seotools-default-output\">\n          <textarea id=\"seotools-code-output\" class=\"seotools-output-box\" readonly placeholder=\"Output configuration strings render here...\"><\/textarea>\n          <button type=\"button\" id=\"seotools-copy-btn\" class=\"seotools-btn seotools-btn-accent\" style=\"margin-top: 1rem;\">Copy Code Output<\/button>\n        <\/div>\n        \n        <div id=\"seotools-alternative-output\" class=\"seotools-hidden\"><\/div>\n      <\/section>\n    <\/main>\n  <\/div>\n\n  <script>\n  (function seotoolsComponentCoreRuntime() {\n    \"use strict\";\n\n    const base = document.getElementById(\"seotools-root\");\n    if (!base) return;\n\n    \/\/ Secure Centralized Registry Cache Lookup Strategy (Fixed scoping using base.querySelector\/getElementById)\n    const dom = {\n      tabs: base.querySelectorAll(\".seotools-tab-btn\"),\n      inputTitle: base.querySelector(\"#seotools-input-title\"),\n      codeOutput: base.querySelector(\"#seotools-code-output\"),\n      copyBtn: base.querySelector(\"#seotools-copy-btn\"),\n      defaultOutput: base.querySelector(\"#seotools-default-output\"),\n      alternativeOutput: base.querySelector(\"#seotools-alternative-output\"),\n      \n      panels: {\n        meta: base.querySelector(\"#seotools-panel-meta\"),\n        density: base.querySelector(\"#seotools-panel-density\"),\n        sitemap: base.querySelector(\"#seotools-panel-sitemap\"),\n        checker: base.querySelector(\"#seotools-panel-checker\")\n      },\n      \n      mTitle: base.querySelector(\"#seotools-meta-title\"),\n      mDesc: base.querySelector(\"#seotools-meta-desc\"),\n      mRobots: base.querySelector(\"#seotools-meta-robots\"),\n      tTitleCnt: base.querySelector(\"#seotools-title-cnt\"),\n      tDescCnt: base.querySelector(\"#seotools-desc-cnt\"),\n      dText: base.querySelector(\"#seotools-density-text\"),\n      sRoot: base.querySelector(\"#seotools-sitemap-root\"),\n      sUrls: base.querySelector(\"#seotools-sitemap-urls\"),\n      cHtml: base.querySelector(\"#seotools-checker-html\"),\n      \n      btnMeta: base.querySelector(\"#seotools-gen-meta-btn\"),\n      btnDensity: base.querySelector(\"#seotools-calc-density-btn\"),\n      btnSitemap: base.querySelector(\"#seotools-gen-sitemap-btn\"),\n      btnChecker: base.querySelector(\"#seotools-run-check-btn\")\n    };\n\n    const blockHeaderTitles = {\n      meta: \"Configure Metadata Settings\",\n      density: \"Analyze Word Frequency Properties\",\n      sitemap: \"Configure XML Sitemap Elements\",\n      checker: \"On-Page Document Structuring Verification\"\n    };\n\n    \/\/ Robust Isolated Component Workspace Switcher Module\n    function shiftActiveWorkspaceTab(selectedToolKey) {\n      if (!blockHeaderTitles[selectedToolKey]) return;\n      \n      \/\/ Update Context Headers Safely\n      if (dom.inputTitle) dom.inputTitle.textContent = blockHeaderTitles[selectedToolKey];\n      \n      \/\/ Toggle Navigation Buttons classes State\n      dom.tabs.forEach(tabElement => {\n        if (tabElement.getAttribute(\"data-tool\") === selectedToolKey) {\n          tabElement.classList.add(\"seotools-active\");\n        } else {\n          tabElement.classList.remove(\"seotools-active\");\n        }\n      });\n\n      \/\/ Show\/Hide Panel Container elements cleanly via looping structure keys\n      Object.keys(dom.panels).forEach(panelRegistryKey => {\n        const visualTargetElement = dom.panels[panelRegistryKey];\n        if (visualTargetElement) {\n          if (panelRegistryKey === selectedToolKey) {\n            visualTargetElement.classList.remove(\"seotools-hidden\");\n          } else {\n            visualTargetElement.classList.add(\"seotools-hidden\");\n          }\n        }\n      });\n      \n      \/\/ Auto-trigger data formatting outputs natively upon interface focus\n      if (selectedToolKey === \"meta\" && dom.btnMeta) dom.btnMeta.click();\n      else if (selectedToolKey === \"density\" && dom.btnDensity) dom.btnDensity.click();\n      else if (selectedToolKey === \"sitemap\" && dom.btnSitemap) dom.btnSitemap.click();\n      else if (selectedToolKey === \"checker\" && dom.btnChecker) dom.btnChecker.click();\n    }\n\n    function calculateCharacterMetrics() {\n      if (dom.tTitleCnt && dom.mTitle) dom.tTitleCnt.textContent = `${dom.mTitle.value.length}\/60`;\n      if (dom.tDescCnt && dom.mDesc) dom.tDescCnt.textContent = `${dom.mDesc.value.length}\/160`;\n    }\n\n    if (dom.mTitle) dom.mTitle.addEventListener(\"input\", calculateCharacterMetrics);\n    if (dom.mDesc) dom.mDesc.addEventListener(\"input\", calculateCharacterMetrics);\n\n    \/\/ ACTION RUNTIME MODULE 1: COMPILING HEAD METADATA\n    if (dom.btnMeta) {\n      dom.btnMeta.addEventListener(\"click\", () => {\n        const titleVal = dom.mTitle ? dom.mTitle.value.trim() : \"\";\n        const descVal = dom.mDesc ? dom.mDesc.value.trim() : \"\";\n        const robotsVal = dom.mRobots ? dom.mRobots.value.trim() : \"\";\n\n        let generatedTagsStr = \"\";\n        if (titleVal) generatedTagsStr += `<title>${escapeHtml(titleVal)}<\/title>\\n`;\n        if (descVal) generatedTagsStr += `<meta name=\"description\" content=\"${escapeHtml(descVal)}\">\\n`;\n        if (robotsVal) generatedTagsStr += `<meta name=\"robots\" content=\"${escapeHtml(robotsVal)}\">\\n`;\n        \n        generatedTagsStr += `\\n\\n`;\n        generatedTagsStr += `<meta property=\"og:type\" content=\"website\">\\n`;\n        if (titleVal) generatedTagsStr += `<meta property=\"og:title\" content=\"${escapeHtml(titleVal)}\">\\n`;\n        if (descVal) generatedTagsStr += `<meta property=\"og:description\" content=\"${escapeHtml(descVal)}\">\\n`;\n\n        if (dom.defaultOutput) dom.defaultOutput.classList.remove(\"seotools-hidden\");\n        if (dom.alternativeOutput) dom.alternativeOutput.classList.add(\"seotools-hidden\");\n        if (dom.codeOutput) dom.codeOutput.value = generatedTagsStr.trim();\n      });\n    }\n\n    \/\/ ACTION RUNTIME MODULE 2: EVALUATING DATA FREQUENCY METRICS\n    if (dom.btnDensity) {\n      dom.btnDensity.addEventListener(\"click\", () => {\n        const cleanContentText = dom.dText ? dom.dText.value.trim().toLowerCase() : \"\";\n        if (!cleanContentText) {\n          if (dom.defaultOutput) dom.defaultOutput.classList.add(\"seotools-hidden\");\n          if (dom.alternativeOutput) {\n            dom.alternativeOutput.classList.remove(\"seotools-hidden\");\n            dom.alternativeOutput.innerHTML = `<p style=\"color:#ef4444; font-size:0.9rem; font-weight:600;\">Please insert content copy strings down inside the analyzer framework area.<\/p>`;\n          }\n          return;\n        }\n\n        const matchesList = cleanContentText.match(\/\\b[a-z]{3,}\\b\/g) || [];\n        const absoluteWordsLength = matchesList.length;\n        const registryMap = {};\n        const commonFilterStopWords = new Set([\"the\", \"and\", \"our\", \"for\", \"with\", \"this\", \"that\", \"you\", \"your\", \"are\", \"all\", \"can\", \"out\", \"from\", \"has\", \"was\", \"but\", \"not\"]);\n\n        matchesList.forEach(wordKey => {\n          if (!commonFilterStopWords.has(wordKey)) {\n            registryMap[wordKey] = (registryMap[wordKey] || 0) + 1;\n          }\n        });\n\n        const collectionMatrix = Object.entries(registryMap)\n          .sort((alpha, beta) => beta[1] - alpha[1])\n          .slice(0, 10);\n\n        if (dom.defaultOutput) dom.defaultOutput.classList.add(\"seotools-hidden\");\n        if (dom.alternativeOutput) dom.alternativeOutput.classList.remove(\"seotools-hidden\");\n        \n        let tabularResultsHtml = `<h3 class=\"seotools-alt-title\">Top Keyword Density Frequencies<\/h3>`;\n        if (collectionMatrix.length === 0) {\n          tabularResultsHtml += `<p style=\"color:#64748b; font-size:0.85rem;\">No actionable keyword properties discovered.<\/p>`;\n        } else {\n          tabularResultsHtml += `<div class=\"seotools-table-wrapper\">\n            <table class=\"seotools-table\">\n              <thead><tr><th>Keyword Token<\/th><th>Occurrences<\/th><th>Density Rate<\/th><\/tr><\/thead>\n              <tbody>`;\n          collectionMatrix.forEach(([word, metricsCount]) => {\n            const compositePercentRate = absoluteWordsLength > 0 ? ((metricsCount \/ absoluteWordsLength) * 100).toFixed(2) : \"0.00\";\n            tabularResultsHtml += `<tr><td><strong>${escapeHtml(word)}<\/strong><\/td><td>${metricsCount} times<\/td><td><span class=\"seotools-badge seotools-badge-pass\" style=\"background:#e0f2fe; color:#0369a1;\">${compositePercentRate}%<\/span><\/td><\/tr>`;\n          });\n          tabularResultsHtml += `<\/tbody><\/table><\/div>`;\n        }\n        if (dom.alternativeOutput) dom.alternativeOutput.innerHTML = tabularResultsHtml;\n      });\n    }\n\n    \/\/ ACTION RUNTIME MODULE 3: COMPILING DOMAIN STRUCTURES INTO SITEMAPS\n    if (dom.btnSitemap) {\n      dom.btnSitemap.addEventListener(\"click\", () => {\n        let domainBaseUrl = dom.sRoot ? dom.sRoot.value.trim() : \"https:\/\/example.com\";\n        if (domainBaseUrl.endsWith(\"\/\")) domainBaseUrl = domainBaseUrl.slice(0, -1);\n        \n        const linesCollection = dom.sUrls ? dom.sUrls.value.split(\"\\n\") : [];\n        const trackingTimestampDate = new Date().toISOString().split(\"T\")[0];\n\n        let xmlSitemapOutputString = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\">\\n`;\n        \n        linesCollection.forEach(rawRow => {\n          let managedPathSlug = rawRow.trim();\n          if (!managedPathSlug) return;\n          if (!managedPathSlug.startsWith(\"\/\")) managedPathSlug = \"\/\" + managedPathSlug;\n          \n          xmlSitemapOutputString += `  <url>\\n    <loc>${escapeHtml(domainBaseUrl + managedPathSlug)}<\/loc>\\n    <lastmod>${trackingTimestampDate}<\/lastmod>\\n    <priority>${managedPathSlug === \"\/\" ? \"1.0\" : \"0.8\"}<\/priority>\\n  <\/url>\\n`;\n        });\n        \n        xmlSitemapOutputString += `<\/urlset>`;\n        if (dom.defaultOutput) dom.defaultOutput.classList.remove(\"seotools-hidden\");\n        if (dom.alternativeOutput) dom.alternativeOutput.classList.add(\"seotools-hidden\");\n        if (dom.codeOutput) dom.codeOutput.value = xmlSitemapOutputString;\n      });\n    }\n\n    \/\/ ACTION RUNTIME MODULE 4: REAL-TIME ON-PAGE ATTRIBUTES AUDIT LOG\n    if (dom.btnChecker) {\n      dom.btnChecker.addEventListener(\"click\", () => {\n        const structuralSourceInputHtml = dom.cHtml ? dom.cHtml.value.trim() : \"\";\n        if (!structuralSourceInputHtml) {\n          if (dom.defaultOutput) dom.defaultOutput.classList.add(\"seotools-hidden\");\n          if (dom.alternativeOutput) {\n            dom.alternativeOutput.classList.remove(\"seotools-hidden\");\n            dom.alternativeOutput.innerHTML = `<p style=\"color:#ef4444; font-size:0.9rem; font-weight:600;\">Please submit raw element structural markup strings.<\/p>`;\n          }\n          return;\n        }\n\n        const structuralDOMParser = new DOMParser();\n        const virtualDocumentNode = structuralDOMParser.parseFromString(structuralSourceInputHtml, \"text\/html\");\n        const evaluationReportsCollection = [];\n\n        \/\/ Analysis Phase A: Semantic DOM Page Title Element\n        const targetingTitleNode = virtualDocumentNode.querySelector(\"title\");\n        if (!targetingTitleNode) {\n          evaluationReportsCollection.push({ status: \"fail\", title: \"Missing <title> Element Node\", desc: \"No core document header structure block discovered.\" });\n        } else {\n          const metricsTitleLength = targetingTitleNode.textContent.length;\n          if (metricsTitleLength > 60) evaluationReportsCollection.push({ status: \"warn\", title: `Extremely Long Title Mapping (${metricsTitleLength} chars)`, desc: \"Exceeds standard 60-character viewport structural thresholds.\" });\n          else if (metricsTitleLength < 15) evaluationReportsCollection.push({ status: \"warn\", title: `Deficient Title Anchor (${metricsTitleLength} chars)`, desc: \"Short structural value restricts ranking value properties.\" });\n          else evaluationReportsCollection.push({ status: \"pass\", title: \"Optimized Layout Title Elements\", desc: `Validated title structure spans ${metricsTitleLength} parameters cleanly.` });\n        }\n\n        \/\/ Analysis Phase B: Page Snippet Description Attributes\n        const targetingDescNode = virtualDocumentNode.querySelector('meta[name=\"description\"]');\n        if (!targetingDescNode) {\n          evaluationReportsCollection.push({ status: \"fail\", title: \"Missing Meta Description Attributes\", desc: \"Snippet descriptions must be configured to capture conversions.\" });\n        } else {\n          const internalDescStringLength = targetingDescNode.getAttribute(\"content\") ? targetingDescNode.getAttribute(\"content\").length : 0;\n          if (internalDescStringLength > 160) evaluationReportsCollection.push({ status: \"warn\", title: `Over-Extended Snippet Description (${internalDescStringLength} chars)`, desc: \"Exceeds typical 160 browser indexing display layouts.\" });\n          else if (internalDescStringLength === 0) evaluationReportsCollection.push({ status: \"fail\", title: \"Meta Content Value Array Empty\", desc: \"Description elements are initialized but lack target structural value content.\" });\n          else evaluationReportsCollection.push({ status: \"pass\", title: \"Validated Description Metadata Setup\", desc: `Snippet definitions wrap ${internalDescStringLength} characters securely.` });\n        }\n\n        \/\/ Analysis Phase C: Logical Structural Heading Layout Trees\n        const collectionOfH1Elements = virtualDocumentNode.querySelectorAll(\"h1\");\n        if (collectionOfH1Elements.length === 0) {\n          evaluationReportsCollection.push({ status: \"fail\", title: \"Deficit of Core H1 Structural Enclosures\", desc: \"Documents require an isolated primary viewport heading line.\" });\n        } else if (collectionOfH1Elements.length > 1) {\n          evaluationReportsCollection.push({ status: \"warn\", title: `Plural H1 Heading Hooks Found (${collectionOfH1Elements.length})`, desc: \"Multiple main headers split ranking context tracking paths.\" });\n        } else {\n          evaluationReportsCollection.push({ status: \"pass\", title: \"Symmetric H1 Header Anchor Node Found\", desc: \"Semantic structural heading map configurations verified.\" });\n        }\n\n        \/\/ Analysis Phase D: Graphic Asset Container Access Audits\n        const parsedImagesCollection = virtualDocumentNode.querySelectorAll(\"img\");\n        let brokenAltContainersTracker = 0;\n        parsedImagesCollection.forEach(imageElementNode => {\n          if (!imageElementNode.hasAttribute(\"alt\") || imageElementNode.getAttribute(\"alt\").trim() === \"\") {\n            brokenAltContainersTracker++;\n          }\n        });\n\n        if (parsedImagesCollection.length === 0) {\n          evaluationReportsCollection.push({ status: \"pass\", title: \"No Embedded Graphic Containers Discovered\", desc: \"Skipped graphic asset checks safely.\" });\n        } else if (brokenAltContainersTracker > 0) {\n          evaluationReportsCollection.push({ status: \"warn\", title: \"Deficient Alternative Asset Descriptions\", desc: `${brokenAltContainersTracker} out of ${parsedImagesCollection.length} visual asset layouts lack fallback alternative parameters.` });\n        } else {\n          evaluationReportsCollection.push({ status: \"pass\", title: \"Universal Asset Alternate Attributes Configured\", desc: \"All system visual properties contain alternate descriptors.\" });\n        }\n\n        if (dom.defaultOutput) dom.defaultOutput.classList.add(\"seotools-hidden\");\n        if (dom.alternativeOutput) dom.alternativeOutput.classList.remove(\"seotools-hidden\");\n\n        let generatedAuditCardsHtmlBlock = `<h3 class=\"seotools-alt-title\">Structural On-Page Audit Log<\/h3><div class=\"seotools-checker-list\">`;\n        evaluationReportsCollection.forEach(reportItem => {\n          generatedAuditCardsHtmlBlock += `\n            <div class=\"seotools-check-item\">\n              <span class=\"seotools-badge seotools-badge-${reportItem.status}\">${reportItem.status}<\/span>\n              <div>\n                <strong style=\"display:block; font-size:0.9rem; color:#0f172a; margin-bottom:0.15rem;\">${escapeHtml(reportItem.title)}<\/strong>\n                <p style=\"margin:0; font-size:0.8rem; color:#64748b;\">${escapeHtml(reportItem.desc)}<\/p>\n              <\/div>\n            <\/div>`;\n        });\n        generatedAuditCardsHtmlBlock += `<\/div>`;\n        if (dom.alternativeOutput) dom.alternativeOutput.innerHTML = generatedAuditCardsHtmlBlock;\n      });\n    }\n\n    \/\/ CLIPBOARD SYSTEM ACCESS MANAGER BRIDGE\n    if (dom.copyBtn && dom.codeOutput) {\n      dom.copyBtn.addEventListener(\"click\", () => {\n        if (!dom.codeOutput.value) return;\n        navigator.clipboard.writeText(dom.codeOutput.value).then(() => {\n          const originalButtonTextCache = dom.copyBtn.textContent;\n          dom.copyBtn.textContent = \"Copied Successfully!\";\n          dom.copyBtn.style.backgroundColor = \"#0d9488\";\n          setTimeout(() => {\n            dom.copyBtn.textContent = originalButtonTextCache;\n            dom.copyBtn.style.backgroundColor = \"\";\n          }, 1500);\n        });\n      });\n    }\n\n    function escapeHtml(stringTarget) {\n      if (!stringTarget) return \"\";\n      return String(stringTarget).replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\").replace(\/\"\/g, \"&quot;\").replace(\/'\/g, \"&#039;\");\n    }\n\n    \/\/ Dynamic Navigation Click Processing Engine\n    dom.tabs.forEach(individualTabButton => {\n      individualTabButton.addEventListener(\"click\", (clickEventInstance) => {\n        clickEventInstance.preventDefault();\n        const targetedToolModuleIdentifier = individualTabButton.getAttribute(\"data-tool\");\n        shiftActiveWorkspaceTab(targetedToolModuleIdentifier);\n      });\n    });\n\n    \/\/ Execute Framework Initializer Steps\n    calculateCharacterMetrics();\n    shiftActiveWorkspaceTab(\"meta\");\n\n  })();\n  <\/script>\n<\/div>\n\n\n\n<div class=\"cse-suite-wrapper\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&#038;family=Space+Grotesk:wght@600;700&#038;display=swap\" rel=\"stylesheet\">\n\n    <style>\n        \/* Scoped Custom Properties *\/\n        .cse-suite-wrapper {\n            --cse-bg-main: #f8fafc;\n            --cse-bg-card: #ffffff;\n            --cse-bg-input: #f1f5f9;\n            --cse-accent-primary: #4f46e5;\n            --cse-accent-hover: #4338ca;\n            --cse-accent-success: #10b981;\n            --cse-accent-warning: #f59e0b;\n            --cse-accent-danger: #ef4444;\n            --cse-text-main: #0f172a;\n            --cse-text-muted: #64748b;\n            --cse-border-color: #e2e8f0;\n            --cse-transition-smooth: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n            \n            \/* Isolated base styles acting like a mini body container *\/\n            box-sizing: border-box;\n            font-family: 'Plus Jakarta Sans', system-ui, sans-serif;\n            background-color: var(--cse-bg-main); \n            color: var(--cse-text-main); \n            display: flex; \n            justify-content: center; \n            align-items: center; \n            padding: 1rem; \n            width: 100%;\n        }\n\n        \/* Scoped elements reset to avoid global page impacts *\/\n        .cse-suite-wrapper *, \n        .cse-suite-wrapper *::before, \n        .cse-suite-wrapper *::after { \n            box-sizing: border-box; \n            margin: 0; \n            padding: 0; \n            font-family: 'Plus Jakarta Sans', system-ui, sans-serif; \n        }\n        \n        .cse-suite-wrapper .container { \n            width: 100%; \n            max-width: 1200px; \n            background-color: var(--cse-bg-card); \n            border: 1px solid var(--cse-border-color); \n            border-radius: 24px; \n            padding: 1.5rem; \n            box-shadow: 0 10px 30px -10px rgba(15, 23, 42, 0.04); \n        }\n        \n        .cse-suite-wrapper .app-header { text-align: center; border-bottom: 1px solid var(--cse-border-color); padding-bottom: 20px; margin-bottom: 24px; }\n        .cse-suite-wrapper .app-header h1 { font-family: 'Space Grotesk', sans-serif; font-size: 1.8rem; font-weight: 700; background: linear-gradient(135deg, #4f46e5, #4338ca); -webkit-background-clip: text; -webkit-text-fill-color: transparent; line-height: 1.2; }\n        .cse-suite-wrapper .app-header p { color: var(--cse-text-muted); font-size: 0.9rem; margin-top: 6px; padding: 0 10px; }\n\n        .cse-suite-wrapper .workspace-grid { display: grid; grid-template-columns: 1fr; gap: 24px; width: 100%; }\n        .cse-suite-wrapper .form-area { display: flex; flex-direction: column; gap: 24px; }\n        .cse-suite-wrapper .input-group { display: flex; flex-direction: column; gap: 8px; }\n        .cse-suite-wrapper .tool-divider { border-top: 1px dashed var(--cse-border-color); padding-top: 24px; }\n        .cse-suite-wrapper .section-title { font-size: 0.85rem; text-transform: uppercase; font-weight: 700; color: var(--cse-accent-primary); letter-spacing: 0.7px; margin-bottom: 4px; display: flex; align-items: center; gap: 6px; }\n        \n        .cse-suite-wrapper label { font-weight: 700; font-size: 0.8rem; color: var(--cse-text-main); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; display: block; }\n        \n        .cse-suite-wrapper textarea, \n        .cse-suite-wrapper input, \n        .cse-suite-wrapper select { \n            width: 100%; padding: 12px 16px; background-color: var(--cse-bg-input); border: 2px solid transparent; border-radius: 12px; color: var(--cse-text-main); font-size: 100%; font-weight: 500; outline: none; transition: var(--cse-transition-smooth); \n        }\n        .cse-suite-wrapper textarea { font-family: inherit; resize: vertical; min-height: 100px; }\n        .cse-suite-wrapper textarea:focus, \n        .cse-suite-wrapper input:focus, \n        .cse-suite-wrapper select:focus { border-color: var(--cse-accent-primary); background-color: #ffffff; box-shadow: 0 0 0 4px rgba(79, 70, 229, 0.1); }\n\n        .cse-suite-wrapper .sitemap-row { display: flex; flex-direction: column; gap: 10px; margin-top: 8px; }\n        .cse-suite-wrapper .btn { padding: 12px 18px; border-radius: 12px; font-weight: 600; border: none; cursor: pointer; transition: var(--cse-transition-smooth); font-size: 0.9rem; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }\n        .cse-suite-wrapper .btn-primary { background-color: var(--cse-accent-primary); color: white; }\n        .cse-suite-wrapper .btn-primary:hover { background-color: var(--cse-accent-hover); }\n        .cse-suite-wrapper .btn-secondary { background-color: var(--cse-border-color); color: var(--cse-text-main); }\n        .cse-suite-wrapper .btn-secondary:hover { background-color: #cbd5e1; }\n\n        .cse-suite-wrapper .results-area { background-color: #f8fafc; border: 1px solid var(--cse-border-color); border-radius: 20px; padding: 20px; display: flex; flex-direction: column; gap: 24px; height: fit-content; }\n        .cse-suite-wrapper .result-block { border-bottom: 1px solid var(--cse-border-color); padding-bottom: 20px; }\n        .cse-suite-wrapper .result-block:last-child { border-bottom: none; padding-bottom: 0; }\n        .cse-suite-wrapper .result-title { font-size: 0.8rem; font-weight: 700; text-transform: uppercase; color: var(--cse-text-muted); margin-bottom: 12px; letter-spacing: 0.5px; }\n\n        .cse-suite-wrapper .score-row { display: flex; align-items: center; gap: 16px; }\n        .cse-suite-wrapper .score-badge { font-family: 'Space Grotesk', sans-serif; font-size: 1.8rem; font-weight: 700; color: white; background: var(--cse-accent-warning); padding: 10px 16px; border-radius: 14px; min-width: 80px; text-align: center; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }\n        .cse-suite-wrapper .score-status { display: flex; flex-direction: column; }\n        .cse-suite-wrapper .score-text { font-weight: 700; font-size: 1rem; }\n        \n        .cse-suite-wrapper .seo-issues-list { display: flex; flex-direction: column; gap: 8px; max-height: 200px; overflow-y: auto; font-size: 0.88rem; }\n        .cse-suite-wrapper .issue-item { display: flex; gap: 8px; padding: 10px 12px; border-radius: 8px; background: #ffffff; border: 1px solid var(--cse-border-color); border-left: 4px solid transparent; }\n        .cse-suite-wrapper .issue-pass { border-left-color: var(--cse-accent-success); }\n        .cse-suite-wrapper .issue-fail { border-left-color: var(--cse-accent-danger); }\n        .cse-suite-wrapper .issue-warn { border-left-color: var(--cse-accent-warning); }\n\n        .cse-suite-wrapper .table-container { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: 8px; border: 1px solid var(--cse-border-color); }\n        .cse-suite-wrapper .density-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; background: white; }\n        .cse-suite-wrapper .density-table th, \n        .cse-suite-wrapper .density-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--cse-border-color); white-space: nowrap; }\n        .cse-suite-wrapper .density-table th { background-color: #f1f5f9; font-weight: 700; font-size: 0.75rem; text-transform: uppercase; color: var(--cse-text-muted); }\n        \n        .cse-suite-wrapper .code-box { font-family: monospace; font-size: 0.8rem; background: #0f172a; color: #f8fafc; padding: 14px; border-radius: 10px; max-height: 180px; overflow-y: auto; white-space: pre; word-wrap: break-word; }\n\n        \/* Scoped Media Breakpoints *\/\n        @media (min-width: 768px) {\n            .cse-suite-wrapper { padding: 40px 20px; }\n            .cse-suite-wrapper .container { padding: 35px; }\n            .cse-suite-wrapper .app-header h1 { font-size: 2.2rem; }\n            .cse-suite-wrapper .app-header p { font-size: 0.95rem; }\n            .cse-suite-wrapper .sitemap-row { flex-direction: row; }\n            .cse-suite-wrapper .sitemap-row input { flex: 1; }\n            .cse-suite-wrapper .results-area { padding: 28px; }\n        }\n\n        @media (min-width: 992px) {\n            .cse-suite-wrapper .workspace-grid { grid-template-columns: 1fr 440px; gap: 35px; }\n            .cse-suite-wrapper .results-area { position: sticky; top: 20px; }\n        }\n    <\/style>\n\n    <div class=\"container\">\n        <header class=\"app-header\">\n            <h1>CoreSEO Engine<\/h1>\n            <p>On-Page Audit Sandbox, Density Processor &amp; Sitemap Matrix Generator<\/p>\n        <\/header>\n\n        <main class=\"workspace-grid\">\n            <section class=\"form-area\">\n                \n                <div class=\"input-group\">\n                    <div class=\"section-title\">1. Header Metadata &amp; Title Configuration<\/div>\n                    <div style=\"display: grid; grid-template-columns: 1fr; gap: 12px;\">\n                        <div>\n                            <label>Meta SEO Title Tag<\/label>\n                            <input type=\"text\" id=\"seoTitleInput\" placeholder=\"e.g., CoreSEO Studio | Advanced Search Optimization Tool\" value=\"CoreSEO Studio | Advanced Engine Suite\">\n                        <\/div>\n                        <div>\n                            <label>Meta Description Content<\/label>\n                            <textarea id=\"seoDescInput\" style=\"min-height: 60px;\" placeholder=\"Write a short snippet to pitch the site in search result listings...\">Boost your digital index visibility instantly with CoreSEO Studio. Discover keyword performance mechanics and generate fully schema-compliant sitemaps dynamically.<\/textarea>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"input-group tool-divider\">\n                    <div class=\"section-title\">2. Main Page Content Structure<\/div>\n                    <label>On-Page Article Text \/ Body Copy<\/label>\n                    <textarea id=\"seoBodyInput\" style=\"height: 160px;\" placeholder=\"Paste text here to compute keyword concentrations and extract document structural patterns...\">Welcome to the advanced CoreSEO studio environment. This specialized engineering suite processes targeted meta content, evaluates raw optimization compliance, and scales your search visibility. CoreSEO uses highly performant keyword data configurations to streamline indexing directly inside your web framework. Optimize metadata and eliminate standard index errors effortlessly.<\/textarea>\n                <\/div>\n\n                <div class=\"input-group tool-divider\">\n                    <div class=\"section-title\">3. XML Sitemap Dynamic Generator<\/div>\n                    <label>Target Domain Context<\/label>\n                    <input type=\"text\" id=\"sitemapDomain\" value=\"https:\/\/example.com\" placeholder=\"https:\/\/yourwebsite.com\">\n                    \n                    <label style=\"margin-top: 8px;\">Target Route Slugs (Comma Separated)<\/label>\n                    <input type=\"text\" id=\"sitemapRoutes\" value=\"\/, \/about, \/services, \/tools\/seo\" placeholder=\"\/, \/about, \/blog\/post-1\">\n                <\/div>\n\n            <\/section>\n\n            <section class=\"results-area\">\n                \n                <div class=\"result-block\">\n                    <div class=\"result-title\">Systemic Optimization Health Score<\/div>\n                    <div class=\"score-row\">\n                        <div class=\"score-badge\" id=\"seoScoreContainer\">0%<\/div>\n                        <div class=\"score-status\">\n                            <span class=\"score-text\" id=\"seoScoreStatusText\">Analyzing Corpus&#8230;<\/span>\n                            <span style=\"font-size: 0.8rem; color: #64748b;\" id=\"seoScoreBreakdown\">0 metrics checked<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"result-block\">\n                    <div class=\"result-title\">SEO Audit Matrix Diagnostics<\/div>\n                    <div class=\"seo-issues-list\" id=\"seoAuditContainer\"><\/div>\n                <\/div>\n\n                <div class=\"result-block\">\n                    <div class=\"result-title\">Top Targeted Keyword Density Array<\/div>\n                    <div class=\"table-container\">\n                        <table class=\"density-table\">\n                            <thead>\n                                <tr>\n                                    <th>Token Phrase<\/th>\n                                    <th>Hits<\/th>\n                                    <th>Density<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody id=\"seoDensityTableBody\"><\/tbody>\n                        <\/table>\n                    <\/div>\n                <\/div>\n\n                <div class=\"result-block\">\n                    <div class=\"result-title\">Generated XML Sitemap Stream<\/div>\n                    <div class=\"code-box\" id=\"sitemapOutputCode\">Loading XML stream definitions&#8230;<\/div>\n                <\/div>\n\n            <\/section>\n        <\/main>\n    <\/div>\n\n    <script>\n        (function() {\n            function runSeoEngine() {\n                const wrapper = document.querySelector('.cse-suite-wrapper');\n                if (!wrapper) return;\n\n                \/\/ Safely query inner scoped element references\n                const titleValue = wrapper.querySelector('#seoTitleInput').value.trim();\n                const descValue = wrapper.querySelector('#seoDescInput').value.trim();\n                const bodyValue = wrapper.querySelector('#seoBodyInput').value.trim();\n                const domainValue = wrapper.querySelector('#sitemapDomain').value.trim().replace(\/\\\/$\/, \"\");\n                const routesValue = wrapper.querySelector('#sitemapRoutes').value.trim();\n\n                let auditChecks = [];\n                let metricsPassed = 0;\n\n                \/\/ Title Tag Tests\n                if (titleValue.length === 0) {\n                    auditChecks.push({ status: 'fail', text: 'Critical Error: Missing Document Title tag structure.' });\n                } else if (titleValue.length < 30 || titleValue.length > 60) {\n                    auditChecks.push({ status: 'warn', text: `Suboptimal Title Length (${titleValue.length} chars). Aim for 30\u201360 characters for clean snippet presentation.` });\n                    metricsPassed += 0.5;\n                } else {\n                    auditChecks.push({ status: 'pass', text: `Excellent Title Tag Length (${titleValue.length} characters).` });\n                    metricsPassed++;\n                }\n\n                \/\/ Description Tag Tests\n                if (descValue.length === 0) {\n                    auditChecks.push({ status: 'fail', text: 'Critical Error: Empty Meta Description. Snippet will fall back to arbitrary crawl fragments.' });\n                } else if (descValue.length < 110 || descValue.length > 160) {\n                    auditChecks.push({ status: 'warn', text: `Inefficient Snippet Length (${descValue.length} chars). Standard index engines truncate at ~160.` });\n                    metricsPassed += 0.5;\n                } else {\n                    auditChecks.push({ status: 'pass', text: `Optimal Meta Description Length (${descValue.length} characters).` });\n                    metricsPassed++;\n                }\n\n                \/\/ Body Context Optimization Tests\n                const tokenizedWordsArray = bodyValue.toLowerCase().match(\/\\b[a-zA-Z0-9\\-\\']+\\b\/g) || [];\n                const absoluteWordCount = tokenizedWordsArray.length;\n\n                if (absoluteWordCount === 0) {\n                    auditChecks.push({ status: 'fail', text: 'Structural Block Failure: Document Contains zero detectable textual body assets.' });\n                } else if (absoluteWordCount < 100) {\n                    auditChecks.push({ status: 'warn', text: `Thin Content Alert (${absoluteWordCount} words). Add semantic richness to rank efficiently against deeper indexing.` });\n                    metricsPassed += 0.3;\n                } else {\n                    auditChecks.push({ status: 'pass', text: `Adequate foundational document block word count (${absoluteWordCount} words).` });\n                    metricsPassed++;\n                }\n\n                \/\/ Keyword Density Array Arrays\n                let dictionaryCounts = {};\n                const stopWordsCollection = new Set(['the', 'a', 'an', 'and', 'or', 'but', 'is', 'to', 'in', 'at', 'of', 'for', 'with', 'on', 'this', 'that', 'your', 'welcome', 'you']);\n\n                tokenizedWordsArray.forEach(word => {\n                    if (word.length > 2 && !stopWordsCollection.has(word)) {\n                        dictionaryCounts[word] = (dictionaryCounts[word] || 0) + 1;\n                    }\n                });\n\n                let keywordDensitySorted = [];\n                for (let wordKey in dictionaryCounts) {\n                    let frequencyRatio = ((dictionaryCounts[wordKey] \/ absoluteWordCount) * 100).toFixed(1);\n                    keywordDensitySorted.push({ word: wordKey, count: dictionaryCounts[wordKey], percentage: frequencyRatio });\n                }\n                keywordDensitySorted.sort((alpha, beta) => beta.count - alpha.count);\n\n                if (keywordDensitySorted.length > 0 && keywordDensitySorted[0].percentage > 4.5) {\n                    auditChecks.push({ status: 'warn', text: `Keyword Stuffing Warning: Word \"${keywordDensitySorted[0].word}\" hits a density of ${keywordDensitySorted[0].percentage}%. Keep focus keywords under 4%.` });\n                } else if (keywordDensitySorted.length > 0) {\n                    auditChecks.push({ status: 'pass', text: `Safe keyword concentration spectrum. No excessive packing signatures observed.` });\n                    metricsPassed++;\n                }\n\n                \/\/ Render Audit Log Matrix\n                const auditListContainer = wrapper.querySelector('#seoAuditContainer');\n                auditListContainer.innerHTML = '';\n                auditChecks.forEach(check => {\n                    const element = document.createElement('div');\n                    element.className = `issue-item issue-${check.status}`;\n                    let symbol = check.status === 'pass' ? '\u2713' : check.status === 'fail' ? '\u2717' : '\u26a0';\n                    element.innerHTML = `<strong>${symbol}<\/strong> <span>${check.text}<\/span>`;\n                    auditListContainer.appendChild(element);\n                });\n\n                \/\/ Update Radial Score Indicators\n                const standardMaxTestsCount = 4;\n                const finalizedScoreMetric = Math.min(Math.round((metricsPassed \/ standardMaxTestsCount) * 100), 100);\n                \n                const scoreContainerNode = wrapper.querySelector('#seoScoreContainer');\n                scoreContainerNode.textContent = `${finalizedScoreMetric}%`;\n                \n                if (finalizedScoreMetric >= 85) {\n                    scoreContainerNode.style.background = \"var(--cse-accent-success)\";\n                    wrapper.querySelector('#seoScoreStatusText').textContent = \"Excellent Optimization\";\n                } else if (finalizedScoreMetric >= 50) {\n                    scoreContainerNode.style.background = \"var(--cse-accent-warning)\";\n                    wrapper.querySelector('#seoScoreStatusText').textContent = \"Optimizations Pending\";\n                } else {\n                    scoreContainerNode.style.background = \"var(--cse-accent-danger)\";\n                    wrapper.querySelector('#seoScoreStatusText').textContent = \"Critical SEO Deficit\";\n                }\n                wrapper.querySelector('#seoScoreBreakdown').textContent = `Passed ${metricsPassed.toFixed(1)} out of ${standardMaxTestsCount} evaluation vectors.`;\n\n                \/\/ Populate Keyword Data Table\n                const densityTableBody = wrapper.querySelector('#seoDensityTableBody');\n                densityTableBody.innerHTML = '';\n                const maximumDisplayTokens = keywordDensitySorted.slice(0, 5);\n\n                if (maximumDisplayTokens.length === 0) {\n                    densityTableBody.innerHTML = `<tr><td colspan=\"3\" style=\"text-align:center; color:var(--cse-text-muted);\">No analytical keywords processed.<\/td><\/tr>`;\n                } else {\n                    maximumDisplayTokens.forEach(item => {\n                        const row = document.createElement('tr');\n                        row.innerHTML = `<td><strong>${item.word}<\/strong><\/td><td>${item.count}<\/td><td><span style=\"background:#e0f2fe; color:#0369a1; padding:2px 6px; border-radius:4px; font-weight:700;\">${item.percentage}%<\/span><\/td>`;\n                        densityTableBody.appendChild(row);\n                    });\n                }\n\n                \/\/ Sitemap pipeline engine setup\n                let xmlMarkupBuffer = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\">\\n`;\n                const targetedRoutesArray = routesValue.split(',').map(route => route.trim()).filter(route => route.length > 0);\n                const simplifiedTimestampISO = new Date().toISOString().split('T')[0];\n\n                targetedRoutesArray.forEach(route => {\n                    let cleanRoute = route.startsWith('\/') ? route : '\/' + route;\n                    let completelyFormedLocationUrl = escapeXmlEntities(domainValue + cleanRoute);\n                    \n                    xmlMarkupBuffer += `  <url>\\n`;\n                    xmlMarkupBuffer += `    <loc>${completelyFormedLocationUrl}<\/loc>\\n`;\n                    xmlMarkupBuffer += `    <lastmod>${simplifiedTimestampISO}<\/lastmod>\\n`;\n                    xmlMarkupBuffer += `    <changefreq>weekly<\/changefreq>\\n`;\n                    xmlMarkupBuffer += `    <priority>${cleanRoute === '\/' ? '1.0' : '0.8'}<\/priority>\\n`;\n                    xmlMarkupBuffer += `  <\/url>\\n`;\n                });\n                xmlMarkupBuffer += `<\/urlset>`;\n\n                wrapper.querySelector('#sitemapOutputCode').textContent = xmlMarkupBuffer;\n            }\n\n            function escapeXmlEntities(targetString) {\n                return targetString\n                    .replace(\/&\/g, '&amp;')\n                    .replace(\/<\/g, '&lt;')\n                    .replace(\/>\/g, '&gt;')\n                    .replace(\/\"\/g, '&quot;')\n                    .replace(\/'\/g, '&apos;');\n            }\n\n            \/\/ Wire safe independent inside event processes\n            document.addEventListener('DOMContentLoaded', function() {\n                const wrapper = document.querySelector('.cse-suite-wrapper');\n                if(wrapper) {\n                    const inputs = wrapper.querySelectorAll('#seoTitleInput, #seoDescInput, #seoBodyInput, #sitemapDomain, #sitemapRoutes');\n                    inputs.forEach(input => {\n                        input.addEventListener('input', runSeoEngine);\n                    });\n                    runSeoEngine();\n                }\n            });\n        })();\n    <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Meta Tags, Keyword Density, Sitemap Generator and SEO Checker tools. Local SEO Control Suite Evaluate on-page structures, run content distributions, and audit production markup live. Meta Tags Keyword Density Sitemap Generator SEO Checker Configure Metadata Settings Site Title Meta Element 0\/60 Meta Description Element 0\/160 Visit our local dental clinic for comprehensive family dentistry, emergency [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-68","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":13,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/68\/revisions"}],"predecessor-version":[{"id":762,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/68\/revisions\/762"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}