{"id":7930,"date":"2026-01-01T19:35:55","date_gmt":"2026-01-01T18:35:55","guid":{"rendered":"https:\/\/code78.de\/blog\/?page_id=7930"},"modified":"2026-01-17T10:06:48","modified_gmt":"2026-01-17T09:06:48","slug":"e-e-a-t-audit-tool","status":"publish","type":"page","link":"https:\/\/code78.de\/blog\/e-e-a-t-audit-tool\/","title":{"rendered":"E\u2011E\u2011A\u2011T Audit Tool"},"content":{"rendered":"\n<main class=\"eeat-audit\" aria-labelledby=\"eeat-title\">\n    <header class=\"eeat-audit__header\">\n      <p>\n         Pr\u00fcft eure Seite anhand von \u201eWho, How, Why\u201c und E\u2011E\u2011A\u2011T\u2011Signalen.<br \/>\n      <a href=\"https:\/\/developers.google.com\/search\/docs\/fundamentals\/creating-helpful-content\" target=\"_blank\" rel=\"noopener\">\n        Google: Helpful, reliable, people\u2011first content\n      <\/a>.\n      <\/p>\n    <\/header>\n\n    <form class=\"eeat-audit__meta\" id=\"eeatMeta\">\n      <div class=\"field\">\n        <label for=\"auditUrl\">URL (optional)<\/label>\n        <input id=\"auditUrl\" name=\"auditUrl\" type=\"url\" placeholder=\"https:\/\/example.de\/\u2026\" \/>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"projectName\">Projekt<\/label>\n        <input id=\"projectName\" name=\"projectName\" type=\"text\" placeholder=\"z. B. code78.de\" \/>\n      <\/div>\n\n      <div class=\"field\">\n        <label for=\"contentType\">Content\u2011Typ<\/label>\n        <select id=\"contentType\" name=\"contentType\">\n          <option value=\"blog\" selected>Blogartikel<\/option>\n          <option value=\"guide\">Guide \/ Pillar<\/option>\n          <option value=\"tool\">Tool \/ Rechner<\/option>\n          <option value=\"landing\">Landingpage<\/option>\n          <option value=\"other\">Sonstiges<\/option>\n        <\/select>\n      <\/div>\n    <\/form>\n\n    <section class=\"eeat-audit__score\" aria-label=\"Score und Aktionen\">\n      <div class=\"score\">\n        <span class=\"score__label\">Score<\/span>\n        <div>\n          <strong class=\"score__value\" id=\"scoreValue\">0<\/strong>\n          <span class=\"score__max\" id=\"scoreMax\">\/ 16<\/span>\n        <\/div>\n      <\/div>\n\n      <div>\n        <p class=\"score__diagnosis\" id=\"scoreDiagnosis\">\n          W\u00e4hlt je Check eine Bewertung \u2013 Fix\u2011Vorschl\u00e4ge erscheinen nur bei 0 oder 1 (bei 2 bleibt\u2019s clean).\n        <\/p>\n\n        <p id=\"rowStatus\" role=\"status\" aria-atomic=\"true\" class=\"visually-hidden\"><\/p>\n\n        <div class=\"score__actions\">\n          <button type=\"button\" id=\"resetAudit\">Zur\u00fccksetzen<\/button>\n          <button type=\"button\" id=\"copyAudit\">Ergebnisse kopieren<\/button>\n          <button type=\"button\" id=\"downloadCsv\">CSV downloaden<\/button>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <div class=\"eeat-table-wrap\" role=\"region\" aria-label=\"E\u2011E\u2011A\u2011T Audit Tabelle\">\n      <table class=\"eeat-audit-table\">\n<colgroup>\n  <col class=\"col-area\">\n  <col class=\"col-check\">\n  <col class=\"col-rating\">\n  <col class=\"col-fix\">\n<\/colgroup>\n        <caption>E\u2011E\u2011A\u2011T\u2011Checks. Hinweis: Den Fix nur bei Score 0\/1<\/caption>\n        <thead>\n          <tr>\n            <th scope=\"col\">Bereich<\/th>\n            <th scope=\"col\">Check<\/th>\n            <th scope=\"col\">Bewertung<\/th>\n            <th scope=\"col\">Fix\u2011Vorschlag<\/th>\n          <\/tr>\n        <\/thead>\n\n        <tbody>\n          <tr data-check-id=\"why\">\n            <th scope=\"row\" data-label=\"Bereich\">Why<\/th>\n            <td data-label=\"Check\">Warum existiert der Content prim\u00e4r: Menschen helfen oder Traffic jagen?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"why\" class=\"score-input\" aria-label=\"Bewertung Why\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 prim\u00e4r SEO\/Traffic<\/option>\n                <option value=\"1\">1 \u2013 gemischt<\/option>\n                <option value=\"2\">2 \u2013 klar people-first<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                Einleitung\/Teaser auf Nutzerproblem zuspitzen und Zielgruppe klar benennen.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"who\">\n            <th scope=\"row\" data-label=\"Bereich\">Who<\/th>\n            <td data-label=\"Check\">Ist klar ersichtlich, wer geschrieben hat (Byline + Autor*innen-Seite)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"who\" class=\"score-input\" aria-label=\"Bewertung Who\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 unklar<\/option>\n                <option value=\"1\">1 \u2013 nur Name<\/option>\n                <option value=\"2\">2 \u2013 Profil\/Proof verlinkt<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                Autor*innenbox + Link zur Profilseite + \u201eWarum ich das kann\u201c in 1\u20132 S\u00e4tzen erg\u00e4nzen.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"how\">\n            <th scope=\"row\" data-label=\"Bereich\">How<\/th>\n            <td data-label=\"Check\">Erkl\u00e4rt ihr, wie der Content entstanden ist (Test, Daten, Methode)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"how\" class=\"score-input\" aria-label=\"Bewertung How\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 nicht vorhanden<\/option>\n                <option value=\"1\">1 \u2013 kurz\/oberfl\u00e4chlich<\/option>\n                <option value=\"2\">2 \u2013 konkret + nachvollziehbar<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                \u201eSo wurde getestet\/recherchiert\u201c erg\u00e4nzen (Kriterien, Zeitraum, Setup).\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"experience\">\n            <th scope=\"row\" data-label=\"Bereich\">Experience<\/th>\n            <td data-label=\"Check\">Gibt es Belege aus erster Hand (Screenshots, Messwerte, echte Beispiele)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"experience\" class=\"score-input\" aria-label=\"Bewertung Experience\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 keine<\/option>\n                <option value=\"1\">1 \u2013 ein Beleg<\/option>\n                <option value=\"2\">2 \u2013 mehrere Belege<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                2 Artefakte erg\u00e4nzen (Screenshot\/Chart) + 1 \u201ewas nicht klappte\u201c-Lektion.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"expertise\">\n            <th scope=\"row\" data-label=\"Bereich\">Expertise<\/th>\n            <td data-label=\"Check\">Sind Aussagen belegbar (Prim\u00e4rquellen, klare Definitionen, Faktencheck)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"expertise\" class=\"score-input\" aria-label=\"Bewertung Expertise\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 kaum belegt<\/option>\n                <option value=\"1\">1 \u2013 teils belegt<\/option>\n                <option value=\"2\">2 \u2013 sauber belegt<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                3 Prim\u00e4rquellen nachr\u00fcsten + \u201eBegriff\/Definition\u201c-Box einf\u00fcgen.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"authority\">\n            <th scope=\"row\" data-label=\"Bereich\">Autorit\u00e4t<\/th>\n            <td data-label=\"Check\">Wirkt ihr bei externer Recherche als anerkannt (Erw\u00e4hnungen\/Referenzen)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"authority\" class=\"score-input\" aria-label=\"Bewertung Autorit\u00e4t\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 kaum Signale<\/option>\n                <option value=\"1\">1 \u2013 einzelne Signale<\/option>\n                <option value=\"2\">2 \u2013 starke Signale<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                1 Referenz\/Case verlinken + thematisches Cluster intern st\u00e4rker verbinden.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"trust\">\n            <th scope=\"row\" data-label=\"Bereich\">Trust<\/th>\n            <td data-label=\"Check\">Wirkt die Seite vertrauensw\u00fcrdig (Transparenz, Kennzeichnung, kein UX\u2011Trick)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"trust\" class=\"score-input\" aria-label=\"Bewertung Trust\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 problematisch<\/option>\n                <option value=\"1\">1 \u2013 okay<\/option>\n                <option value=\"2\">2 \u2013 sehr sauber<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                Affiliate\/Ads klar kennzeichnen, st\u00f6rende Elemente reduzieren, Kontakt\/Impressum leicht auffindbar machen.\n              <\/div>\n            <\/td>\n          <\/tr>\n\n          <tr data-check-id=\"freshness\">\n            <th scope=\"row\" data-label=\"Bereich\">Aktualit\u00e4t<\/th>\n            <td data-label=\"Check\">Ist Pflege sichtbar (Update-Datum, neue Beispiele, Refresh\u2011Zyklus)?<\/td>\n            <td data-label=\"Bewertung\">\n              <select name=\"freshness\" class=\"score-input\" aria-label=\"Bewertung Aktualit\u00e4t\">\n                <option value=\"\" selected>Bitte w\u00e4hlen\u2026<\/option>\n                <option value=\"0\">0 \u2013 nie<\/option>\n                <option value=\"1\">1 \u2013 selten<\/option>\n                <option value=\"2\">2 \u2013 sichtbar gepflegt<\/option>\n              <\/select>\n            <\/td>\n            <td class=\"fix-cell\" data-label=\"Fix\u2011Vorschlag\">\n              <div class=\"fix is-hidden\" aria-hidden=\"true\">\n                \u201eZuletzt aktualisiert\u201c erg\u00e4nzen + 1 Abschnitt mit neuem Beispiel refreshen.\n              <\/div>\n            <\/td>\n          <\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n\n    <aside class=\"eeat-audit__cta\">\n      <h2>Weiter rein in die Tiefe<\/h2>\n      <p>Wenn ihr\u2019s ernst meint: Hier sind die passenden Deep-Dives.<\/p>\n      <div class=\"cta-grid\">\n        <a class=\"cta-card\" href=\"\/blog\/category\/marketing\/\">\n          <h3>Marketing<\/h3>\n          <p>Mehr Proof, bessere Positionierung, h\u00f6here Conversion \u2013 ohne SEO-Theater.<\/p>\n        <\/a>\n        <a class=\"cta-card\" href=\"\/blog\/category\/kuenstliche-intelligenz-ki\/\">\n          <h3>K\u00fcnstliche Intelligenz<\/h3>\n          <p>Workflows, Qualit\u00e4tschecks und Transparenz, damit KI\u2011Content nach K\u00f6nnen klingt.<\/p>\n        <\/a>\n      <\/div>\n    <\/aside>\n  <\/main>\n\n\n\n<script>\n(function () {\n  \/\/ ===== Helpers =====\n  const $ = (sel, ctx = document) => ctx.querySelector(sel);\n  const $$ = (sel, ctx = document) => Array.from(ctx.querySelectorAll(sel));\n\n  const app = $('.eeat-audit');\n  if (!app) return;\n\n  \/\/ ===== Elements =====\n  const scoreValue = $('#scoreValue');\n  const scoreMax = $('#scoreMax');\n  const scoreDiagnosis = $('#scoreDiagnosis');\n  const rowStatus = $('#rowStatus');\n\n  const urlEl = $('#auditUrl');\n  const projectEl = $('#projectName');\n  const typeEl = $('#contentType');\n\n  const resetBtn = $('#resetAudit');\n  const copyBtn = $('#copyAudit');\n  const csvBtn = $('#downloadCsv');\n\n  \/\/ ===== Core logic =====\n  function getInputs() {\n    return $$('.score-input', app);\n  }\n\n  function getMaxScore() {\n    return getInputs().length * 2;\n  }\n\n  function toggleFixForRow(selectEl) {\n    const row = selectEl.closest('tr');\n    if (!row) return;\n\n    \/\/ Be explicit so minor HTML changes are less likely to break it\n    const fix = row.querySelector('td.fix-cell .fix') || row.querySelector('.fix');\n    if (!fix) return;\n\n    const v = String(selectEl.value); \/\/ \"\" | \"0\" | \"1\" | \"2\"\n    const showFix = (v === \"0\" || v === \"1\"); \/\/ show only for 0\/1, hide for \"\" and \"2\"\n\n    fix.classList.toggle('is-hidden', !showFix);\n    fix.setAttribute('aria-hidden', String(!showFix));\n\n    if (rowStatus) {\n      if (v === \"\") rowStatus.textContent = \"\";\n      else if (v === \"2\") rowStatus.textContent = \"Check erf\u00fcllt. Kein Fix-Vorschlag n\u00f6tig.\";\n      else rowStatus.textContent = \"Fix-Vorschlag eingeblendet.\";\n    }\n  }\n\n  function toggleAllFixes() {\n    getInputs().forEach(toggleFixForRow);\n  }\n\n  function calcScore() {\n    const inputs = getInputs();\n    const MAX = inputs.length * 2;\n    const total = inputs.reduce((sum, el) => sum + Number(el.value || 0), 0);\n\n    if (scoreValue) scoreValue.textContent = String(total);\n    if (scoreMax) scoreMax.textContent = \"\/ \" + MAX;\n\n    if (scoreDiagnosis) {\n      let diag = \"\";\n      if (total <= Math.round(MAX * 0.33)) diag = \"E\u2011E\u2011A\u2011T im Tarnmodus: \u201eWho\u2013How\u2013Why\u201c und Belege nachr\u00fcsten.\";\n      else if (total <= Math.round(MAX * 0.66)) diag = \"Solide, aber noch nicht zitierw\u00fcrdig: Experience\/Autorit\u00e4t verst\u00e4rken.\";\n      else diag = \"Vertrauen mit Ansage: skalieren, updaten, externe Signale aufbauen.\";\n      scoreDiagnosis.textContent = diag;\n    }\n  }\n\n  function resetAll() {\n    \/\/ Reset selects to default (\"\" = Bitte w\u00e4hlen\u2026)\n    getInputs().forEach(el => (el.value = \"\"));\n\n    \/\/ Reset notes\n    $$('.eeat-audit-table input[type=\"text\"]', app).forEach(el => (el.value = \"\"));\n\n    \/\/ Reset meta\n    if (urlEl) urlEl.value = \"\";\n    if (projectEl) projectEl.value = \"\";\n    if (typeEl) typeEl.value = \"blog\";\n\n    toggleAllFixes();\n    calcScore();\n  }\n\n  function collectRows() {\n    const rows = $$('.eeat-audit-table tbody tr', app);\n    return rows.map(tr => {\n      const area = (tr.querySelector('th[scope=\"row\"]')?.textContent || \"\").trim();\n      const tds = tr.querySelectorAll('td');\n      const check = (tds[0]?.textContent || \"\").trim();            \/\/ 1st td = Check text\n      const score = tr.querySelector('.score-input')?.value ?? \"\"; \/\/ \"\" | \"0\" | \"1\" | \"2\"\n      const note = tr.querySelector('input[type=\"text\"]')?.value ?? \"\";\n      const fixText = (tr.querySelector('.fix')?.textContent || \"\").trim();\n      const fix = (score === \"0\" || score === \"1\") ? fixText : \"\"; \/\/ only export visible fix contextually\n      return { area, check, score, note, fix };\n    });\n  }\n\n  async function copyResults() {\n    const MAX = getMaxScore();\n    const total = Number(scoreValue?.textContent || 0);\n\n    const metaUrl = (urlEl?.value || \"\").trim();\n    const metaProject = (projectEl?.value || \"\").trim();\n    const metaType = typeEl?.value || \"blog\";\n\n    const rows = collectRows();\n\n    const lines = [\n      \"E-E-A-T Audit\",\n      metaUrl ? `URL: ${metaUrl}` : \"\",\n      metaProject ? `Projekt: ${metaProject}` : \"\",\n      `Typ: ${metaType}`,\n      `Score: ${total}\/${MAX}`,\n      \"\",\n      ...rows.map(r => {\n        const scoreLabel = r.score === \"\" ? \"-\" : `${r.score}\/2`;\n        const fix = r.fix ? r.fix : \"(kein Fix n\u00f6tig)\";\n        const note = r.note ? r.note : \"-\";\n        return `- [${r.area}] (${scoreLabel}) ${r.check} | Notiz: ${note} | Fix: ${fix}`;\n      })\n    ].filter(Boolean);\n\n    await navigator.clipboard.writeText(lines.join(\"\\n\"));\n    if (copyBtn) {\n      const old = copyBtn.textContent;\n      copyBtn.textContent = \"Kopiert!\";\n      setTimeout(() => (copyBtn.textContent = old || \"Ergebnisse kopieren\"), 1200);\n    }\n  }\n\n  function downloadCsv() {\n    const MAX = getMaxScore();\n    const total = Number(scoreValue?.textContent || 0);\n\n    const metaUrl = (urlEl?.value || \"\").trim();\n    const metaProject = (projectEl?.value || \"\").trim();\n    const metaType = typeEl?.value || \"blog\";\n\n    const rows = collectRows();\n    const header = [\"url\",\"project\",\"contentType\",\"totalScore\",\"maxScore\",\"area\",\"check\",\"score\",\"note\",\"fix\"];\n\n    const csv = [\n      header.join(\",\"),\n      ...rows.map(r => [\n        metaUrl, metaProject, metaType,\n        String(total), String(MAX),\n        r.area, r.check, r.score, r.note, r.fix\n      ].map(v => `\"${String(v).replaceAll('\"','\"\"')}\"`).join(\",\"))\n    ].join(\"\\n\");\n\n    const blob = new Blob([csv], { type: \"text\/csv;charset=utf-8;\" });\n    const a = document.createElement(\"a\");\n    a.href = URL.createObjectURL(blob);\n    a.download = \"eeat-audit.csv\";\n    document.body.appendChild(a);\n    a.click();\n    a.remove();\n  }\n\n  \/\/ ===== Events (robust via delegation) =====\n  app.addEventListener('change', (e) => {\n    const sel = e.target.closest('.score-input');\n    if (!sel) return;\n    toggleFixForRow(sel);\n    calcScore();\n  });\n\n  resetBtn?.addEventListener('click', resetAll);\n  copyBtn?.addEventListener('click', copyResults);\n  csvBtn?.addEventListener('click', downloadCsv);\n\n  \/\/ ===== Init =====\n  toggleAllFixes();\n  calcScore();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>E\u2011E\u2011A\u2011T Audit f\u00fcr eure Inhalte: Score berechnen, Schwachstellen finden und gezielte Fix\u2011Vorschl\u00e4ge bekommen. Ideal f\u00fcr schnelle Checks vor Update, Relaunch oder Content-Refresh. Kostenfrei!<\/p>\n","protected":false},"author":1,"featured_media":7963,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-7930","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/pages\/7930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/comments?post=7930"}],"version-history":[{"count":0,"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/pages\/7930\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/media\/7963"}],"wp:attachment":[{"href":"https:\/\/code78.de\/blog\/wp-json\/wp\/v2\/media?parent=7930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}