{"id":16989,"date":"2026-04-20T05:52:32","date_gmt":"2026-04-20T05:52:32","guid":{"rendered":"https:\/\/siteskyline.com\/?p=16989"},"modified":"2026-04-20T13:43:13","modified_gmt":"2026-04-20T13:43:13","slug":"check-seo-optimization","status":"publish","type":"post","link":"https:\/\/siteskyline.com\/id\/check-seo-optimization\/","title":{"rendered":"Alat Audit SEO Gratis: Dapatkan Laporan Audit SEO Situs Web Anda Secara Online"},"content":{"rendered":"\n    <!-- \u2500\u2500 HERO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\r\n    <section class=\"relative pt-20 pb-24 overflow-hidden bg-scandi-surface border-b border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8 text-center\">\r\n        <div class=\"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-brand-light text-brand text-sm font-semibold mb-8\">\r\n          <span class=\"flex h-2 w-2 rounded-full bg-brand animate-pulse\"><\/span>\r\n          Free \u00b7 No Sign-Up \u00b7 Instant Results\r\n        <\/div>\r\n        <h1 class=\"text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight text-gray-900 mb-5 leading-tight\">\r\n          Free SEO Audit Tool: Get Your<br class=\"hidden sm:block\">\r\n          <span class=\"text-brand\">Website SEO Audit Report Online<\/span>\r\n        <\/h1>\r\n        <p class=\"text-lg sm:text-xl text-scandi-muted mb-4 leading-relaxed max-w-3xl mx-auto\">\r\n          Run a free SEO audit on your website and get a detailed <strong class=\"text-gray-800\">SEO audit report<\/strong> in seconds. Check SEO optimization across <strong class=\"text-gray-800\">50+ ranking factors<\/strong> \u2014 including Core Web Vitals, broken links, headline hierarchy, security headers, schema markup, and readability.\r\n        <\/p>\r\n        <p class=\"text-sm text-scandi-muted mb-10 max-w-2xl mx-auto\">Perfect for WordPress sites. No credit card. No account. Unlimited free audits.<\/p>\r\n\r\n        <!-- Analyzer Form -->\r\n        <div class=\"max-w-3xl mx-auto\">\r\n          <div class=\"bg-white rounded-2xl border border-scandi-border shadow-xl p-6 sm:p-8\">\r\n            <div class=\"flex flex-col gap-4\">\r\n              <div class=\"flex flex-col sm:flex-row gap-3\">\r\n                <div class=\"relative flex-1\">\r\n                  <div class=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none\">\r\n                    <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101\"\/><\/svg>\r\n                  <\/div>\r\n                  <input id=\"ss-url-input\" type=\"url\" placeholder=\"https:\/\/yourwebsite.com\/page-to-audit\"\r\n                    class=\"w-full pl-10 pr-4 py-3 rounded-lg border border-scandi-border text-gray-800 text-sm focus:outline-none focus:ring-2 focus:ring-brand focus:border-transparent placeholder-gray-400\" \/>\r\n                <\/div>\r\n                <button id=\"ss-analyze-btn\" onclick=\"ssSeoAnalyze()\"\r\n                  class=\"px-8 py-3 bg-brand text-white font-bold rounded-lg hover:bg-brand-hover transition-all whitespace-nowrap text-sm flex items-center justify-center gap-2 shadow-sm hover:shadow-md\">\r\n                  <svg id=\"ss-btn-icon\" class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\/>\r\n                  <\/svg>\r\n                  <span id=\"ss-btn-text\">Analyze Now<\/span>\r\n                <\/button>\r\n              <\/div>\r\n              <div class=\"flex flex-col sm:flex-row gap-3 items-start sm:items-center\">\r\n                <div class=\"relative flex-1 w-full\">\r\n                  <div class=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none\">\r\n                    <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z\"\/><\/svg>\r\n                  <\/div>\r\n                  <input id=\"ss-keyword-input\" type=\"text\" placeholder=\"Target keyword (e.g. seo audit report)\"\r\n                    class=\"w-full pl-10 pr-4 py-3 rounded-lg border border-scandi-border text-gray-800 text-sm focus:outline-none focus:ring-2 focus:ring-brand focus:border-transparent placeholder-gray-400\" \/>\r\n                <\/div>\r\n                <p class=\"text-xs text-scandi-muted sm:w-44 text-left\">Optional \u2014 unlocks keyword placement & density checks<\/p>\r\n              <\/div>\r\n            <\/div>\r\n            <div id=\"ss-error-msg\" class=\"hidden mt-4 px-4 py-3 bg-red-50 border border-red-200 text-red-700 text-sm rounded-lg flex items-start gap-2\">\r\n              <span class=\"text-red-500 mt-0.5\">&#x26a0;<\/span>\r\n              <span id=\"ss-error-text\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <p class=\"text-xs text-gray-400 mt-3 text-center\">Checks HTTP status \u00b7 Title & Meta \u00b7 H1\u2013H6 \u00b7 Keywords \u00b7 Images \u00b7 Links \u00b7 Broken links \u00b7 Robots.txt \u00b7 Sitemap \u00b7 Schema \u00b7 Open Graph \u00b7 Core Web Vitals + more<\/p>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- \u2500\u2500 LOADING \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\r\n    <div id=\"ss-loading\" class=\"hidden py-24 bg-white text-center border-b border-scandi-border\">\r\n      <div class=\"max-w-md mx-auto px-4\">\r\n        <div class=\"relative w-24 h-24 mx-auto mb-6\">\r\n          <svg class=\"animate-spin w-24 h-24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 100 100\">\r\n            <circle cx=\"50\" cy=\"50\" r=\"42\" fill=\"none\" stroke=\"#e5e7eb\" stroke-width=\"8\"\/>\r\n            <circle cx=\"50\" cy=\"50\" r=\"42\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linecap=\"round\"\r\n              stroke-dasharray=\"264\" stroke-dashoffset=\"180\" class=\"text-brand\"\/>\r\n          <\/svg>\r\n          <div class=\"absolute inset-0 flex items-center justify-center text-2xl\">&#x1f50d;<\/div>\r\n        <\/div>\r\n        <h3 class=\"text-xl font-bold text-gray-900 mb-2\">Analyzing Your Page\u2026<\/h3>\r\n        <p id=\"ss-loading-msg\" class=\"text-scandi-muted text-sm transition-all duration-500\">Fetching fresh security token\u2026<\/p>\r\n        <div class=\"mt-4 w-full bg-gray-100 rounded-full h-1.5 overflow-hidden\">\r\n          <div id=\"ss-progress-bar\" class=\"h-full bg-brand rounded-full transition-all duration-700\" style=\"width:0%\"><\/div>\r\n        <\/div>\r\n        <p class=\"text-xs text-gray-400 mt-2\">This may take up to 30 seconds while we fetch Core Web Vitals from Google<\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2500\u2500 RESULTS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\r\n    <div id=\"ss-results\" class=\"hidden bg-scandi-surface py-12 border-b border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8\">\r\n\r\n        <!-- Score Bar -->\r\n        <div class=\"bg-white rounded-2xl border border-scandi-border p-6 sm:p-8 mb-6 shadow-sm\">\r\n          <div class=\"flex flex-col md:flex-row gap-6 items-center\">\r\n            <div class=\"flex-shrink-0 relative w-36 h-36\">\r\n              <svg viewBox=\"0 0 120 120\" class=\"w-full h-full -rotate-90\">\r\n                <circle cx=\"60\" cy=\"60\" r=\"50\" fill=\"none\" stroke=\"#f3f4f6\" stroke-width=\"10\"\/>\r\n                <circle id=\"ss-ring\" cx=\"60\" cy=\"60\" r=\"50\" fill=\"none\" stroke=\"#2563eb\" stroke-width=\"10\"\r\n                  stroke-linecap=\"round\" stroke-dasharray=\"314\" stroke-dashoffset=\"314\"\r\n                  style=\"transition:stroke-dashoffset 1.3s cubic-bezier(.4,0,.2,1),stroke .3s\"\/>\r\n              <\/svg>\r\n              <div class=\"absolute inset-0 flex flex-col items-center justify-center\">\r\n                <span id=\"ss-score-num\" class=\"text-3xl font-extrabold text-gray-900\">0<\/span>\r\n                <span class=\"text-xs text-scandi-muted font-semibold\">\/100 SEO<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"flex-1 w-full\">\r\n              <div class=\"flex flex-wrap gap-2 items-center mb-3\">\r\n                <h2 class=\"text-xl font-bold text-gray-900\">SEO Audit Complete<\/h2>\r\n                <span id=\"ss-grade-badge\" class=\"px-3 py-1 rounded-full text-xs font-bold\"><\/span>\r\n              <\/div>\r\n              <p id=\"ss-audited-url\" class=\"text-sm text-scandi-muted mb-4 truncate font-mono\"><\/p>\r\n              <div class=\"grid grid-cols-4 gap-2\">\r\n                <div class=\"text-center bg-red-50 rounded-xl p-3 border border-red-100\">\r\n                  <div id=\"ss-err-n\" class=\"text-2xl font-extrabold text-red-600\">0<\/div>\r\n                  <div class=\"text-xs font-semibold text-red-500 mt-0.5\">Errors<\/div>\r\n                <\/div>\r\n                <div class=\"text-center bg-amber-50 rounded-xl p-3 border border-amber-100\">\r\n                  <div id=\"ss-warn-n\" class=\"text-2xl font-extrabold text-amber-600\">0<\/div>\r\n                  <div class=\"text-xs font-semibold text-amber-500 mt-0.5\">Warnings<\/div>\r\n                <\/div>\r\n                <div class=\"text-center bg-blue-50 rounded-xl p-3 border border-blue-100\">\r\n                  <div id=\"ss-notice-n\" class=\"text-2xl font-extrabold text-blue-600\">0<\/div>\r\n                  <div class=\"text-xs font-semibold text-blue-500 mt-0.5\">Notices<\/div>\r\n                <\/div>\r\n                <div class=\"text-center bg-green-50 rounded-xl p-3 border border-green-100\">\r\n                  <div id=\"ss-pass-n\" class=\"text-2xl font-extrabold text-green-600\">0<\/div>\r\n                  <div class=\"text-xs font-semibold text-green-500 mt-0.5\">Passed<\/div>\r\n                <\/div>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- SERP Preview + Social Previews Tabs -->\r\n        <div class=\"bg-white rounded-2xl border border-scandi-border shadow-sm mb-6 overflow-hidden\">\r\n          <div class=\"flex border-b border-scandi-border\">\r\n            <button onclick=\"ssPreviewTab('serp')\" id=\"ss-ptab-serp\"\r\n              class=\"ss-preview-tab flex-1 py-3 text-sm font-semibold border-b-2 border-brand text-brand\">\r\n              &#x1f50d; Google SERP\r\n            <\/button>\r\n            <button onclick=\"ssPreviewTab('og')\" id=\"ss-ptab-og\"\r\n              class=\"ss-preview-tab flex-1 py-3 text-sm font-semibold border-b-2 border-transparent text-gray-500 hover:text-gray-800 transition-colors\">\r\n              &#x1f4d8; Facebook Card\r\n            <\/button>\r\n            <button onclick=\"ssPreviewTab('tw')\" id=\"ss-ptab-tw\"\r\n              class=\"ss-preview-tab flex-1 py-3 text-sm font-semibold border-b-2 border-transparent text-gray-500 hover:text-gray-800 transition-colors\">\r\n              &#x1f426; Twitter Card\r\n            <\/button>\r\n          <\/div>\r\n\r\n          <!-- SERP -->\r\n          <div id=\"ss-preview-serp\" class=\"ss-preview-pane p-6\">\r\n            <p class=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-3\">Google Search Result Preview<\/p>\r\n            <div class=\"border border-gray-100 rounded-xl p-5 bg-gray-50 max-w-2xl\">\r\n              <div id=\"ss-serp-favicon\" class=\"flex items-center gap-2 mb-2\">\r\n                <div class=\"w-5 h-5 bg-gray-200 rounded-full\"><\/div>\r\n                <span id=\"ss-serp-host\" class=\"text-xs text-gray-600\"><\/span>\r\n              <\/div>\r\n              <div id=\"ss-serp-title\" class=\"text-lg text-blue-700 font-medium leading-tight mb-1 hover:underline cursor-default\" style=\"font-family:arial,sans-serif\"><\/div>\r\n              <div id=\"ss-serp-url-display\" class=\"text-xs text-green-700 mb-2 font-medium\"><\/div>\r\n              <div id=\"ss-serp-desc\" class=\"text-sm text-gray-600 leading-relaxed\" style=\"font-family:arial,sans-serif\"><\/div>\r\n            <\/div>\r\n            <div class=\"mt-3 flex flex-wrap gap-3\">\r\n              <div id=\"ss-serp-title-len\" class=\"text-xs px-2 py-1 rounded-full\"><\/div>\r\n              <div id=\"ss-serp-desc-len\"  class=\"text-xs px-2 py-1 rounded-full\"><\/div>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <!-- Facebook \/ OG Card -->\r\n          <div id=\"ss-preview-og\" class=\"ss-preview-pane hidden p-6\">\r\n            <p class=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-3\">Facebook \/ LinkedIn Share Preview<\/p>\r\n            <div class=\"border border-gray-200 rounded-xl overflow-hidden max-w-sm shadow-sm bg-white\">\r\n              <div id=\"ss-og-img-wrap\" class=\"w-full bg-gray-100 h-44 flex items-center justify-center\">\r\n                <img decoding=\"async\" id=\"ss-og-img\" src=\"\" alt=\"\" class=\"w-full h-44 object-cover hidden\"\/>\r\n                <span id=\"ss-og-no-img\" class=\"text-sm text-gray-400\">&#x26a0; No og:image set<\/span>\r\n              <\/div>\r\n              <div class=\"p-3 border-t border-gray-100 bg-white\">\r\n                <p id=\"ss-og-domain\" class=\"text-xs text-gray-400 uppercase mb-1 tracking-wide\"><\/p>\r\n                <p id=\"ss-og-title\" class=\"text-sm font-bold text-gray-900 leading-snug mb-1 line-clamp-2\"><\/p>\r\n                <p id=\"ss-og-desc\" class=\"text-xs text-gray-500 line-clamp-2\"><\/p>\r\n              <\/div>\r\n            <\/div>\r\n            <p id=\"ss-og-warning\" class=\"mt-3 text-xs text-amber-600 hidden\">&#x26a0; Some Open Graph tags are missing \u2014 social shares may look incomplete.<\/p>\r\n          <\/div>\r\n\r\n          <!-- Twitter Card -->\r\n          <div id=\"ss-preview-tw\" class=\"ss-preview-pane hidden p-6\">\r\n            <p class=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-3\">Twitter \/ X Share Preview<\/p>\r\n            <div class=\"border border-gray-200 rounded-2xl overflow-hidden max-w-sm shadow-sm bg-white\">\r\n              <div id=\"ss-tw-img-wrap\" class=\"w-full bg-gray-100 h-44 flex items-center justify-center\">\r\n                <img decoding=\"async\" id=\"ss-tw-img\" src=\"\" alt=\"\" class=\"w-full h-44 object-cover hidden\"\/>\r\n                <span id=\"ss-tw-no-img\" class=\"text-sm text-gray-400\">&#x26a0; No twitter:image set<\/span>\r\n              <\/div>\r\n              <div class=\"p-3\">\r\n                <p id=\"ss-tw-title\" class=\"text-sm font-bold text-gray-900 mb-1 line-clamp-1\"><\/p>\r\n                <p id=\"ss-tw-desc\"  class=\"text-xs text-gray-500 mb-2 line-clamp-2\"><\/p>\r\n                <p id=\"ss-tw-domain\" class=\"text-xs text-gray-400 flex items-center gap-1\">\r\n                  <svg class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656\"\/><\/svg>\r\n                  <span><\/span>\r\n                <\/p>\r\n              <\/div>\r\n            <\/div>\r\n            <p id=\"ss-tw-warning\" class=\"mt-3 text-xs text-amber-600 hidden\">&#x26a0; No Twitter Card meta tags found \u2014 add twitter:card, twitter:title, twitter:description, twitter:image.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- Filter Tabs -->\r\n        <div class=\"flex flex-wrap gap-2 mb-5\">\r\n          <button onclick=\"ssFilter('all')\"         id=\"ss-tab-all\"         class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-brand text-white transition-all\">All<\/button>\r\n          <button onclick=\"ssFilter('error')\"       id=\"ss-tab-error\"       class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:border-red-200 hover:bg-red-50 transition-all\">&#x1f534; Errors<\/button>\r\n          <button onclick=\"ssFilter('warning')\"     id=\"ss-tab-warning\"     class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:border-amber-200 hover:bg-amber-50 transition-all\">&#x1f7e1; Warnings<\/button>\r\n          <button onclick=\"ssFilter('pass')\"        id=\"ss-tab-pass\"        class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:border-green-200 hover:bg-green-50 transition-all\">&#x2705; Passed<\/button>\r\n          <button onclick=\"ssFilter('content')\"     id=\"ss-tab-content\"     class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:bg-gray-50 transition-all\">&#x1f4dd; Content<\/button>\r\n          <button onclick=\"ssFilter('technical')\"   id=\"ss-tab-technical\"   class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:bg-gray-50 transition-all\">&#x2699; Technical<\/button>\r\n          <button onclick=\"ssFilter('social')\"      id=\"ss-tab-social\"      class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:bg-gray-50 transition-all\">&#x1f4f2; Social<\/button>\r\n          <button onclick=\"ssFilter('performance')\" id=\"ss-tab-performance\" class=\"ss-tab px-4 py-2 rounded-full text-sm font-semibold bg-white text-gray-600 border border-scandi-border hover:bg-gray-50 transition-all\">&#x26a1; Speed<\/button>\r\n        <\/div>\r\n\r\n        <!-- Checks Grid -->\r\n        <div id=\"ss-checks-grid\" class=\"flex flex-col gap-10 mb-10\"><\/div>\r\n\r\n        <!-- CTA -->\r\n        <div id=\"ss-cta-box\" class=\"bg-brand rounded-2xl p-8 sm:p-10 text-center text-white relative overflow-hidden print:hidden\">\r\n          <div class=\"absolute -top-16 -right-16 w-48 h-48 bg-white\/10 rounded-full\"><\/div>\r\n          <div class=\"absolute -bottom-12 -left-12 w-40 h-40 bg-white\/5 rounded-full\"><\/div>\r\n          <div class=\"relative\">\r\n            <div class=\"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white\/20 text-white text-xs font-bold mb-5\">\r\n              <span>\u2726<\/span> Fix All These Issues Automatically\r\n            <\/div>\r\n            <h3 class=\"text-2xl sm:text-3xl font-extrabold mb-3\">Stop Fixing SEO Issues One Page at a Time<\/h3>\r\n            <p class=\"text-brand-light mb-6 max-w-xl mx-auto leading-relaxed\">Your SEO audit report shows the problems. <strong class=\"text-white\">SkySEOManager Pro<\/strong> fixes them across your entire WordPress site in minutes \u2014 using Gemini AI to bulk-generate titles, meta descriptions, and image alt text automatically.<\/p>\r\n            <div class=\"flex flex-col sm:flex-row gap-3 justify-center\">\r\n              <a href=\"\/skyseomanagerpro\/\" class=\"inline-flex items-center justify-center px-8 py-3.5 bg-white text-brand font-bold rounded-xl hover:bg-gray-50 transition-colors text-sm shadow-lg\">\r\n                Get SkySEOManager Pro \u2192\r\n              <\/a>\r\n              <button onclick=\"ssReset()\" class=\"inline-flex items-center justify-center px-8 py-3.5 bg-white\/15 border border-white\/25 text-white font-semibold rounded-xl hover:bg-white\/25 transition-colors text-sm\">\r\n                Analyze Another URL\r\n              <\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <style>\r\n      \/* PRINT STYLES *\/\r\n      @media print {\r\n        header, footer, #ss-loading, .print\\:hidden, .ss-preview-tab, #ss-cta-box { display: none !important; }\r\n        #ss-results { background: white !important; padding: 0 !important; }\r\n        .ss-check-card { break-inside: avoid; border: 1px solid #eee !important; margin-bottom: 1rem; }\r\n        .bg-brand { background-color: #2563eb !important; -webkit-print-color-adjust: exact; }\r\n      }\r\n    <\/style>\r\n\r\n    <!-- SEO CONTENT -->\r\n    <!-- H2: Why You Need a Website SEO Audit Report -->\r\n    <section class=\"py-20 bg-white border-t border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8\">\r\n        <div class=\"grid lg:grid-cols-2 gap-14 items-center\">\r\n          <div>\r\n            <span class=\"text-brand font-bold tracking-wider uppercase text-sm mb-3 block\">Why It Matters<\/span>\r\n            <h2 class=\"text-3xl md:text-4xl font-bold text-gray-900 mb-6\">Why You Need a Website SEO Audit Report<\/h2>\r\n            <p class=\"text-scandi-muted mb-4 leading-relaxed\">A <strong class=\"text-gray-800\">website SEO audit report<\/strong> is the starting point for any successful search engine strategy. Without one, you're guessing \u2014 spending time on content improvements while a noindex tag or missing sitemap quietly prevents Google from ranking you at all.<\/p>\r\n            <p class=\"text-scandi-muted mb-4 leading-relaxed\">Our free SEO audit tool generates the same comprehensive report that agencies charge hundreds of dollars to produce. We check your on-page content, technical health, page speed, social card setup, and more \u2014 and present every issue with a clear, actionable fix.<\/p>\r\n            <p class=\"text-scandi-muted leading-relaxed\">According to Ahrefs, <strong class=\"text-gray-800\">91% of pages get zero organic traffic from Google.<\/strong> In most cases, a basic SEO audit report would reveal exactly why \u2014 and what to do about it.<\/p>\r\n          <\/div>\r\n          <div class=\"grid grid-cols-2 gap-4\">\r\n            <div class=\"bg-scandi-surface rounded-2xl p-5 border border-scandi-border text-center\">\r\n              <div class=\"text-3xl font-extrabold text-brand mb-1\">91%<\/div>\r\n              <div class=\"text-sm text-scandi-muted\">of pages get zero organic traffic<\/div>\r\n            <\/div>\r\n            <div class=\"bg-scandi-surface rounded-2xl p-5 border border-scandi-border text-center\">\r\n              <div class=\"text-3xl font-extrabold text-brand mb-1\">63%<\/div>\r\n              <div class=\"text-sm text-scandi-muted\">of pages lack a proper meta description<\/div>\r\n            <\/div>\r\n            <div class=\"bg-scandi-surface rounded-2xl p-5 border border-scandi-border text-center\">\r\n              <div class=\"text-3xl font-extrabold text-brand mb-1\">46%<\/div>\r\n              <div class=\"text-sm text-scandi-muted\">of images have no alt text at all<\/div>\r\n            <\/div>\r\n            <div class=\"bg-scandi-surface rounded-2xl p-5 border border-scandi-border text-center\">\r\n              <div class=\"text-3xl font-extrabold text-brand mb-1\">2.4\u00d7<\/div>\r\n              <div class=\"text-sm text-scandi-muted\">more organic traffic with optimised titles<\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- What the report includes -->\r\n    <section class=\"py-20 bg-scandi-surface border-t border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8\">\r\n        <div class=\"text-center max-w-3xl mx-auto mb-14\">\r\n          <span class=\"text-brand font-bold tracking-wider uppercase text-sm mb-2 block\">Full Audit Coverage<\/span>\r\n          <h2 class=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">What's Inside Your Free SEO Audit Report<\/h2>\r\n          <p class=\"text-lg text-scandi-muted\">Every report covers 50+ individual SEO checks across 6 categories \u2014 the same checks used by enterprise tools like Semrush, Ahrefs, and SE Ranking.<\/p>\r\n        <\/div>\r\n        <div class=\"grid md:grid-cols-3 gap-6\">\r\n          <div class=\"bg-white p-6 rounded-2xl border border-scandi-border\">\r\n            <div class=\"w-11 h-11 bg-blue-50 rounded-xl flex items-center justify-center text-blue-600 mb-4 text-lg\">&#x1f4dd;<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-3\">On-Page Content<\/h3>\r\n            <ul class=\"text-sm text-scandi-muted space-y-1.5\">\r\n              <li>\u2713 Title tag \u2014 length & keyword placement<\/li>\r\n              <li>\u2713 Meta description character count<\/li>\r\n              <li>\u2713 Headline hierarchy outline (H1\u2013H6)<\/li>\r\n              <li>\u2713 Broken hierarchy detection<\/li>\r\n              <li>\u2713 Content Readability (Flesch Score)<\/li>\r\n              <li>\u2713 Word count & keyword density<\/li>\r\n              <li>\u2713 Keyword in first 100 words<\/li>\r\n            <\/ul>\r\n          <\/div>\r\n          <div class=\"bg-white p-6 rounded-2xl border border-scandi-border\">\r\n            <div class=\"w-11 h-11 bg-purple-50 rounded-xl flex items-center justify-center text-purple-600 mb-4 text-lg\">&#x2699;<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-3\">Technical SEO<\/h3>\r\n            <ul class=\"text-sm text-scandi-muted space-y-1.5\">\r\n              <li>\u2713 HTTP status & SSL encryption<\/li>\r\n              <li>\u2713 Canonical & Robots meta tags<\/li>\r\n              <li>\u2713 Canonical consistency check<\/li>\r\n              <li>\u2713 Redirect chain detection<\/li>\r\n              <li>\u2713 Security headers (CSP, HSTS)<\/li>\r\n              <li>\u2713 Hreflang & Language attributes<\/li>\r\n              <li>\u2713 Sitemap index recursive scan<\/li>\r\n            <\/ul>\r\n          <\/div>\r\n          <div class=\"bg-white p-6 rounded-2xl border border-scandi-border\">\r\n            <div class=\"w-11 h-11 bg-green-50 rounded-xl flex items-center justify-center text-green-600 mb-4 text-lg\">&#x26a1;<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-3\">Speed, Links & Social<\/h3>\r\n            <ul class=\"text-sm text-scandi-muted space-y-1.5\">\r\n              <li>\u2713 Core Web Vitals (LCP, CLS, TBT)<\/li>\r\n              <li>\u2713 Image lazy loading & dimensions<\/li>\r\n              <li>\u2713 Image alt text thumbnails<\/li>\r\n              <li>\u2713 Nofollow external link detection<\/li>\r\n              <li>\u2713 Broken internal link scanner<\/li>\r\n              <li>\u2713 OG \/ Facebook card preview<\/li>\r\n              <li>\u2713 Twitter \/ X card preview<\/li>\r\n              <li>\u2713 Schema JSON-LD detection<\/li>\r\n            <\/ul>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- H2: How to Check SEO Optimization Fast -->\r\n    <section class=\"py-20 bg-white border-t border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8\">\r\n        <div class=\"text-center max-w-2xl mx-auto mb-14\">\r\n          <span class=\"text-brand font-bold tracking-wider uppercase text-sm mb-2 block\">Step by Step<\/span>\r\n          <h2 class=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">How to Check SEO Optimization Fast<\/h2>\r\n          <p class=\"text-scandi-muted\">Run a complete SEO check in under 60 seconds \u2014 no tools to install, no account needed.<\/p>\r\n        <\/div>\r\n        <div class=\"grid md:grid-cols-4 gap-6\">\r\n          <div class=\"text-center\">\r\n            <div class=\"w-14 h-14 mx-auto bg-brand rounded-2xl flex items-center justify-center text-white font-extrabold text-xl mb-4 shadow-sm\">1<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-2 text-sm\">Enter Your URL<\/h3>\r\n            <p class=\"text-sm text-scandi-muted\">Paste the full page URL you want to check SEO optimization for. Works for any public page \u2014 WordPress, Shopify, Webflow, or custom HTML.<\/p>\r\n          <\/div>\r\n          <div class=\"text-center\">\r\n            <div class=\"w-14 h-14 mx-auto bg-brand rounded-2xl flex items-center justify-center text-white font-extrabold text-xl mb-4 shadow-sm\">2<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-2 text-sm\">Add a Keyword<\/h3>\r\n            <p class=\"text-sm text-scandi-muted\">Type your target keyword to unlock extra checks: Is it in your title? Your H1? Your first paragraph? What's the density? All measured instantly.<\/p>\r\n          <\/div>\r\n          <div class=\"text-center\">\r\n            <div class=\"w-14 h-14 mx-auto bg-brand rounded-2xl flex items-center justify-center text-white font-extrabold text-xl mb-4 shadow-sm\">3<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-2 text-sm\">Get Your Report<\/h3>\r\n            <p class=\"text-sm text-scandi-muted\">Receive your SEO audit report in seconds. Each check is scored as Passed, Warning, or Error \u2014 with a specific fix recommendation for every issue found.<\/p>\r\n          <\/div>\r\n          <div class=\"text-center\">\r\n            <div class=\"w-14 h-14 mx-auto bg-brand rounded-2xl flex items-center justify-center text-white font-extrabold text-xl mb-4 shadow-sm\">4<\/div>\r\n            <h3 class=\"font-bold text-gray-900 mb-2 text-sm\">Fix & Re-Audit<\/h3>\r\n            <p class=\"text-sm text-scandi-muted\">Apply each recommended fix, then run the analyzer again to verify the improvements. Track your SEO score rising with each change you make.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- H2: Best Free SEO Checker for WordPress \u2014 Plugin Pitch -->\r\n    <section class=\"py-20 bg-scandi-surface border-t border-scandi-border\">\r\n      <div class=\"max-w-[1200px] mx-auto w-full px-4 sm:px-6 lg:px-8\">\r\n        <div class=\"bg-white rounded-2xl border border-scandi-border overflow-hidden shadow-sm\">\r\n          <div class=\"grid lg:grid-cols-2\">\r\n            <div class=\"p-8 lg:p-12\">\r\n              <span class=\"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-green-100 text-green-700 text-xs font-bold mb-6\">\r\n                <span class=\"flex h-2 w-2 rounded-full bg-green-500\"><\/span>Trusted by 11,000+ WordPress Sites\r\n              <\/span>\r\n              <h2 class=\"text-2xl md:text-3xl font-extrabold text-gray-900 mb-4\">Best Free SEO Checker for WordPress: Meet SkySEOManager Pro<\/h2>\r\n              <p class=\"text-scandi-muted mb-5 leading-relaxed\">This free SEO checker is perfect for auditing one page at a time. But if you manage a WordPress site with dozens or hundreds of posts, you need a smarter solution.<\/p>\r\n              <p class=\"text-scandi-muted mb-6 leading-relaxed\"><strong class=\"text-gray-800\">SkySEOManager Pro<\/strong> is the WordPress plugin that turns your SEO audit report into bulk action. Instead of fixing meta descriptions one by one, let Gemini AI generate optimised SEO content for your entire site from a single dashboard.<\/p>\r\n              <ul class=\"space-y-3 mb-8 text-sm\">\r\n                <li class=\"flex items-start gap-3\"><span class=\"text-brand font-bold text-base mt-0.5\">\u2713<\/span><span><strong class=\"text-gray-800\">Bulk-edit all titles and meta descriptions<\/strong> across every post, page, and product from one screen.<\/span><\/li>\r\n                <li class=\"flex items-start gap-3\"><span class=\"text-brand font-bold text-base mt-0.5\">\u2713<\/span><span><strong class=\"text-gray-800\">AI-generated SEO content<\/strong> \u2014 Gemini writes optimised meta descriptions and alt text in bulk with one click.<\/span><\/li>\r\n                <li class=\"flex items-start gap-3\"><span class=\"text-brand font-bold text-base mt-0.5\">\u2713<\/span><span><strong class=\"text-gray-800\">Integrates with Yoast SEO and Rank Math<\/strong> \u2014 your existing SEO plugin data is preserved.<\/span><\/li>\r\n                <li class=\"flex items-start gap-3\"><span class=\"text-brand font-bold text-base mt-0.5\">\u2713<\/span><span><strong class=\"text-gray-800\">Bulk image alt text scanner<\/strong> \u2014 find and fix every missing alt attribute across your media library.<\/span><\/li>\r\n              <\/ul>\r\n              <a href=\"\/skyseomanagerpro\/\" class=\"inline-flex items-center justify-center px-8 py-4 bg-brand text-white font-bold rounded-xl hover:bg-brand-hover transition-colors text-sm shadow-sm\">\r\n                Explore SkySEOManager Pro \u2192\r\n              <\/a>\r\n            <\/div>\r\n            <div class=\"bg-scandi-surface p-8 lg:p-12 flex flex-col justify-center border-t lg:border-t-0 lg:border-l border-scandi-border\">\r\n              <blockquote class=\"mb-8\">\r\n                <div class=\"flex text-yellow-400 mb-3 text-lg\">\u2605\u2605\u2605\u2605\u2605<\/div>\r\n                <p class=\"text-gray-700 italic text-sm leading-relaxed mb-4\">\"After running the free SEO analyzer and finding 14 errors, I got SkySEOManager Pro to fix them in bulk. Our organic traffic grew 34% in 8 weeks. The AI-generated meta descriptions alone were worth it.\"<\/p>\r\n                <footer class=\"flex items-center gap-3\">\r\n                  <div class=\"w-10 h-10 rounded-full bg-brand-light flex items-center justify-center text-brand font-bold text-sm\">SM<\/div>\r\n                  <div>\r\n                    <div class=\"font-bold text-gray-900 text-sm\">Sarah Mitchell<\/div>\r\n                    <div class=\"text-xs text-scandi-muted\">Content Manager, TechBlog Pro<\/div>\r\n                  <\/div>\r\n                <\/footer>\r\n              <\/blockquote>\r\n              <div class=\"grid grid-cols-2 gap-3\">\r\n                <div class=\"bg-white rounded-xl p-4 border border-scandi-border text-center\">\r\n                  <div class=\"text-xl font-extrabold text-brand\">11,000+<\/div>\r\n                  <div class=\"text-xs text-scandi-muted mt-0.5\">Active Installs<\/div>\r\n                <\/div>\r\n                <div class=\"bg-white rounded-xl p-4 border border-scandi-border text-center\">\r\n                  <div class=\"text-xl font-extrabold text-brand\">4.9\/5<\/div>\r\n                  <div class=\"text-xs text-scandi-muted mt-0.5\">User Rating<\/div>\r\n                <\/div>\r\n                <div class=\"bg-white rounded-xl p-4 border border-scandi-border text-center\">\r\n                  <div class=\"text-xl font-extrabold text-brand\">14-Day<\/div>\r\n                  <div class=\"text-xs text-scandi-muted mt-0.5\">Money-Back<\/div>\r\n                <\/div>\r\n                <div class=\"bg-white rounded-xl p-4 border border-scandi-border text-center\">\r\n                  <div class=\"text-xl font-extrabold text-brand\">24\/7<\/div>\r\n                  <div class=\"text-xs text-scandi-muted mt-0.5\">Expert Support<\/div>\r\n                <\/div>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- FAQ -->\r\n    <section class=\"py-20 bg-white border-t border-scandi-border\">\r\n      <div class=\"max-w-[760px] mx-auto px-4 sm:px-6\">\r\n        <h2 class=\"text-3xl font-bold text-gray-900 text-center mb-12\">Frequently Asked Questions<\/h2>\r\n        <div class=\"space-y-4\">\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>What is an SEO audit report and why do I need one?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              An SEO audit report is a structured analysis of your webpage's search engine optimization health. It identifies issues like missing title tags, slow load times, broken links, or misconfigured robots.txt files that prevent Google from ranking your page highly. Our free tool generates a detailed SEO audit report automatically \u2014 the same analysis that agencies charge $200\u2013$500 to produce manually.\r\n            <\/div>\r\n          <\/details>\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>How do I check SEO optimization on my website for free?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              Simply paste your page URL into the field above and click \"Analyze Now.\" Our free SEO checker will instantly fetch your page, check SEO optimization across 50+ factors (including readability, security headers, and structured data), and return a scored report with clear fixes for every issue found. No sign-up, no credit card, and no limit on how many pages you can audit.\r\n            <\/div>\r\n          <\/details>\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>Does the tool check robots.txt and XML sitemaps?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              Yes. Our analyzer fetches your domain's robots.txt file and checks whether it exists, and whether it contains any Disallow rules that might block Googlebot from crawling the URL you're auditing. We also scan common sitemap locations (sitemap.xml, wp-sitemap.xml, sitemap_index.xml) to verify your sitemap exists and that the audited URL is included in it.\r\n            <\/div>\r\n          <\/details>\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>How does broken link detection work?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              The analyzer extracts all internal links from your page and sends an HTTP HEAD request to each one (up to 12 links per audit). Any link returning a 4xx or 5xx status is flagged as broken with the exact error code. Broken links waste crawl budget and create a poor user experience \u2014 fixing them is an easy SEO win.\r\n            <\/div>\r\n          <\/details>\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>How is the SEO score calculated?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              Each check is weighted by severity: Errors score 0 points (critical issues), Warnings score 1 point, Notices score 1.5 points, and Passed checks score 2 points. The total is divided by the maximum possible score and expressed as a percentage from 0\u2013100. Aim for 80+ for a well-optimised page.\r\n            <\/div>\r\n          <\/details>\r\n          <details class=\"group bg-scandi-surface rounded-xl border border-scandi-border overflow-hidden\">\r\n            <summary class=\"flex justify-between items-center font-semibold cursor-pointer p-5 text-gray-900 text-sm list-none\">\r\n              <span>What's the difference between this tool and SkySEOManager Pro?<\/span>\r\n              <span class=\"transition-transform group-open:rotate-180 text-brand flex-shrink-0 ml-3\"><svg fill=\"none\" height=\"20\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg><\/span>\r\n            <\/summary>\r\n            <div class=\"text-scandi-muted p-5 pt-0 text-sm leading-relaxed border-t border-scandi-border\">\r\n              This free SEO audit tool identifies problems one page at a time. SkySEOManager Pro is a WordPress plugin that lets you fix those problems in bulk across your entire site \u2014 using AI to auto-generate optimised titles, meta descriptions, and image alt text for every post and page simultaneously. Think of this tool as your diagnostic report, and SkySEOManager Pro as the treatment.\r\n            <\/div>\r\n          <\/details>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- Final CTA -->\r\n    <section class=\"py-20 bg-scandi-surface border-t border-scandi-border text-center\">\r\n      <div class=\"max-w-3xl mx-auto px-4\">\r\n        <h2 class=\"text-3xl md:text-4xl font-extrabold text-gray-900 mb-4\">Ready to Check Your SEO Optimization?<\/h2>\r\n        <p class=\"text-lg text-scandi-muted mb-8\">Run your free SEO audit report now \u2014 then let SkySEOManager Pro handle the bulk fixes across your entire WordPress site.<\/p>\r\n        <div class=\"flex flex-col sm:flex-row gap-4 justify-center\">\r\n          <a href=\"#\" onclick=\"window.scrollTo({top:0,behavior:'smooth'});return false;\"\r\n            class=\"inline-flex items-center justify-center px-8 py-4 bg-brand text-white font-bold rounded-xl hover:bg-brand-hover transition-colors shadow-sm\">\r\n            Get Your Free SEO Audit Report \u2192\r\n          <\/a>\r\n          <a href=\"\/skyseomanagerpro\/\"\r\n            class=\"inline-flex items-center justify-center px-8 py-4 border border-scandi-border bg-white text-gray-700 font-semibold rounded-xl hover:bg-gray-50 transition-colors\">\r\n            Get SkySEOManager Pro\r\n          <\/a>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- JS Logic inside the shortcode -->\r\n    <script>\r\n    (function () {\r\n      'use strict';\r\n\r\n      \/\/ &#x1f511; Injected safely via PHP when the shortcode renders\r\n      window.ss_seo_ajax = \"https:\/\/siteskyline.com\/wp-admin\/admin-ajax.php\";\r\n      const AJAX = window.ss_seo_ajax;\r\n\r\n      const STATUS_CFG = {\r\n        pass:    { bg:'bg-green-50',  border:'border-green-200',  badge:'bg-green-100 text-green-700',  icon:'&#x2705;', label:'Passed'  },\r\n        warning: { bg:'bg-amber-50',  border:'border-amber-200',  badge:'bg-amber-100 text-amber-700',  icon:'&#x26a0;&#xfe0f;', label:'Warning' },\r\n        error:   { bg:'bg-red-50',    border:'border-red-200',    badge:'bg-red-100 text-red-700',      icon:'&#x1f534;', label:'Error'   },\r\n        notice:  { bg:'bg-blue-50',   border:'border-blue-200',   badge:'bg-blue-100 text-blue-700',    icon:'&#x2139;&#xfe0f;', label:'Notice'  },\r\n      };\r\n\r\n      const LOADING_STEPS = [\r\n        [5,  'Fetching a fresh security token\u2026'],\r\n        [15, 'Fetching page content from the URL\u2026'],\r\n        [30, 'Checking title, meta description & headings\u2026'],\r\n        [45, 'Scanning images, links & broken links\u2026'],\r\n        [55, 'Checking robots.txt and XML sitemap\u2026'],\r\n        [65, 'Inspecting schema markup & social tags\u2026'],\r\n        [75, 'Requesting Core Web Vitals from Google\u2026'],\r\n        [88, 'Calculating your SEO score\u2026'],\r\n        [95, 'Finalising your SEO audit report\u2026'],\r\n      ];\r\n\r\n      let progressTimer = null;\r\n      let stepIdx = 0;\r\n\r\n      \/\/ \u2500\u2500 Fetch a live nonce before every request \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n      async function getFreshNonce() {\r\n        const fd = new FormData();\r\n        fd.append('action', 'ss_get_nonce');\r\n        const r = await fetch(AJAX, { method: 'POST', body: fd });\r\n        const d = await r.json();\r\n        return d.success ? d.data.nonce : '';\r\n      }\r\n\r\n      \/\/ \u2500\u2500 Main analyze \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n      window.ssSeoAnalyze = async function () {\r\n        const url     = (document.getElementById('ss-url-input').value || '').trim();\r\n        const keyword = (document.getElementById('ss-keyword-input').value || '').trim();\r\n        const errBox  = document.getElementById('ss-error-msg');\r\n        const errText = document.getElementById('ss-error-text');\r\n\r\n        errBox.classList.add('hidden');\r\n\r\n        if (!url) {\r\n          errText.textContent = 'Please enter a URL to analyze.';\r\n          errBox.classList.remove('hidden');\r\n          return;\r\n        }\r\n        if (!\/^https?:\\\/\\\/\/i.test(url)) {\r\n          errText.textContent = 'URL must start with http:\/\/ or https:\/\/';\r\n          errBox.classList.remove('hidden');\r\n          return;\r\n        }\r\n\r\n        document.getElementById('ss-results').classList.add('hidden');\r\n        document.getElementById('ss-loading').classList.remove('hidden');\r\n        setBtn(true);\r\n        startProgress();\r\n\r\n        document.getElementById('ss-loading').scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n\r\n        try {\r\n          const nonce = await getFreshNonce();\r\n          if (!nonce) throw new Error('Could not obtain security token. Please refresh the page.');\r\n\r\n          advanceProgress(2);\r\n\r\n          const fd = new FormData();\r\n          fd.append('action',  'ss_seo_analyze');\r\n          fd.append('nonce',   nonce);\r\n          fd.append('url',     url);\r\n          fd.append('keyword', keyword);\r\n\r\n          const res  = await fetch(AJAX, { method: 'POST', body: fd });\r\n          const data = await res.json();\r\n\r\n          stopProgress(100);\r\n\r\n          if (!data.success) {\r\n            throw new Error((data.data && data.data.message) || 'Analysis failed. Please try again.');\r\n          }\r\n          renderResults(data.data);\r\n        } catch (err) {\r\n          stopProgress(0);\r\n          document.getElementById('ss-loading').classList.add('hidden');\r\n          errText.textContent = err.message;\r\n          errBox.classList.remove('hidden');\r\n        } finally {\r\n          setBtn(false);\r\n        }\r\n      };\r\n\r\n      function setBtn(busy) {\r\n        const btn  = document.getElementById('ss-analyze-btn');\r\n        const txt  = document.getElementById('ss-btn-text');\r\n        const icon = document.getElementById('ss-btn-icon');\r\n        btn.disabled = busy;\r\n        txt.textContent = busy ? 'Analyzing\u2026' : 'Analyze Now';\r\n        icon.style.opacity = busy ? '0.5' : '1';\r\n      }\r\n\r\n      function startProgress() {\r\n        stepIdx = 0;\r\n        setProgress(0, LOADING_STEPS[0][1]);\r\n        progressTimer = setInterval(() => {\r\n          if (stepIdx < LOADING_STEPS.length - 1) {\r\n            stepIdx++;\r\n            setProgress(LOADING_STEPS[stepIdx][0], LOADING_STEPS[stepIdx][1]);\r\n          }\r\n        }, 3600);\r\n      }\r\n      function advanceProgress(n) {\r\n        for (let i = 0; i < n && stepIdx < LOADING_STEPS.length - 1; i++) {\r\n          stepIdx++;\r\n          setProgress(LOADING_STEPS[stepIdx][0], LOADING_STEPS[stepIdx][1]);\r\n        }\r\n      }\r\n      function stopProgress(pct) {\r\n        clearInterval(progressTimer);\r\n        if (pct) setProgress(pct, 'Done!');\r\n      }\r\n      function setProgress(pct, msg) {\r\n        const bar = document.getElementById('ss-progress-bar');\r\n        const lbl = document.getElementById('ss-loading-msg');\r\n        if (bar) bar.style.width = pct + '%';\r\n        if (lbl) lbl.textContent = msg;\r\n      }\r\n\r\n      \/\/ \u2500\u2500 Render results \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n      function renderResults(data) {\r\n        const score   = data.score  || 0;\r\n        const results = data.results || {};\r\n        const meta    = data.meta   || {};\r\n\r\n        const ring   = document.getElementById('ss-ring');\r\n        const offset = 314 - (score \/ 100) * 314;\r\n        ring.style.stroke = score >= 80 ? '#16a34a' : score >= 60 ? '#d97706' : '#dc2626';\r\n        setTimeout(() => { ring.style.strokeDashoffset = offset; }, 80);\r\n\r\n        let cur = 0;\r\n        const tick = () => {\r\n          cur = Math.min(cur + Math.max(1, Math.ceil((score - cur) \/ 8)), score);\r\n          document.getElementById('ss-score-num').textContent = cur;\r\n          if (cur < score) requestAnimationFrame(tick);\r\n        };\r\n        requestAnimationFrame(tick);\r\n\r\n        const grade = score >= 80 ? ['A', 'bg-green-100 text-green-700'] : score >= 60 ? ['B', 'bg-amber-100 text-amber-700'] : score >= 40 ? ['C', 'bg-orange-100 text-orange-700'] : ['D', 'bg-red-100 text-red-700'];\r\n        const gb = document.getElementById('ss-grade-badge');\r\n        gb.textContent = 'Grade ' + grade[0];\r\n        gb.className = 'px-3 py-1 rounded-full text-xs font-bold ' + grade[1];\r\n\r\n        document.getElementById('ss-audited-url').textContent = meta.url || '';\r\n        document.getElementById('ss-err-n').textContent    = data.errors   || 0;\r\n        document.getElementById('ss-warn-n').textContent   = data.warnings || 0;\r\n        document.getElementById('ss-notice-n').textContent = data.notices  || 0;\r\n        document.getElementById('ss-pass-n').textContent   = data.passes   || 0;\r\n\r\n        renderSerp(meta);\r\n        renderOgCard(meta);\r\n        renderTwCard(meta);\r\n\r\n        const grid = document.getElementById('ss-checks-grid');\r\n        grid.innerHTML = '';\r\n\r\n        const GROUPS = {\r\n          content:     { label: 'On-Page Content' },\r\n          technical:   { label: 'Technical SEO' },\r\n          links:       { label: 'Links & Navigation' },\r\n          media:       { label: 'Media & Images' },\r\n          performance: { label: 'Speed & UX' },\r\n          social:      { label: 'Social & Cards' }\r\n        };\r\n\r\n        Object.entries(GROUPS).forEach(([groupKey, groupInfo]) => {\r\n          const groupCards = Object.entries(results).filter(([k,v]) => v.group === groupKey);\r\n          if (groupCards.length === 0) return;\r\n\r\n          const section = document.createElement('div');\r\n          section.className = 'ss-group-section';\r\n          section.innerHTML = `\r\n            <div class=\"flex items-center gap-3 mb-6 mt-4\">\r\n              <div class=\"w-1.5 h-6 bg-brand rounded-full\"><\/div>\r\n              <h2 class=\"text-lg font-extrabold text-gray-900 uppercase tracking-wide\">${groupInfo.label}<\/h2>\r\n              <div class=\"flex-1 h-px bg-gray-100 ml-2\"><\/div>\r\n            <\/div>\r\n            <div class=\"grid md:grid-cols-2 gap-4\"><\/div>\r\n          `;\r\n          const groupGrid = section.querySelector('.grid');\r\n\r\n          groupCards.forEach(([key, check]) => {\r\n            if (!check || !check.status) return;\r\n            const s   = check.status;\r\n            const cfg = STATUS_CFG[s] || STATUS_CFG.notice;\r\n\r\n            let kwBadge = '';\r\n            if (check.keyword_found === true)  kwBadge = '<span class=\"inline-block mt-2 text-xs bg-green-100 text-green-700 px-2 py-0.5 rounded-full font-medium\">\u2713 Keyword found<\/span>';\r\n            if (check.keyword_found === false) kwBadge = '<span class=\"inline-block mt-2 text-xs bg-amber-100 text-amber-700 px-2 py-0.5 rounded-full font-medium\">&#x26a0; Keyword missing<\/span>';\r\n\r\n            let valBlock = '';\r\n            if (check.value && !['(missing)','Not detected','Not Found','Unavailable'].includes(check.value)) {\r\n              const v = String(check.value);\r\n              const short = v.length > 90 ? v.substring(0, 90) + '\u2026' : v;\r\n              valBlock = `<div class=\"mt-2 text-xs font-mono bg-white border border-gray-100 rounded-lg px-3 py-2 text-gray-600 break-all\">${esc(short)}<\/div>`;\r\n            }\r\n\r\n            if (key === 'performance' && check.data) {\r\n              const d = check.data;\r\n              valBlock = `<div class=\"mt-3 grid grid-cols-3 gap-2\">\r\n                ${['LCP','CLS','TBT'].map((k,i)=>`<div class=\"bg-white rounded-lg p-2 text-center border border-gray-100\"><div class=\"text-xs text-gray-400 mb-0.5\">${k}<\/div><div class=\"text-sm font-bold text-gray-800\">${esc([d.lcp,d.cls,d.tbt][i])}<\/div><\/div>`).join('')}\r\n              <\/div>`;\r\n            }\r\n\r\n            if (key === 'headings' && check.hierarchy) {\r\n              const hColors = { h1: 'bg-green-600 text-white', h2: 'bg-green-500 text-white', h3: 'bg-green-100 text-green-700', h4: 'bg-gray-100 text-gray-600', h5: 'bg-gray-100 text-gray-600', h6: 'bg-gray-100 text-gray-600' };\r\n              const limit = 6;\r\n              const hasMore = check.hierarchy.length > limit;\r\n              valBlock = `<div class=\"mt-4 pt-3 border-t border-gray-100\/50\">\r\n                <p class=\"text-[10px] font-extrabold text-gray-400 uppercase tracking-widest mb-3 text-left\">Content Outline<\/p>\r\n                <div class=\"ss-outline-list space-y-2 text-left\">\r\n                  ${check.hierarchy.map((h, i) => `<div class=\"flex items-start gap-2 ${i >= limit ? 'hidden ss-outline-item-extra' : 'ss-outline-item'}\" style=\"padding-left: ${(h.level - 1) * 12}px\"><span class=\"flex-shrink-0 px-1.5 py-0.5 rounded text-[9px] font-bold font-mono ${hColors[h.tag] || 'bg-gray-100'}\">&lt;${h.tag.toUpperCase()}&gt;<\/span><span class=\"text-xs text-gray-700 leading-snug flex-1\">${esc(h.text)}${h.broken ? ' <span class=\"ml-2 inline-flex items-center gap-1 px-1.5 py-0.5 bg-red-100 text-red-600 text-[9px] font-bold rounded uppercase italic tracking-tighter\">Broken Hierarchy<\/span>' : ''}<\/span><\/div>`).join('')}\r\n                <\/div>\r\n                ${hasMore ? `<button onclick=\"this.previousElementSibling.querySelectorAll('.ss-outline-item-extra').forEach(el=>el.classList.remove('hidden')); this.remove();\" class=\"mt-3 w-full py-2 border border-dashed border-gray-200 rounded-lg text-[10px] font-bold text-gray-400 hover:text-brand hover:border-brand\/30 transition-all uppercase tracking-widest flex items-center justify-center gap-2\"><span>Show Entire Outline (${check.hierarchy.length} headings)<\/span><\/button>` : ''}\r\n              <\/div>`;\r\n            }\r\n\r\n            if (key === 'broken_links' && check.broken && check.broken.length > 0) {\r\n              valBlock = '<div class=\"mt-2 space-y-1\">' + check.broken.map(b=>`<div class=\"text-xs font-mono bg-white border border-red-100 rounded-lg px-3 py-1.5 text-red-600 break-all flex justify-between gap-2\"><span class=\"truncate\">${esc(b.url)}<\/span><span class=\"flex-shrink-0 font-bold\">${b.code}<\/span><\/div>`).join('') + '<\/div>';\r\n            }\r\n\r\n            if (key === 'images' && check.missing_list && check.missing_list.length > 0) {\r\n              valBlock = `<div class=\"mt-3 pt-2 border-t border-gray-100\/50\"><p class=\"text-[10px] font-bold text-gray-400 uppercase tracking-wider mb-2 text-left\">Affected Images (Missing Alt)<\/p><div class=\"flex flex-wrap gap-2\">${check.missing_list.map(src => `<div class=\"w-10 h-10 rounded border border-gray-200 overflow-hidden bg-white shadow-xs group relative\"><img decoding=\"async\" src=\"${esc(src)}\" class=\"w-full h-full object-cover\" onerror=\"this.src='data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9IiNlZWUiLz48L3N2Zz4='\"><div class=\"absolute inset-0 bg-black\/40 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center pointer-events-none\"><span class=\"text-white text-[8px] font-bold\">Fix<\/span><\/div><\/div>`).join('')}<\/div><\/div>`;\r\n            }\r\n\r\n            let fixBlock = '';\r\n            if (check.fix) {\r\n              fixBlock = `<div class=\"mt-3 pt-3 border-t border-gray-100\"><p class=\"text-xs font-semibold text-gray-400 uppercase tracking-wide mb-1\">Recommended Fix<\/p><p class=\"text-xs text-gray-600 leading-relaxed\">${esc(check.fix)}<\/p><\/div>`;\r\n            }\r\n\r\n            const card = document.createElement('div');\r\n            card.className = `ss-check-card rounded-2xl border p-5 ${cfg.bg} ${cfg.border}`;\r\n            card.dataset.status = s;\r\n            card.dataset.group  = check.group || 'content';\r\n            card.innerHTML = `\r\n              <div class=\"flex items-start justify-between gap-3 mb-2\">\r\n                <div class=\"flex items-center gap-2 min-w-0\">\r\n                  <span class=\"text-base flex-shrink-0\">${cfg.icon}<\/span>\r\n                  <h3 class=\"font-bold text-gray-900 text-sm leading-snug\">${esc(check.label || key)}<\/h3>\r\n                <\/div>\r\n                <span class=\"flex-shrink-0 text-xs font-bold px-2 py-0.5 rounded-full ${cfg.badge}\">${cfg.label}<\/span>\r\n              <\/div>\r\n              <p class=\"text-sm text-gray-700 leading-relaxed\">${esc(check.message || '')}<\/p>\r\n              ${kwBadge}${valBlock}${fixBlock}\r\n            `;\r\n            groupGrid.appendChild(card);\r\n          });\r\n\r\n          grid.appendChild(section);\r\n        });\r\n\r\n        ssFilter('all');\r\n\r\n        document.getElementById('ss-loading').classList.add('hidden');\r\n        document.getElementById('ss-results').classList.remove('hidden');\r\n        setTimeout(() => document.getElementById('ss-results').scrollIntoView({ behavior: 'smooth', block: 'start' }), 100);\r\n      }\r\n\r\n      function renderSerp(meta) {\r\n        const title = meta.title || '(No title tag set)';\r\n        const desc  = meta.description || '(No meta description set for this page.)';\r\n        const tLen  = title.length;\r\n        const dLen  = desc.length;\r\n\r\n        document.getElementById('ss-serp-host').textContent = meta.display_url || meta.url || '';\r\n        document.getElementById('ss-serp-title').textContent = title;\r\n        document.getElementById('ss-serp-title').style.color = meta.title ? '#1a0dab' : '#999';\r\n        document.getElementById('ss-serp-url-display').textContent = meta.display_url || '';\r\n        document.getElementById('ss-serp-desc').textContent = desc.substring(0, 160);\r\n\r\n        const tBadge = document.getElementById('ss-serp-title-len');\r\n        const dBadge = document.getElementById('ss-serp-desc-len');\r\n        tBadge.innerHTML = `Title: ${tLen} chars ${tLen >= 45 && tLen <= 65 ? '&#x2705;' : tLen < 45 ? '&#x26a0; too short' : '&#x26a0; too long'}`;\r\n        tBadge.className = `text-xs px-2 py-1 rounded-full ${tLen >= 45 && tLen <= 65 ? 'bg-green-100 text-green-700' : 'bg-amber-100 text-amber-700'}`;\r\n        dBadge.innerHTML = `Description: ${dLen} chars ${dLen >= 120 && dLen <= 160 ? '&#x2705;' : dLen < 120 ? '&#x26a0; too short' : '&#x26a0; too long'}`;\r\n        dBadge.className = `text-xs px-2 py-1 rounded-full ${dLen >= 120 && dLen <= 160 ? 'bg-green-100 text-green-700' : 'bg-amber-100 text-amber-700'}`;\r\n      }\r\n\r\n      function renderOgCard(meta) {\r\n        const og  = meta.og || {};\r\n        const img = og['og:image'] || '';\r\n        const t   = og['og:title'] || meta.title || '';\r\n        const d   = og['og:description'] || meta.description || '';\r\n        const url = meta.display_url || '';\r\n\r\n        document.getElementById('ss-og-domain').textContent = url.split('\/')[0] || '';\r\n        document.getElementById('ss-og-title').textContent  = t || '(og:title not set)';\r\n        document.getElementById('ss-og-desc').textContent   = d || '(og:description not set)';\r\n\r\n        const imgEl   = document.getElementById('ss-og-img');\r\n        const noImgEl = document.getElementById('ss-og-no-img');\r\n        if (img) {\r\n          imgEl.src = img; imgEl.classList.remove('hidden'); noImgEl.classList.add('hidden');\r\n        } else {\r\n          imgEl.classList.add('hidden'); noImgEl.classList.remove('hidden');\r\n        }\r\n        const warn = document.getElementById('ss-og-warning');\r\n        const complete = t && d && img;\r\n        warn.classList.toggle('hidden', !!complete);\r\n      }\r\n\r\n      function renderTwCard(meta) {\r\n        const tw  = meta.twitter || {};\r\n        const img = tw.image || '';\r\n        const t   = tw.title || meta.title || '';\r\n        const d   = tw.description || meta.description || '';\r\n        const url = meta.display_url || '';\r\n\r\n        document.getElementById('ss-tw-title').textContent = t || '(twitter:title not set)';\r\n        document.getElementById('ss-tw-desc').textContent  = d || '(twitter:description not set)';\r\n        document.querySelector('#ss-tw-domain span').textContent = url.split('\/')[0] || '';\r\n\r\n        const imgEl   = document.getElementById('ss-tw-img');\r\n        const noImgEl = document.getElementById('ss-tw-no-img');\r\n        if (img) {\r\n          imgEl.src = img; imgEl.classList.remove('hidden'); noImgEl.classList.add('hidden');\r\n        } else {\r\n          imgEl.classList.add('hidden'); noImgEl.classList.remove('hidden');\r\n        }\r\n        const warn = document.getElementById('ss-tw-warning');\r\n        warn.classList.toggle('hidden', !!(tw.card));\r\n      }\r\n\r\n      window.ssPreviewTab = function (tab) {\r\n        ['serp','og','tw'].forEach(t => {\r\n          document.getElementById('ss-preview-' + t).classList.toggle('hidden', t !== tab);\r\n          const btn = document.getElementById('ss-ptab-' + t);\r\n          btn.className = t === tab\r\n            ? 'ss-preview-tab flex-1 py-3 text-sm font-semibold border-b-2 border-brand text-brand'\r\n            : 'ss-preview-tab flex-1 py-3 text-sm font-semibold border-b-2 border-transparent text-gray-500 hover:text-gray-800 transition-colors';\r\n        });\r\n      };\r\n\r\n      window.ssFilter = function(filter) {\r\n        document.querySelectorAll('.ss-tab').forEach(t => {\r\n          t.classList.remove('bg-brand', 'text-white');\r\n          t.classList.add('bg-white', 'text-gray-600');\r\n        });\r\n        const activeTab = document.querySelector(`.ss-tab[onclick*=\"'${filter}'\"]`);\r\n        if (activeTab) {\r\n          activeTab.classList.remove('bg-white', 'text-gray-600');\r\n          activeTab.classList.add('bg-brand', 'text-white');\r\n        }\r\n\r\n        const cards = document.querySelectorAll('.ss-check-card');\r\n        cards.forEach(card => {\r\n          const status = card.dataset.status;\r\n          const group = card.dataset.group;\r\n          let show = (filter === 'all');\r\n          if (filter === 'error') show = (status === 'error');\r\n          if (filter === 'warning') show = (status === 'warning');\r\n          if (filter === 'pass') show = (status === 'pass');\r\n          if (['content','technical','links','media','performance','social'].includes(filter)) show = (group === filter);\r\n          \r\n          card.classList.toggle('hidden', !show);\r\n        });\r\n\r\n        \/\/ Hide empty group sections\r\n        document.querySelectorAll('.ss-group-section').forEach(section => {\r\n          const visibleCards = section.querySelectorAll('.ss-check-card:not(.hidden)');\r\n          section.classList.toggle('hidden', visibleCards.length === 0);\r\n        });\r\n      };\r\n\r\n      window.ssReset = function () {\r\n        document.getElementById('ss-results').classList.add('hidden');\r\n        document.getElementById('ss-url-input').value     = '';\r\n        document.getElementById('ss-keyword-input').value = '';\r\n        window.scrollTo({ top: 0, behavior: 'smooth' });\r\n      };\r\n\r\n      function esc(s) {\r\n        return String(s||'').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');\r\n      }\r\n\r\n      ['ss-url-input','ss-keyword-input'].forEach(id => {\r\n        const el = document.getElementById(id);\r\n        if (el) el.addEventListener('keydown', e => { if (e.key === 'Enter') window.ssSeoAnalyze(); });\r\n      });\r\n\r\n      window.ssExportPDF = function() {\r\n        window.print();\r\n      };\r\n\r\n    })();\r\n    <\/script>\r\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":16994,"comment_status":"open","ping_status":"open","sticky":false,"template":"full-width-temp.php","format":"standard","meta":{"footnotes":""},"categories":[757],"tags":[],"class_list":["post-16989","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-free-tools"],"_links":{"self":[{"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/posts\/16989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/comments?post=16989"}],"version-history":[{"count":9,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/posts\/16989\/revisions"}],"predecessor-version":[{"id":17001,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/posts\/16989\/revisions\/17001"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/media\/16994"}],"wp:attachment":[{"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/media?parent=16989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/categories?post=16989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/siteskyline.com\/id\/wp-json\/wp\/v2\/tags?post=16989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}