1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta name="description" content="Connect Google Search Console to Clickport to see search queries driving Google traffic, ranking positions, click-through rates, and impressions directly inside your dashboard."> 7 <meta property="og:title" content="Google Search Console integration - Clickport Analytics Docs"> 8 <meta property="og:description" content="Connect Google Search Console to Clickport to see search queries driving Google traffic, ranking positions, click-through rates, and impressions directly inside your dashboard."> 9 <meta property="og:type" content="website"> 10 <meta property="og:image" content="https://clickport.io/landing-assets/og-home.png"> 11 <meta property="og:image:width" content="1200"> 12 <meta property="og:image:height" content="630"> 13 <meta property="og:url" content="https://clickport.io/docs/google-search-console"> 14 <meta name="theme-color" content="#08090B"> 15 <title>Google Search Console integration - Clickport Analytics Docs</title> 16 <link rel="icon" href="/favicon.ico" sizes="16x16 32x32 48x48"> 17 <link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any"> 18 <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192x192.png"> 19 <link rel="apple-touch-icon" href="/apple-touch-icon.png"> 20 <link rel="preload" href="/fonts/inter-var-latin.woff2" as="font" type="font/woff2" crossorigin> 21 <style> 22 /* Single variable file for ALL weights (100-900 axis). Never split the family 23 across files: a second file can go stale/blocked independently and the page 24 renders two Inters at once (KPI-vs-funnel incident, 2026-07-15). */ 25 @font-face { font-family: 'Inter'; font-style: normal; font-weight: 100 900; font-display: swap; src: url('/fonts/inter-var-latin.woff2') format('woff2'); } 26 *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } 27 a { color: var(--accent); text-decoration: none; } 28 /* No bare a:visited rule: its (0,1,1) specificity silently beats single-class 29 button selectors like .verify-btn/.cta-btn and turns visited CTA text accent-on-accent. */ 30 .nav-brand, .nav-brand:visited { color: var(--white); } 31 .nav-links > li > a, .nav-links > li > a:visited { color: var(--text-muted); } 32 .nav-login, .nav-login:visited { color: var(--text-muted); } 33 .btn-primary, .btn-primary:visited { color: #0d1117; } 34 .btn-accent, .btn-accent:visited { color: #0d1117; } 35 .btn-ghost, .btn-ghost:visited { color: var(--white); } 36 .dropdown a, .dropdown a:visited { color: var(--text-light); } 37 .footer-col a, .footer-col a:visited { color: var(--text-light); } 38 html { overflow-x: clip; } 39 40 :root { 41 --bg: #08090B; 42 --card: #151b23; 43 --panel: #1c2128; 44 --hover: #262d36; 45 --border: #30363d; 46 --border-light: #374151; 47 --text: #d4d4dc; 48 --text-muted: #7d8590; 49 --text-light: #9ca3af; 50 --accent: #1999D6; 51 --accent-hover: #1aa8eb; 52 --bg-alt: #10141a; 53 --white: #fff; 54 --nav-height: 52px; 55 --font: 'Inter', ui-sans-serif, system-ui, -apple-system, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; 56 } 57 58 body { 59 background: var(--bg); 60 color: var(--text); 61 font-family: var(--font); 62 -webkit-font-smoothing: antialiased; 63 -moz-osx-font-smoothing: grayscale; 64 } 65 66 /* ââ Navigation ââ */ 67 .nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(8, 9, 11, 0.85); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid rgba(48, 54, 61, 0.5); } 68 .nav-inner { max-width: 1040px; margin: 0 auto; padding: 0 24px; height: var(--nav-height); display: flex; align-items: center; justify-content: space-between; } 69 .nav-brand { display: flex; align-items: center; gap: 5px; text-decoration: none; color: var(--white); } 70 .nav-brand svg { width: 32px; height: 32px; } 71 .nav-brand span { font-size: 18px; font-weight: 500; letter-spacing: -0.3px; } 72 .nav-links { display: flex; align-items: center; gap: 8px; list-style: none; } 73 .nav-links > li { position: relative; } 74 .nav-links > li > a { color: var(--text-muted); text-decoration: none; font-size: 14px; font-weight: 500; transition: color 0.15s ease; padding: 8px 14px; display: flex; align-items: center; gap: 4px; } 75 .nav-links > li > a:hover { color: var(--text); } 76 .nav-links > li > a .chevron { width: 14px; height: 14px; transition: transform 0.2s ease; } 77 78 /* ââ Dropdown ââ */ 79 .dropdown-grid { display: grid; grid-template-columns: 1fr 1fr; } 80 .dropdown { position: absolute; top: 100%; left: 50%; transform: translateX(-50%) translateY(8px); min-width: 780px; background: var(--card); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.03); opacity: 0; visibility: hidden; transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s; transform: translateX(-50%) translateY(16px); padding: 8px; } 81 .nav-links > li:hover > .dropdown, .nav-links > li:focus-within > .dropdown { opacity: 1; visibility: visible; transform: translateX(-50%) translateY(8px); } 82 .nav-links > li:hover > a .chevron { transform: rotate(180deg); } 83 .nav-links > li:hover > a { color: var(--text); } 84 .dropdown::before { content: ''; position: absolute; top: -16px; left: 0; right: 0; height: 16px; } 85 .dropdown-item { display: flex; align-items: flex-start; gap: 14px; padding: 12px 14px; border-radius: 8px; text-decoration: none; transition: background 0.15s ease; } 86 .dropdown-item:hover { background: var(--hover); } 87 .dropdown-icon { width: 36px; height: 36px; border-radius: 8px; background: rgba(25, 153, 214, 0.1); display: flex; align-items: center; justify-content: center; flex-shrink: 0;
87 margin-top: 1px; } 88 .dropdown-icon svg { width: 18px; height: 18px; color: var(--accent); } 89 .dropdown-text .dropdown-title { display: block; font-size: 14px; font-weight: 500; color: var(--white); margin-bottom: 3px; } 90 .dropdown-text p { font-size: 13px; color: var(--text-muted); line-height: 1.4; } 91 .dropdown-footer { border-top: 1px solid var(--border); margin: 8px -8px -8px; padding: 16px 22px; display: flex; gap: 48px; border-radius: 0 0 10px 10px; background: rgba(0, 0, 0, 0.15); } 92 .dropdown-footer-col { flex: 1 1 0; min-width: 0; } 93 .dropdown-footer-col .dropdown-footer-title { display: block; font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin-bottom: 10px; } 94 .dropdown-footer-col a { display: block; font-size: 13px; color: var(--text-light); text-decoration: none; padding: 3px 0; transition: color 0.15s ease; } 95 .dropdown-footer-col a:hover { color: var(--accent); } 96 .dropdown-footer-col a .badge-soon { margin-left: 6px; } 97 .dropdown-usecases-grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: 24px; } 98 .dropdown-item .badge-soon { margin-left: auto; } 99 100 .nav-right { display: flex; align-items: center; gap: 24px; } 101 .nav-login { color: var(--text-muted); text-decoration: none; font-size: 14px; font-weight: 500; transition: color 0.15s ease; } 102 .nav-login:hover { color: var(--text); } 103 .btn-primary { display: inline-flex; align-items: center; padding: 6px 12px; background: var(--white); color: #0d1117; font-size: 14px; font-weight: 500; border-radius: 5px; text-decoration: none; transition: opacity 0.2s ease; border: none; cursor: pointer; } 104 .btn-primary:hover { opacity: 0.7; } 105 .btn-primary.btn-lg { padding: 6px 12px; font-size: 14px; border-radius: 5px; } 106 .btn-ghost { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; background: #333; color: var(--white); font-size: 14px; font-weight: 500; border-radius: 5px; text-decoration: none; transition: opacity 0.2s ease; border: none; } 107 .btn-ghost:hover { opacity: 0.7; } 108 .nav-toggle { display: none; background: none; border: none; color: var(--text-muted); cursor: pointer; padding: 4px; } 109 .mobile-menu { display: none; } 110 111 .badge-soon { display: inline-block; font-size: 9px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.4px; color: var(--text-muted); background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.08); border-radius: 3px; padding: 1px 5px; margin-left: 8px; vertical-align: middle; } 112 .footer-col a .badge-soon { margin-left: 6px; } 113 114 /* ââ Mobile nav ââ */ 115 @media (max-width: 768px) { 116 .nav-links, .nav-right { display: none; } 117 .nav-toggle { display: block; } 118 .mobile-menu.open { display: flex; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--bg); z-index: 1000; padding: 24px; flex-direction: column; } 119 .mobile-menu-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 32px; } 120 .mobile-menu-header .nav-brand { display: flex; align-items: center; gap: 5px; text-decoration: none; color: var(--white); } 121 .mobile-menu-close { background: none; border: none; color: var(--text-muted); cursor: pointer; padding: 4px; } 122 .mobile-menu-links { display: flex; flex-direction: column; } 123 .mobile-menu-links a { color: var(--white); text-decoration: none; font-size: 16px; font-weight: 500; padding: 14px 0; border-bottom: 1px solid rgba(255,255,255,0.06); } 124 .mobile-menu-section { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); padding: 20px 0 4px; } 125 .mobile-menu-section:first-child { padding-top: 0; } 126 .mobile-menu-cta { margin-top: auto; display: flex; flex-direction: column; gap: 12px; padding-top: 24px; } 127 .mobile-menu-cta .nav-login { display: block; text-align: center; padding: 12px 0; color: var(--text-muted); text-decoration: none; font-size: 14px; font-weight: 500; } 128 .mobile-menu-cta .btn-primary { text-align: center; justify-content: center; } 129 } 130 131 /* ââ Skip link (a11y, WCAG 2.4.1) ââ */ 132 .skip-link { position: absolute; top: -100px; left: 16px; background: var(--accent); color: var(--bg); padding: 10px 16px; border-radius: 6px; font-size: 14px; font-weight: 600; text-decoration: none; z-index: 1000; transition: top 0.15s ease; } 133 .skip-link:focus { top: 16px; outline: 2px solid var(--white); outline-offset: 2px; } 134 main:focus { outline: none; } 135 /* ââ Footer ââ */ 136.footer { background: var(--bg-alt); padding: 80px 24px 48px; } 137.footer-inner { max-width: 1040px; margin: 0 auto; display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr; gap: 40px; } 138.footer-brand p { font-size: 14px; line-height: 1.7; color: var(--text-muted); margin-top: 20px; max-width: 300px; } 139.footer-brand .footer-copyright { margin-top: 24px; font-size: 12px; color: var(--text-muted); opacity: 0.6; } 140.footer-col .footer-heading { display: block; font-size: 13px; font-weight: 500; color: var(--white); margin-bottom: 16px; } 141.footer-col .footer-subheading { margin-top: 24px; } 142.footer-col a { display: block; font-size: 14px; color: var(--text-muted); text-decoration: none; padding: 5px 0; transition: color 0.15s ease; } 143.footer-col a:hover { color: var(--text); } 144.footer-socials { display: flex; gap: 16px; margin-top: 24px; } 145.footer-socials a { display: flex; padding: 5px; margin: -5px; } 146.footer-socials svg { width: 18px; height: 18px; transition: opacity 0.15s ease; } 147.footer-badges { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; margin-top: 20px; } 148.footer-badge { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--text-muted); text-decoration: none; white-space: nowrap; padding: 5px 0; margin: -5px 0; } 149.footer-badge svg { width: 15px; height: 15px; flex-shrink: 0; } 150.footer-badge b { color: var(--text); font-weight: 500; } 151.footer-badge:hover b { color: #fff; } 152.footer-socials a:hover svg { opacity: 0.7; } 153.footer-bottom { max-width: 1040px; margin: 48px auto 0; padding-top: 24px; border-top: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; } 154.footer-bottom-left { font-size: 12px; color: var(--text-muted); opacity: 0.6; } 155.footer-status { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-muted); text-decoration: none; transition: color 0.15s ease; padding: 6px 0; margin: -6px 0; } 156.footer-status:hover { color: var(--text); } 157.footer-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #10b981; flex-shrink: 0; } 158.badge-soon { display: inline-block; font-size: 9px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.4px; color: var(--text-muted); background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.08); border-radius: 3px; padding: 1px 5px; margin-left: 8px; vertical-align: middle; } 159.footer-col a .badge-soon { margin-left: 6px; } 160@media (max-width: 768px) { 161 .footer-inner { grid-template-columns: 1fr 1fr; gap: 40px; } 162 .footer-brand { grid-column: 1 / -1; } 163 .footer-bottom { flex-direction: column-reverse; gap: 16px; align-items: flex-start; } 164} 165@media (max-width: 480px) { 166 .footer { padding: 60px 20px 40px; } 167 .footer-inner { grid-template-columns: 1fr; gap: 32px; } 168} 169 .docs-wrapper { 170 display: flex; 171 max-width: 1140px; 172 margin: 0 auto; 173 padding: calc(var(--nav-height) + 18px) 24px 0; 174 min-height: 100vh; 175 } 176 .docs-sidebar { 177 width: 240px; 178 flex-shrink: 0; 179 padding: 24px 0; 180 position: sticky; 181 top: var(--nav-height); 182 height: calc(100vh - var(--nav-height)); 183 overflow-y: auto; 184 border-right: 1px solid var(--border); 185 padding-right: 24px; 186 } 187 .docs-sidebar::-webkit-scrollbar { width: 4px; } 188 .docs-sidebar::-webkit-scrollbar-track { background: transparent; } 189 .docs-sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; } 190 .docs-sidebar-close { display: none; } 191 .docs-search-btn { 192 display: flex; align-items: center; gap: 8px; width: 100%; 193 padding: 8px 12px; margin-bottom: 20px; 194 background: var(--panel); border: 1px solid var(--border); border-radius: 8px; 195 color: var(--text-muted); font-size: 13px; font-family: var(--font); 196 cursor: pointer; transition: border-color 0.15s ease, color 0.15s ease; 197 } 198 .docs-search-btn:hover { border-color: var(--text-muted); color: var(--text); } 199 .docs-search-btn span { flex: 1; text-align: left; } 200 .docs-search-btn kbd { font-family: var(--font); font-size: 10px; background: rgba(255,255,255,0.04); border: 1px solid var(--border); border-radius: 3px; padding: 1px 5px; color: var(--text-muted); line-height: 1.4; } 201 .docs-category { margin-bottom: 2px; } 202 .docs-category.open { margin-bottom: 16px; } 203 .docs-category.open .docs-category-label { margin-bottom: 2px; } 204 .docs-category-label { 205 display: flex; align-items: center; justify-content: space-between; 206 width: 100%; font-size: 14px; font-weight: 500; color: var(--white); 207 background: none; border: none; padding: 8px 12px; cursor: pointer; 208 font-family: var(--font); text-align: left; 209 } 210 .docs-category-label:hover { color: var(--accent); } 211 .docs-chevron { color: var(--text-muted); transition: transform 0.15s ease; } 212 .docs-category.collapsed .docs-chevron { transform: rotate(-90deg); } 213 .docs-category.collapsed .docs-category-links { display: none; } 214 .docs-link { display: block; font-size: 14px; color: var(--text-light); text-decoration: none; padding: 6px 12px; border-radius: 6px; transition: background 0.15s ease, color 0.15s ease; } 215 .docs-link:hover { background: var(--hover); color: var(--white); } 216 .docs-link.active { background: rgba(25, 153, 214, 0.1); color: var(--accent); font-weight: 500; } 217 .docs-content { flex: 1; min-width: 0; padding: 24px 0 80px 48px; } 218 .docs-content h1 { font-size: 32px; font-weight: 500; color: var(--white); letter-spacing: -0.5px; margin-bottom: 12px; } 219 .docs-content h2 { font-size: 22px; font-weight: 500; color: var(--white); margin-top: 40px; margin-bottom: 16px; padding-bottom: 8px; border-bottom: 1px solid var(--border); } 220 .docs-content h3 { font-size: 17px; font-weight: 500; color: var(--white); margin-top: 32px; margin-bottom: 12px; } 221 .docs-content p { font-size: 15px; line-height: 1.7; color: var(--text); margin-bottom: 16px; } 222 .docs-content a { color: var(--accent); text-decoration: none; transition: color 0.15s ease; } 223 .docs-content a:hover { color: var(--accent-hover); text-decoration: underline; } 224 .docs-content ul, .docs-content ol { margin-bottom: 16px; padding-left: 24px; } 225 .docs-content li { font-size: 15px; line-height: 1.7; color: var(--text); margin-bottom: 6px; } 226 .docs-content code { font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace; font-size: 13px; background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 2px 6px; color: var(--accent); } 227 .docs-note { background: rgba(25, 153, 214, 0.08); border: 1px solid rgba(25, 153, 214, 0.2); border-radius: 8px; padding: 14px 18px; margin-bottom: 16px; font-size: 14px; line-height: 1.6; color: var(--text); } 228 .docs-note strong { color: var(--accent); } 229 .docs-warning { background: rgba(234, 179, 8, 0.06); border: 1px solid rgba(234, 179, 8, 0.2); border-radius: 8px; padding: 14px 18px; margin-bottom: 16px; font-size: 14px; line-height: 1.6; color: var(--text); } 230 .docs-warning strong { color: #eab308; } 231 .docs-nav-bottom { display: flex; justify-content: space-between; gap: 16px; margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--border); } 232 .docs-nav-bottom a { display: flex; flex-direction: column; gap: 4px; padding: 14px 18px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; text-decoration: none; transition: border-color 0.15s ease, background 0.15s ease; min-width: 0; } 233 .docs-nav-bottom a:hover { border-color: var(--accent); background: var(--panel); text-decoration: none; } 234 .docs-nav-bottom .nav-label { font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.3px; } 235 .docs-nav-bottom .nav-title { font-size: 14px; font-weight: 500; color: var(--accent); } 236 .docs-nav-bottom .next { margin-left: auto; text-align: right; } 237 .docs-menu-btn { display: none; position: fixed; bottom: 24px; right: 24px; z-index: 90; background: var(--accent); color: var(--white); border: none; border-radius: 12px; padding: 12px 18px; font-size: 14px; font-weight: 500; cursor: pointer; box-shadow: 0 4px 20px rgba(0,0,0,0.4); align-items: center; gap: 8px; font-family: var(--font); } 238 239 /* ââ UI Mockups ââ */ 240 .mockup { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 20px; margin: 20px 0; pointer-events: none; user-select: none; } 241 .mockup-label { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin-bottom: 6px; } 242 .mockup-title { font-size: 15px; font-weight: 500; color: var(--white); margin-bottom: 4px; } 243 .mockup-subtitle { font-size: 12px; color: var(--text-muted); margin-bottom: 20px; } 244 .mockup-divider { border: none; border-top: 1px solid var(--border); margin: 16px 0; } 245 246 /* Settings card mockup */ 247 .gsc-settings { background: var(--card); border-radius: 8px; padding: 18px 22px; } 248 .gsc-settings-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 6px; gap: 12px; } 249 .gsc-settings-title { font-size: 13px; font-weight: 600; color: var(--white); } 250 .gsc-settings-link { font-size: 12px; color: var(--accent); text-decoration: none; } 251 .gsc-settings-desc { font-size: 13px; color: var(--text-muted); line-height: 1.5; margin-bottom: 14px; } 252 .gsc-settings-account { background: var(--panel); border: 1px solid var(--border); border-radius: 6px; padding: 12px 14px; margin-bottom: 12px; } 253 .gsc-settings-account-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--white); } 254 .gsc-settings-account-row .g { font-size: 12px; } 255 .gsc-settings-account-prop { font-size: 12px; color: var(--text-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; margin-top: 4px; } 256 .gsc-settings-actions { display: flex; gap: 8px; } 257 .gsc-btn { font-size: 13px; padding: 8px 14px; border-radius: 6px; border: 1px solid var(--border); background: transparent; color: var(--text); font-family: var(--font); } 258 .gsc-btn.danger { color: #ef4444; } 259 260 /* Sub-tab mockup */ 261 .gsc-tabs { background: var(--card); border-radius: 6px; padding: 16px; } 262 .gsc-mainrow { display: flex; gap: 28px; margin-bottom: 12px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); font-weight: 500; } 263 .gsc-mainrow .active { color: var(--accent); } 264 .gsc-subrow { display: flex; gap: 18px; padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1px solid var(--border); font-size: 12px; color: var(--text-muted); } 265 .gsc-subrow .active { color: var(--accent); font-weight: 500; } 266 .gsc-keyword-header { display: flex; gap: 12px; font-size: 10px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; padding: 6px 4px; border-bottom: 1px solid var(--border); } 267 .gsc-keyword-header .arrow { color: var(--white); } 268 .gsc-keyword-row { display: flex; gap: 12px; align-items: center; padding: 5px 4px; font-size: 13px; color: var(--text); border-radius: 3px; } 269 .gsc-keyword-row.alt { background: rgba(255,255,255,0.02); } 270 .gsc-keyword-row .q { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } 271 .gsc-keyword-row .num { width: 55px; text-align: right; font-weight: 500; color: var(--white); } 272 .gsc-keyword-row .impr { width: 70px; text-align: right; } 273 .gsc-keyword-row .ctr, .gsc-keyword-row .pos { width: 55px; text-align: right; } 274 275 /* Picker mockup */ 276 .gsc-picker { background: var(--card); border-radius: 8px; padding: 1
2768px 22px; } 277 .gsc-picker-label { font-size: 11px; font-weight: 500; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; } 278 .gsc-picker-select { width: 100%; padding: 10px 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 6px; color: var(--white); font-size: 14px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; margin-bottom: 10px; display: flex; justify-content: space-between; align-items: center; } 279 .gsc-picker-options { background: var(--panel); border: 1px solid var(--border); border-radius: 6px; padding: 4px 0; margin-bottom: 12px; } 280 .gsc-picker-option { padding: 8px 12px; font-size: 13px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--text); } 281 .gsc-picker-option.highlight { background: rgba(25, 153, 214, 0.1); color: var(--accent); } 282 .gsc-picker-save { font-size: 13px; padding: 8px 16px; background: var(--accent); color: var(--white); border-radius: 6px; display: inline-block; font-weight: 500; } 283 284 @media (max-width: 768px) { 285 .docs-wrapper { padding: 64px 0 0; } 286 .docs-sidebar { position: fixed; top: 0; left: 0; bottom: 0; width: 280px; z-index: 200; background: var(--bg); border-right: 1px solid var(--border); padding: 20px; transform: translateX(-100%); transition: transform 0.25s ease; height: 100%; } 287 .docs-sidebar.open { transform: translateX(0); } 288 .docs-sidebar-close { display: flex; align-items: center; justify-content: center; background: none; border: none; color: var(--text-muted); cursor: pointer; padding: 4px; margin-bottom: 16px; margin-left: auto; } 289 .docs-menu-btn { display: flex; } 290 .docs-content { padding: 24px 24px 80px; } 291 .docs-nav-bottom { flex-direction: column; } 292 .docs-nav-bottom .next { margin-left: 0; text-align: left; } 293 .mockup { padding: 18px; } 294 } 295 @media (max-width: 600px) { 296 .gsc-mainrow, .gsc-subrow { flex-wrap: wrap; row-gap: 6px; } 297 .gsc-keyword-row, .gsc-keyword-header { gap: 8px; } 298 .gsc-keyword-row .impr { display: none; } 299 .gsc-keyword-header span:nth-child(3) { display: none !important; } 300 } 301 </style> 302
302<script defer data-domain="clickport.io" 303 src="https://clickport.io/tracker.js"></script>
303 304 <link rel="canonical" href="https://clickport.io/docs/google-search-console"> 305 <meta name="twitter:card" content="summary_large_image"> 306 <meta name="twitter:image" content="https://clickport.io/landing-assets/og-home.png"> 307
307<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://clickport.io/#organization","name":"Clickport Analytics","url":"https://clickport.io","logo":{"@type":"ImageObject","url":"https://clickport.io/landing-assets/og-home.png"},"description":"Privacy-friendly engagement analytics. No cookies, no consent banners, hosted in the EU.","founder":{"@id":"https://clickport.io/about#person"},"sameAs":["https://x.com/deekayonx","https://www.linkedin.com/in/davidkarpik/","https://www.producthunt.com/products/clickport-analytics"]}</script>
307 308
308<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://clickport.io"},{"@type":"ListItem","position":2,"name":"Docs","item":"https://clickport.io/docs"},{"@type":"ListItem","position":3,"name":"Google Search Console"}]}</script>
308 309</head> 310<body> 311 312 <a href="#main-content" class="skip-link">Skip to main content</a> 313 <nav class="nav" data-pagefind-ignore> 314 <div class="nav-inner"> 315 <a href="/" class="nav-brand"> 316 <svg viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg"> 317 <path d="M40 10H22L10 24V40L22 54H40V46H28L20 36V28L28 18H40Z" fill="#fff"/> 318 </svg> 319 <span>Clickport</span> 320 </a> 321 322 <ul class="nav-links"> 323 <!-- Solutions dropdown --> 324 <li> 325 <a href="#solutions"> 326 Solutions 327 <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg> 328 </a> 329 <div class="dropdown"> 330 <div class="dropdown-grid"> 331 <a href="/agencies" class="dropdown-item"> 332 <div class="dropdown-icon"> 333 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg> 334 </div> 335 <div class="dropdown-text"> 336 <span class="dropdown-title">For agencies</span> 337 <p>Per-client dashboards, share links, one-click reports.</p> 338 </div> 339 </a> 340 <a href="/saas" class="dropdown-item"> 341 <div class="dropdown-icon"> 342 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg> 343 </div> 344 <div class="dropdown-text"> 345 <span class="dropdown-title">For SaaS</span> 346 <p>Signups, activation, and channel-level attribution.</p> 347 </div> 348 </a> 349 <a href="/ecommerce" class="dropdown-item"> 350 <div class="dropdown-icon"> 351 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></svg> 352 </div> 353 <div class="dropdown-text"> 354 <span class="dropdown-title">For e-commerce</span> 355 <p>Purchase tracking, revenue per source, product views.</p> 356 </div> 357 </a> 358 <a href="/affiliates" class="dropdown-item"> 359 <div class="dropdown-icon"> 360 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg> 361 </div> 362 <div class="dropdown-text"> 363 <span class="dropdown-title">For affiliates</span> 364 <p>Outbound clicks, partner attribution, revenue goals.</p> 365 </div> 366 </a> 367 <a href="/publishers" class="dropdown-item"> 368 <div class="dropdown-icon"> 369 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8"/><path d="M15 18h-5"/><path d="M10 6h8v4h-8z"/></svg> 370 </div> 371 <div class="dropdown-text"> 372 <span class="dropdown-title">For publishers & bloggers</span> 373 <p>Engagement per story, AI traffic, newsletter growth.</p> 374 </div> 375 </a> 376 <a href="/enterprise" class="dropdown-item"> 377 <div class="dropdown-icon"> 378 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="2" width="16" height="20" rx="2"/><path d="M9 22v-4h6v4"/><path d="M8 6h.01M16 6h.01M12 6h.01M8 10h.01M16 10h.01M12 10h.01M8 14h.01M16 14h.01M12 14h.01"/></svg> 379 </div> 380 <div class="dropdown-text">
381 <span class="dropdown-title">For enterprise</span> 382 <p>German analytics hosting, security details, and purchasing terms.</p> 383 </div> 384 </a> 385 </div> 386 <div class="dropdown-footer"> 387 <div class="dropdown-footer-col"> 388 <span class="dropdown-footer-title">Integrations</span> 389 <a href="/docs/google-search-console">Google Search Console</a> 390 <a href="/docs/bing-webmaster-tools">Bing Webmaster Tools</a> 391 <a href="/docs/wordpress">WordPress</a> 392 <a href="/docs/shopify">Shopify</a> 393 </div> 394 <div class="dropdown-footer-col"> 395 <span class="dropdown-footer-title">Developer</span> 396 <a href="/docs/installation">Tracker install</a> 397 <a href="/docs/spa-tracking">SPA tracking</a> 398 <a href="/docs/custom-events">Custom Events</a> 399 <a href="/docs/api">API reference</a> 400 </div> 401 <div class="dropdown-footer-col"> 402 <span class="dropdown-footer-title">Comparisons</span> 403 <a href="/blog/clickport-vs-google-analytics">vs Google Analytics</a> 404 <a href="/blog/clickport-vs-matomo">vs Matomo</a> 405 <a href="/blog/clickport-vs-cloudflare-analytics">vs Cloudflare</a> 406 </div> 407 </div> 408 </div> 409 </li> 410 411 <!-- Resources dropdown --> 412 <li> 413 <a href="#resources"> 414 Resources 415 <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg> 416 </a> 417 <div class="dropdown" style="min-width: 720px;"> 418 <div class="dropdown-grid"> 419 <a href="/migrate-from-google-analytics" class="dropdown-item"> 420 <div class="dropdown-icon"> 421 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 1 1-3-6.7"/><polyline points="21 3 21 9 15 9"/></svg> 422 </div> 423 <div class="dropdown-text"> 424 <span class="dropdown-title">Migrate from Google Analytics</span> 425 <p>Six steps to switch, with your GA4 history imported.</p> 426 </div> 427 </a> 428 <a href="/blog" class="dropdown-item"> 429 <div class="dropdown-icon"> 430 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg> 431 </div> 432 <div class="dropdown-text"> 433 <span class="dropdown-title">Blog</span> 434 <p>Tips, tutorials, and analytics insights.</p> 435 </div> 436 </a> 437 <a href="/updates" class="dropdown-item"> 438 <div class="dropdown-icon"> 439 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 8v4l3 3"/><circle cx="12" cy="12" r="10"/></svg> 440 </div> 441 <div class="dropdown-text"> 442 <span class="dropdown-title">Updates</span> 443 <p>New features, improvements, and what we shipped recently.</p> 444 </div> 445 </a> 446 <a href="/docs" class="dropdown-item"> 447 <div class="dropdown-icon"> 448 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg> 449 </div> 450 <div class="dropdown-text"> 451 <span class="dropdown-title">Documentation</span> 452 <p>Setup guides, tracker configuration, and API reference.</p> 453 </div> 454 </a> 455 </div> 456 <div class="dropdown-footer"> 457 <div class="dropdown-footer-col">
458 <span class="dropdown-footer-title">Support</span> 459 <a href="/contact">Contact us</a> 460 <a href="/status">Status page</a> 461 <a href="/security">Security</a> 462 <a href="/how-it-works">How it works</a> 463 </div> 464 <div class="dropdown-footer-col"> 465 <span class="dropdown-footer-title">Tools</span> 466 <a href="/utm-builder">UTM Builder</a> 467 <a href="/gdpr-checker">GDPR Checker</a> 468 <a href="/ga4-data-loss-estimator">GA4 Data Loss Estimator</a> 469 </div> 470 <div class="dropdown-footer-col"> 471 <span class="dropdown-footer-title">Topics</span> 472 <a href="/is-google-analytics-legal">Is Google Analytics legal?</a> 473 <a href="/blog/track-ai-search-traffic">AI Search Traffic</a> 474 <a href="/lightweight-web-analytics">Lightweight Analytics</a> 475 </div> 476 </div> 477 </div> 478 </li> 479 480 <!-- Simple links --> 481 <li><a href="/#pricing">Pricing</a></li> 482 </ul> 483 484 <div class="nav-right"> 485 <a href="/login" class="nav-login">Login</a> 486 <a href="/login?register" class="btn-primary">Start free trial</a> 487 </div> 488 489 <button class="nav-toggle" aria-label="Menu"> 490 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg> 491 </button> 492 </div> 493 </nav> 494 495 <!-- Click-based dropdown override (applied after per-page hover styles) --> 496 <style> 497 .nav-links > li:hover > .dropdown, 498 .nav-links > li:focus-within > .dropdown { opacity: 0 !important; visibility: hidden !important; transform: translateX(-50%) translateY(16px) !important; } 499 .nav-links > li:hover > a .chevron { transform: none !important; } 500 .nav-links > li.open > .dropdown { opacity: 1 !important; visibility: visible !important; transform: translateX(-50%) translateY(8px) !important; } 501 .nav-links > li.open > a .chevron { transform: rotate(180deg) !important; } 502 .nav-links > li.open > a { color: var(--text) !important; } 503 </style> 504
504<script> 505 (function() { 506 document.addEventListener('click', function(e) { 507 var toggle = e.target.closest('.nav-links > li > a'); 508 if (toggle && toggle.parentElement.querySelector('.dropdown')) { 509 e.preventDefault(); 510 var li = toggle.parentElement; 511 var wasOpen = li.classList.contains('open'); 512 document.querySelectorAll('.nav-links > li.open').forEach(function(el) { el.classList.remove('open'); }); 513 if (!wasOpen) li.classList.add('open'); 514 return; 515 } 516 if (!e.target.closest('.dropdown')) { 517 document.querySelectorAll('.nav-links > li.open').forEach(function(el) { el.classList.remove('open'); }); 518 } 519 }); 520 })(); 521 </script>
521 522 523 <!-- main element opened here, closed in footer.html --> 524 <main id="main-content" tabindex="-1"> 525 526 527<style> 528.mobile-section { border-bottom: 1px solid var(--border); } 529.mobile-section:last-child { border-bottom: none; } 530.mobile-section-toggle { 531 display: flex; align-items: center; justify-content: space-between; 532 width: 100%; padding: 14px 0; background: none; border: none; 533 color: var(--text-secondary); font-size: 11px; font-weight: 500; 534 letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; 535} 536.mobile-section-chevron { 537 width: 16px; height: 16px; transition: transform 0.25s ease; 538} 539.mobile-section.open .mobile-section-chevron { transform: rotate(180deg); } 540.mobile-section-items { 541 max-height: 0; overflow: hidden; transition: max-height 0.3s ease; 542} 543.mobile-section.open .mobile-section-items { max-height: 800px; } 544.mobile-section-items { display: flex; flex-direction: column; } 545.mobile-section-items a { padding: 10px 0 10px 8px; font-size: 14px; font-weight: 500; color: var(--text-muted); } 546.mobile-menu-cta { margin-top: 0 !important; padding-top: 0 !important; padding-bottom: 16px; border-bottom: 1px solid var(--border); } 547</style> 548<div class="mobile-menu" id="mobile-menu" data-pagefind-ignore> 549 <div class="mobile-menu-header"> 550 <a href="#" class="nav-brand"><svg viewBox="0 0 64 64" width="28" height="28" fill="none"><path d="M40 10H22L10 24V40L22 54H40V46H28L20 36V28L28 18H40Z" fill="#fff"/></svg><span>Clickport</span></a> 551 <button class="mobile-menu-close" aria-label="Close menu"> 552 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> 553 </button> 554 </div> 555 <div class="mobile-menu-cta"> 556 <a href="/login" class="nav-login">Login</a> 557 <a href="/login?register" class="btn-primary">Start free trial</a> 558 <a href="/#pricing" class="nav-login">Pricing</a> 559 </div> 560 <div class="mobile-menu-links"> 561 <div class="mobile-section"> 562 <button class="mobile-section-toggle" type="button"> 563 Solutions 564 <svg class="mobile-section-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg> 565 </button> 566 <div class="mobile-section-items"> 567 <a href="/agencies">For agencies</a> 568 <a href="/saas">For SaaS</a> 569 <a href="/ecommerce">For e-commerce</a> 570 <a href="/affiliates">For affiliates</a> 571 <a href="/publishers">For publishers & bloggers</a> 572 <a href="/enterprise">For enterprise</a> 573 <a href="/docs/google-search-console">Google Search Console</a> 574 <a href="/docs/bing-webmaster-tools">Bing Webmaster Tools</a> 575 <a href="/docs/wordpress">WordPress</a> 576 <a href="/docs/shopify">Shopify</a> 577 <a href="/docs/installation">Tracker install</a> 578 <a href="/docs/spa-tracking">SPA tracking</a> 579 <a href="/docs/custom-events">Custom Events</a> 580 <a href="/docs/api">API reference</a> 581 <a href="/blog/clickport-vs-google-analytics">vs Google Analytics</a> 582 <a href="/blog/clickport-vs-matomo">vs Matomo</a> 583 <a href="/blog/clickport-vs-cloudflare-analytics">vs Cloudflare</a> 584 </div> 585 </div> 586 <div class="mobile-section"> 587 <button class="mobile-section-toggle" type="button"> 588 Resources 589 <svg class="mobile-section-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg> 590 </button> 591 <div class="mobile-section-items"> 592 <a href="/migrate-from-google-analytics">Migrate from Google Analytics</a> 593 <a href="/blog">Blog</a> 594 <a href="/updates">Updates</a> 595 <a href="/docs">Documentation</a> 596 <a href="/utm-builder">UTM Builder</a> 597 <a href="/gdpr-checker">GDPR Checker</a> 598 <a href="/ga4-data-loss-estimator">GA4 Data Loss Estimator</a> 599 <a href="/is-google-analytics-legal">Is Google Analytics legal?</a> 600 <a href="/about">About</a> 601 <a href="/contact">Contact</a> 602 <a href="/status">Status</a> 603 <a href="/security">Security</a> 604 <a href="/how-it-works">How it works</a> 605 </div> 606 </div> 607 </div> 608</div> 609 610 <div class="docs-wrapper"> 611 <aside class="docs-sidebar" id="docs-sidebar" data-pagefind-ignore> 612 <button class="docs-sidebar-close" id="docs-sidebar-close" aria-label="Close menu"> 613 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> 614 </button> 615 <button class="docs-search-btn" onclick="window.openClickportSearch&&window.openClickportSearch()" type="button"> 616 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
617 <span>Search docs...</span> 618 <kbd>⌘K</kbd> 619 </button> 620 <nav class="docs-nav"> 621 <div class="docs-category"> 622 <button class="docs-category-label" type="button">Getting Started<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 623 <div class="docs-category-links"> 624 <a href="/docs" class="docs-link">Welcome</a> 625 <a href="/docs/installation" class="docs-link">Installation</a> 626 <a href="/docs/your-first-dashboard" class="docs-link">Your First Dashboard</a> 627 <a href="/docs/troubleshooting" class="docs-link">Troubleshooting</a> 628 </div> 629 </div> 630 <div class="docs-category"> 631 <button class="docs-category-label" type="button">Dashboard<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 632 <div class="docs-category-links"> 633 <a href="/docs/kpis" class="docs-link">KPIs</a> 634 <a href="/docs/panels" class="docs-link">Panels</a> 635 <a href="/docs/campaigns" class="docs-link">Campaigns</a> 636 <a href="/docs/language" class="docs-link">Language</a> 637 <a href="/docs/metric-lens" class="docs-link">Metric Lens</a> 638 <a href="/docs/resizable-layout" class="docs-link">Resizable Layout</a> 639 <a href="/docs/filters" class="docs-link">Filters</a> 640 <a href="/docs/sessions" class="docs-link">Sessions</a> 641 <a href="/docs/date-ranges" class="docs-link">Date Ranges</a> 642 <a href="/docs/realtime" class="docs-link">Realtime</a> 643 <a href="/docs/drag-to-zoom" class="docs-link">Drag to Zoom</a> 644 <a href="/docs/command-palette" class="docs-link">Command Palette</a> 645 <a href="/docs/metrics" class="docs-link">Metrics Definitions</a> 646 <a href="/docs/faq" class="docs-link">FAQ</a> 647 </div> 648 </div> 649 <div class="docs-category"> 650 <button class="docs-category-label" type="button">Tracking<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 651 <div class="docs-category-links"> 652 <a href="/docs/goals" class="docs-link">Goals</a> 653 <a href="/docs/funnels" class="docs-link">Funnels</a> 654 <a href="/docs/flows" class="docs-link">Flows</a> 655 <a href="/docs/experiments" class="docs-link">Experiments</a> 656 <a href="/docs/custom-events" class="docs-link">Custom Events</a> 657 <a href="/docs/custom-properties" class="docs-link">Custom Properties</a> 658 <a href="/docs/ecommerce" class="docs-link">Ecommerce Revenue</a> 659 <a href="/docs/engagement" class="docs-link">Engagement</a> 660 <a href="/docs/signals" class="docs-link">Signals</a> 661 <a href="/docs/rage-clicks" class="docs-link" style="padding-left: 24px;">Rage Clicks</a> 662 <a href="/docs/dead-clicks" class="docs-link" style="padding-left: 24px;">Dead Clicks</a> 663 <a href="/docs/copied-text" class="docs-link" style="padding-left: 24px;">Copied Text</a> 664 <a href="/docs/script-errors" class="docs-link" style="padding-left: 24px;">Script Errors</a> 665 <a href="/docs/form-abandonment" class="docs-link" style="padding-left: 24px;">Form Abandonment</a> 666 <a href="/docs/print-tracking" class="docs-link" style="padding-left: 24px;">Print Tracking</a> 667 <a href="/docs/outbound-links" class="docs-link">Outbound Links</a> 668 <a href="/docs/forms" class="docs-link">Forms</a> 669 <a href="/docs/file-downloads" class="docs-link">File Downloads</a> 670 <a href="/docs/404-tracking" class="docs-link">404 Tracking</a> 671 <a href="/docs/site-search" class="docs-link">Site Search</a> 672 <a href="/docs/utm-tracking" class="docs-link">UTM Tracking</a> 673 <a href="/docs/channels" class="docs-link">Channels</a> 674 <a href="/docs/api" class="docs-link">API Reference</a> 675 <a href="/docs/mcp" class="docs-link">MCP Server</a> 676 <a href="/docs/mcp-use-cases" class="docs-link" style="padding-left: 24px;">MCP Use Cases</a> 677 </div> 678 </div> 679 <div class="docs-category"> 680 <button class="docs-category-label" type="button">Settings<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 681 <div class="docs-category-links"> 682 <a href="/docs/sites-overview" class="docs-link">Sites Overview</a> 683 <a href="/docs/site-management" class="docs-link">Site Management</a> 684 <a href="/docs/share-links" class="docs-link">Share Links</a> 685 <a href="/docs/embed-widget" class="docs-link">Embed Widget</a> 686 <a href="/docs/public-dashboard" class="docs-link">Public Dashboard</a> 687 <a href="/docs/teams" class="docs-link">Teams &
687 People</a> 688 <a href="/docs/theme" class="docs-link">Theme</a> 689 <a href="/docs/chart-colors" class="docs-link">Dashboard Colors</a> 690 <a href="/docs/graph-lines" class="docs-link">Graph Lines</a> 691 <a href="/docs/weekend-shading" class="docs-link">Weekend Shading</a> 692 <a href="/docs/show-annotations" class="docs-link">Annotations</a> 693 <a href="/docs/tracking-rules" class="docs-link">Tracking Rules</a> 694 <a href="/docs/tracking-rules-ip" class="docs-link" style="padding-left: 24px;">IP addresses</a> 695 <a href="/docs/tracking-rules-countries" class="docs-link" style="padding-left: 24px;">Countries</a> 696 <a href="/docs/tracking-rules-pages" class="docs-link" style="padding-left: 24px;">Pages</a> 697 <a href="/docs/tracking-rules-hostnames" class="docs-link" style="padding-left: 24px;">Hostnames</a> 698 <a href="/docs/exclude-your-visits" class="docs-link">Exclude Your Visits</a> 699 <a href="/docs/billing" class="docs-link">Billing & Subscription</a> 700 <a href="/docs/bot-management" class="docs-link">Bot Center</a> 701 <a href="/docs/ai-crawlers" class="docs-link" style="padding-left: 24px;">AI Crawlers</a> 702 <a href="/docs/email-reports" class="docs-link">Email Reports</a> 703 <a href="/docs/alerts" class="docs-link">Traffic Alerts</a> 704 <a href="/docs/reports" class="docs-link">Reports & Exports</a> 705 <a href="/docs/export-data" class="docs-link">Export Data (full ZIP)</a> 706 <a href="/docs/import-data" class="docs-link">Import Data (GA4 / CSV)</a> 707 </div> 708 </div> 709 <div class="docs-category"> 710 <button class="docs-category-label" type="button">Integrations<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 711 <div class="docs-category-links"> 712 <a href="/docs/ai-agents" class="docs-link">AI Agents</a> 713 <a href="/docs/stripe-revenue" class="docs-link">Stripe Revenue</a> 714 <a href="/docs/paddle-revenue" class="docs-link">Paddle Revenue</a> 715 <a href="/docs/google-ads-conversions" class="docs-link">Google Ads Conversions</a> 716 <a href="/docs/reporting-currency" class="docs-link">Reporting Currency</a> 717 <a href="/docs/google-search-console" class="docs-link">Google Search Console</a> 718 <a href="/docs/bing-webmaster-tools" class="docs-link">Bing Webmaster Tools</a> 719 <a href="/docs/wordpress" class="docs-link">WordPress</a> 720 <a href="/docs/shopify" class="docs-link">Shopify</a> 721 <a href="/docs/webflow" class="docs-link">Webflow</a> 722 <a href="/docs/squarespace" class="docs-link">Squarespace</a> 723 <a href="/docs/framer" class="docs-link">Framer</a> 724 <a href="/docs/wix" class="docs-link">Wix</a> 725 <a href="/docs/ghost" class="docs-link">Ghost</a> 726 <a href="/docs/google-tag-manager" class="docs-link">Google Tag Manager</a> 727 <a href="/docs/nextjs" class="docs-link">Next.js</a> 728 <a href="/docs/hugo" class="docs-link">Hugo</a> 729 <a href="/docs/spa-tracking" class="docs-link">SPA Tracking</a> 730 <a href="/docs/script-configuration" class="docs-link">Script Configuration</a> 731 <a href="/docs/proxy" class="docs-link">Proxy Setup</a> 732 <a href="/docs/chrome-extension" class="docs-link">Chrome Extension</a> 733 </div> 734 </div> 735 <div class="docs-category"> 736 <button class="docs-category-label" type="button">Account<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 737 <div class="docs-category-links"> 738 <a href="/docs/2fa" class="docs-link">Two-factor authentication</a> 739 <a href="/docs/change-email" class="docs-link">Change Email</a> 740 <a href="/docs/change-password" class="docs-link">Change Password</a> 741 <a href="/docs/connected-accounts" class="docs-link">Connected Accounts</a> 742 <a href="/docs/login-management" class="docs-link">Login Management</a> 743 <a href="/docs/audit-trail" class="docs-link">
743Activity Log</a> 744 <a href="/docs/delete-account" class="docs-link">Delete Account</a> 745 </div> 746 </div> 747 <div class="docs-category"> 748 <button class="docs-category-label" type="button">Privacy<svg class="docs-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><polyline points="6 9 12 15 18 9"/></svg></button> 749 <div class="docs-category-links"> 750 <a href="/docs/privacy-overview" class="docs-link">Privacy Overview</a> 751 <a href="/docs/gdpr-compliance" class="docs-link">GDPR Compliance</a> 752 </div> 753 </div> 754 </nav> 755 </aside> 756 757 <button class="docs-menu-btn" id="docs-menu-btn" aria-label="Docs menu"> 758 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg> Menu 759 </button> 760 761 <div class="docs-content" data-pagefind-body> 762 763
763<script> 764 (function() { 765 var sidebar = document.getElementById('docs-sidebar'); 766 var closeBtn = document.getElementById('docs-sidebar-close'); 767 var menuBtn = document.getElementById('docs-menu-btn'); 768 var path = location.pathname.replace(/\/$/, '') || '/docs'; 769 770 // Active link highlighting + auto-expand active category 771 var links = sidebar.querySelectorAll('.docs-link'); 772 for (var i = 0; i < links.length; i++) { 773 var href = links[i].getAttribute('href').replace(/\/$/, ''); 774 if (href === path) { 775 links[i].classList.add('active'); 776 // Expand the category containing the active link 777 var cat = links[i].closest('.docs-category'); 778 if (cat) cat.classList.add('open'); 779 } 780 } 781 782 // Collapse categories that don't contain the active link 783 var categories = sidebar.querySelectorAll('.docs-category'); 784 for (var j = 0; j < categories.length; j++) { 785 if (!categories[j].classList.contains('open')) { 786 categories[j].classList.add('collapsed'); 787 } 788 } 789 790 // Category toggle 791 var labels = sidebar.querySelectorAll('.docs-category-label'); 792 for (var k = 0; k < labels.length; k++) { 793 labels[k].addEventListener('click', function() { 794 var cat = this.closest('.docs-category'); 795 cat.classList.toggle('collapsed'); 796 cat.classList.toggle('open'); 797 }); 798 } 799 800 // Mobile sidebar toggle 801 function openSidebar() { 802 sidebar.classList.add('open'); 803 document.body.style.overflow = 'hidden'; 804 } 805 function closeSidebar() { 806 sidebar.classList.remove('open'); 807 document.body.style.overflow = ''; 808 } 809 810 if (closeBtn) closeBtn.addEventListener('click', closeSidebar); 811 if (menuBtn) menuBtn.addEventListener('click', openSidebar); 812 })(); 813 </script>
813 814 815 816 <h1>Google Search Console integration</h1> 817 <p>Connect Google Search Console to your Clickport site and the search queries that drive Google traffic show up directly inside your Sources panel. You get the keywords, ranking positions, click-through rates, and impressions next to your visit data, with the same date range and filters you already use.</p> 818 819 <div class="docs-note"> 820 <strong>Why this exists.</strong> Since 2012, Google has stripped search terms from the <code>Referer</code> header for privacy reasons. The only way to recover that data is through Search Console, which Google offers free to any site owner. This integration plugs Search Console into Clickport so you can answer questions like "which keyword brings the most engaged traffic to my pricing page?" without leaving the dashboard.</p> 821 </div> 822 823 <p>If you also rank on Bing, DuckDuckGo, Ecosia, Yahoo, or Brave Search (all five run on Bing's index), the parallel <a href="/docs/bing-webmaster-tools">Bing Webmaster Tools integration</a> surfaces the same shape of data in a sister sub-tab.</p> 824 825 <h2>What you see in the dashboard</h2> 826 <p>Once connected, a new <strong>GSC</strong> sub-tab appears in the Sources panel between Sources and URLs. It lists your top search queries with clicks, impressions, CTR, and average position. Each column is sortable. Long queries truncate with a hover tooltip to show the full text. The <em>Show more</em> button at the bottom appends another 50 keywords per click.</p> 827 828 <div class="mockup"> 829 <div class="mockup-label">Sources panel · GSC tab</div> 830 <div class="mockup-title">Search Console keywords appear next to your other source data</div> 831 <div class="mockup-subtitle">Same date range, same filters, no leaving the dashboard.</div> 832 <div class="gsc-tabs"> 833 <div class="gsc-mainrow"> 834 <span class="active">Sources</span><span>Locations</span><span>Technologies</span><span>Campaigns</span> 835 </div> 836 <div class="gsc-subrow"> 837 <span>Channels</span><span>Sources</span><span class="active">GSC</span><span>URLs</span> 838 </div> 839 <div class="gsc-keyword-header"> 840 <span style="flex:1; min-width:0;">Query</span> 841 <span style="width:55px; text-align:right;" class="arrow">Clicks â</span> 842 <span style="width:70px; text-align:right;">Impr.</span> 843 <span style="width:55px; text-align:right;">CTR</span> 844 <span style="width:55px; text-align:right;">Pos.</span> 845 </div> 846 <div class="gsc-keyword-row"> 847 <span class="q">linen pillow cover queen</span><span class="num">142</span><span class="impr">2,418</span><span class="ctr">5.9%</span><span class="pos">3.2</span> 848 </div> 849 <div class="gsc-keyword-row alt"> 850 <span class="q">washable linen duvet</span><span class="num">98</span><span class="impr">1,604</span><span class="ctr">6.1%</span><span class="pos">4.8</span> 851 </div> 852 <div class="gsc-keyword-row"> 853 <span class="q">how to soften linen sheets</span><span class="num">76</span><span class="impr">3,180</span><span class="ctr">2.4%</span><span class="pos">7.1</span> 854 </div> 855 <div class="gsc-keyword-row alt"> 856 <span class="q">stonewashed linen vs cotton</span><span class="num">54</span><span class="impr">872</span><span class="ctr">6.2%</span><span class="pos">5.6</span> 857 </div> 858 <div class="gsc-keyword-row"> 859 <span class="q">linen care guide</span><span class="num">41</span><span class="impr">498</span><span class="ctr">8.2%</span><span class="pos">2.9</span> 860 </div> 861 <div class="gsc-keyword-row alt"> 862 <span class="q">flax fiber bedding</span><span class="num">29</span><span class="impr">711</span><span class="ctr">4.1%</span><span class="pos">6.4</span> 863 </div> 864 </div> 865 </div> 866 867 <p>The tab only appears for sites that have an active integration. Sites without Search Console connected won't show the tab, so dashboards stay clean.</p> 868 869 <h2>How to connect</h2> 870 <p>The setup runs through Google's standard OAuth flow. The integration is per-site, so you connect Search Console for each Clickport site separately. One Google account can be linked to multiple sites.</p> 871 872 <ol> 873 <li>Make sure your site is added and verified in <a href="https://search.google.com/search-console" target="_blank" rel="noopener noreferrer">Search Console</a>. Both domain properties (<code>sc-domain:example.com</code>) and URL-prefix properties (<code>https://example.com/</code>) work.</li> 874 <li>In Clickport, open <strong>Settings â Integrations</strong> for the site you want to connect.</li> 875 <li>Click <strong>Connect Google account</strong>. You'll be redirected to Google's consent screen.</li> 876 <li>Pick the Google account that owns the Search Console property and grant read-only access. Clickport only requests <code>webmasters.readonly</code>: we can read keyword data, but we cannot modify anything in your Search Console.</li> 877 <li>You're redirected back to Clickport and the property picker opens automatically. Select the property you want to associate with this Clickport site and save.</li> 878 </ol> 879 880 <div class="mockup"> 881 <div class="mockup-label">Settings · Integrations</div> 882 <div class="mockup-title">After connecting, your Google account and chosen property show in the settings card</div> 883 <div class="mockup-subtitle">
883Click Change property to switch later, or Unlink to remove access entirely.</div> 884 <div class="gsc-settings"> 885 <div class="gsc-settings-head"> 886 <a href="#" class="gsc-settings-title">Google Search Console â</a> 887 <a href="#" class="gsc-settings-link">Learn more â</a> 888 </div> 889 <div class="gsc-settings-desc">Connect Search Console to see the search queries driving Google traffic to linenhaus.shop, directly inside the Sources panel.</div> 890 <div class="gsc-settings-account"> 891 <div class="gsc-settings-account-row"><span class="g">ð¬</span> <strong>[email protected]</strong></div> 892 <div class="gsc-settings-account-prop">sc-domain:linenhaus.shop</div> 893 </div> 894 <div class="gsc-settings-actions"> 895 <span class="gsc-btn">Change property</span> 896 <span class="gsc-btn danger">Disconnect Google account</span> 897 </div> 898 </div> 899 </div> 900 901 <h3>Picking the right property</h3> 902 <p>Search Console exposes two property types and the picker shows both. The choice matters for how your site URLs match GSC's data:</p> 903 <ul> 904 <li><strong>Domain property</strong> (<code>sc-domain:example.com</code>) covers every subdomain and protocol. If you have <code>www.example.com</code>, <code>example.com</code>, and <code>shop.example.com</code> all serving content, a single domain property captures them all.</li> 905 <li><strong>URL-prefix property</strong> (<code>https://example.com/</code>) only covers exactly that scheme, host, and path prefix. Cleaner if you only have one canonical hostname.</li> 906 </ul> 907 908 <div class="mockup"> 909 <div class="mockup-label">Property picker</div> 910 <div class="mockup-title">Pick the property that matches the site you're connecting</div> 911 <div class="mockup-subtitle">The picker lists every property your Google account has access to. Only properties you own or have full/restricted-user access on appear.</div> 912 <div class="gsc-picker"> 913 <div class="gsc-picker-label">Search Console property</div> 914 <div class="gsc-picker-options"> 915 <div class="gsc-picker-option highlight">sc-domain:linenhaus.shop</div> 916 <div class="gsc-picker-option">https://www.linenhaus.shop/</div> 917 <div class="gsc-picker-option">https://linenhaus.shop/journal/</div> 918 </div> 919 <span class="gsc-picker-save">Save property</span> 920 </div> 921 </div> 922 923 <p>If your Google account has access to multiple properties for the same domain, the domain property usually gives the most complete data. URL-prefix properties are useful when you only want to attribute keywords from a specific subdirectory or hostname.</p> 924 925 <h2>Filtering keywords</h2> 926 <p>Active dashboard filters carry into the GSC tab where they map cleanly to Search Console's dimensions:</p> 927 <ul> 928 <li><strong>Page filter</strong> narrows to keywords where the filtered page was the <em>landing page</em> from Google. Search Console doesn't track mid-session navigation, only the page Google linked to in the result. So filtering by <code>/pricing</code> shows keywords that landed visitors on <code>/pricing</code>, not keywords that drove sessions which happened to include <code>/pricing</code> later.</li> 929 <li><strong>Country filter</strong> uses ISO-3 country codes under the hood (Clickport converts your ISO-2 selection automatically). Multi-country selection ORs across the values.</li> 930 <li><strong>Device filter</strong> maps to Desktop, Mobile, or Tablet. Multi-device selection ORs.</li> 931 <li><strong>Source filter</strong> for Google is silently ignored when you're already in the GSC tab (you're looking at Google data by definition).</li> 932 </ul> 933 <p>Other dashboard filters (browser, OS, UTM, custom events) don't translate to Search Console data and trigger a small "not applied to keyword data" notice above the table. Search Console only exposes four dimensions: query, page, country, and device.</p> 934 935 <h3>Date range mapping</h3> 936 <p>Whatever date range you pick on the dashboard is what gets sent to Search Console. There's no auto-clamping per preset, but a few specifics worth knowing:</p> 937 <ul> 938 <li><strong>Last 7 days / 30 days / 91 days</strong>: ends yesterday, not today. This matches Search Console's natural cadence and avoids the data-lag empty-result trap.</li> 939 <li><strong>All Time</strong>: from your site's first tracked event to today. Search Console returns up to 16 months of data â anything earlier than that simply isn't there to return.</li> 940 <li><strong>Today / Last 24h / Realtime</strong>: technically valid but expected to be empty because Search Console data is delayed 24-72 hours. The dashboard shows a "data is delayed" notice rather than an empty list.</li> 941 <li><strong>Custom range</strong>: passed verbatim. No clamping on either side.</li> 942 </ul> 943 944 <h2>Data freshness and limitations</h2> 945 <p>The data you see in the GSC tab comes live from Google's Search Console API, with a short cache to keep things responsive. A few constraints inherent to Search Console itself:</p> 946 <ul> 947 <li><strong>24-72 hour delay.</strong> Search Console processes data in batches. Yesterday's queries are usually available; today's are not. This is why our default presets end at yesterday rather than today.</li> 948 <li><strong>16-month retention.</strong> Search Console only keeps data for the last 16 months. Asking for older ranges returns empty.</li> 949 <li><strong>Keyword sampling.</strong> Google samples keyword data heavily. The clicks attributed to specific keywords add up to less than your total Google visitor count â Google withholds long-tail and low-volume queries to protect user privacy. This is the same limitation you see inside Search Console's own interface.</li> 950 <li><strong>Clicks-only by default.</strong> The keyword list shows queries that produced actual clicks. Queries that earned impressions but no clicks aren't included by Search Console in its query-dimension data. To see impression-only opportunities, use Search Console directly.</li> 951 </ul> 952 953 <div class="docs-note"> 954 <strong>Sorting is local.</strong> When you click a column header to sort by impressions or position, you're sorting the keywords you've already loaded. Search Console always returns keywords sorted by clicks (descending) at the API level â to find the keyword with the highest impressions across your entire dataset, click <em>Show more</em> to load more rows, then sort. 955 </div> 956 957 <h2>Filters and what they mean for SEO</h2> 958 <p>The combination of Clickport's engagement metrics and Search Console's ranking data lets you ask questions neither tool answers on its own:</p> 959 <ul> 960 <li><strong>Which top-ranking keywords actually engage visitors?</strong> Filter by a page that ranks well, then check whether the engagement score in your Sources panel matches the keyword volume. A page ranking position 3 with high impressions but low engagement might indicate a relevance mismatch worth fixing.</li> 961 <li><strong>Which keywords drive your highest-converting traffic?</strong> Filter by a goal (e.g. signup completed) in your dashboard, switch to the GSC tab â only those keywords whose landing pages converted are highlighted.</li> 962 <li><strong>Where are you close to page-one but not quite?</strong> Sort by Position ascending, then filter to positions 8-15. Those are keywords where Search Console says you're on the edge of page one. A small content improvement can push you up.</li> 963 </ul> 964 965 <h2>Disconnecting</h2> 966 <p>Click <strong>Disconnect Google account</strong> in the Integrations card to remove the connection. Clickport revokes the token at Google immediately, so we can no longer fetch any data on your behalf. The setting is per-site, so disconnecting one site doesn't affect any other site you've connected.</p> 967 <p>You can also revoke our access from outside Clickport by visiting your <a href="https://myaccount.google.com/permissions" target="_blank" rel="noopener noreferrer">Google account permissions page</a>. If you revoke from Google's side, the next dashboard load shows a red banner asking you to reconnect.</p> 968 969 <h2>Troubleshooting</h2> 970 971 <h3>"Google revoked our Search Console access"</h3> 972 <p>This appears when the refresh token we hold has stopped working. The most common cause is the user manually revoking access from Google's permissions page, but it can also happen if your Google account changed password (Google sometimes invalidates tokens on password changes) or after Google's 50-active-tokens-per-account limit kicks in. Click <strong>Reconnect</strong> in the banner and walk through the OAuth flow again â that's enough to restore the integration.</p> 973 974 <h3>"No verified properties found"</h3> 975 <p>The Google account you authorized with doesn't own or have user access to any Search Console property. Open Search Console with that account and either add your site or accept a pending invitation. Make sure ownership verification finishes (HTML file, DNS TXT, or any of Google's other methods) before retrying the Clickport flow.<
975/p> 976 977 <h3>"Search Console data is delayed 24-72 hours"</h3> 978 <p>The date range you selected starts within the last three days and Search Console returned no rows. This is normal, switch to a range ending at least one full day ago and the data will appear. The default Clickport presets (Last 7 days, Last 28 days, etc.) already end yesterday and don't hit this case.</p> 979 980 <h3>"Filter not applied to keyword data"</h3> 981 <p>You have a dashboard filter active that Search Console can't honor. Search Console only exposes four dimensions: query, page, country, device. Other filters (browser, OS, UTM source, custom events, etc.) stay applied to your visitor data in other panels, but the GSC tab quietly drops them and tells you which ones it dropped via the small notice.</p> 982 983 <h2>Privacy and data handling</h2> 984 <p>Clickport stores three things for the Search Console integration:</p> 985 <ul> 986 <li>Your Google email address (used to display "Connected as ..." in settings).</li> 987 <li>A refresh token issued by Google, AES-256-GCM-encrypted at rest with a key that lives in our server environment, never in our database backups or version control.</li> 988 <li>The Search Console property you selected.</li> 989 </ul> 990 <p>We never store keyword data â every keyword view is a live query to Google with a short response cache. We never modify your Search Console data: the OAuth scope we request (<code>webmasters.readonly</code>) is explicitly read-only. Unlinking from Settings or from your Google account permissions page revokes our token immediately. See the <a href="/privacy">privacy policy</a> for full details.</p> 991 992 <div class="docs-nav-bottom"> 993 <a href="/docs/ai-agents"> 994 <span class="nav-label">Previous</span> 995 <span class="nav-title">AI Agents</span> 996 </a> 997 <a href="/docs/bing-webmaster-tools" class="next"> 998 <span class="nav-label">Next</span> 999 <span class="nav-title">Bing Webmaster Tools</span> 1000 </a> 1001 </div> 1002 1003 </div> 1004 </div> 1005 1006 </main> 1007 <!-- main element opened in nav-landing.html, closed above --> 1008 1009 <footer class="footer" data-pagefind-ignore> 1010 <div class="footer-inner"> 1011 <div class="footer-brand"> 1012 <a href="/" class="nav-brand"> 1013 <svg viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg"> 1014 <path d="M40 10H22L10 24V40L22 54H40V46H28L20 36V28L28 18H40Z" fill="#fff"/> 1015 </svg> 1016 <span>Clickport</span> 1017 </a> 1018 <p>Lightweight website analytics that tells you what matters. Cookie-free, GDPR compliant, hosted in the EU. ðªðº</p> 1019 <div class="footer-socials"> 1020 <a href="https://x.com/deekayonx" target="_blank" rel="noopener noreferrer" aria-label="X / Twitter"><svg viewBox="0 0 24 24"><path fill="#7d8590" d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a> 1021 <a href="https://www.linkedin.com/in/davidkarpik/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg viewBox="0 0 24 24"><path fill="#7d8590" d="M20.47 2H3.53A1.45 1.45 0 002 3.47v17.06A1.45 1.45 0 003.47 22h17.06A1.45 1.45 0 0022 20.53V3.47A1.45 1.45 0 0020.47 2zM8.09 18.74h-3v-9h3v9zM6.59 8.48a1.56 1.56 0 110-3.12 1.56 1.56 0 010 3.12zM18.91 18.74h-3v-4.95c0-1.28-.46-2.15-1.6-2.15a1.73 1.73 0 00-1.62 1.15 2.16 2.16 0 00-.1.77v5.18h-3v-9h3v1.17a3 3 0 012.71-1.5c1.98 0 3.46 1.29 3.46 4.06v5.27z"/></svg></a> 1022 </div> 1023 <div class="footer-badges"> 1024 <a class="footer-badge" href="/gdpr-checker" title="Privacy Verified: 100/100"> 1025 <svg viewBox="0 0 24 24" fill="none" stroke="#22c55e" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l8 3v5c0 4.5-3.2 7.8-8 9-4.8-1.2-8-4.5-8-9V6z"/><polyline points="9 12 11 14 15 10"/></svg> 1026 <b>Privacy Verified</b> 100/100 1027 </a> 1028 <a class="footer-badge" href="https://www.producthunt.com/products/clickport-analytics?utm_source=badge-featured&utm_medium=badge&utm_campaign=badge-clickport-analytics" target="_blank" rel="noopener noreferrer"> 1029 <svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="10" fill="#da552f"/><path d="M13.6 7.2H9v9.6h2.2v-2.9h2.4a3.35 3.35 0 0 0 0-6.7zm-.2 4.5h-2.2V9.4h2.2a1.15 1.15 0 0 1 0 2.3z" fill="#fff"/></svg> 1030 Featured on <b>Product Hunt</b> 1031 </a> 1032 <a class="footer-badge" href="https://euroalternative.eu/clickport?utm_source=euroalternative&utm_medium=badge&utm_campaign=embed&utm_content=tool-clickport" target="_blank" rel="noopener"> 1033 <svg viewBox="0 0 24 24" fill="none" stroke="#8b949e" stroke-width="1.5" stroke-dasharray="2.5 2.5"><circle cx="12" cy="12" r="9"/></svg> 1034 Featured on <b>EuroAlternative</b> 1035 </a> 1036 </div> 1037 </div> 1038 1039 <div class="footer-col">
1040 <span class="footer-heading">Get started</span> 1041 <a href="/how-it-works">How it works</a> 1042 <a href="/#pricing">Pricing</a> 1043 <a href="/login?register">Start free trial</a> 1044 <a href="/migrate-from-google-analytics">Migrate from GA</a> 1045 <span class="footer-heading footer-subheading">Integrations</span> 1046 <a href="/docs/google-search-console">Search Console</a> 1047 <a href="/docs/bing-webmaster-tools">Bing Webmaster Tools</a> 1048 <a href="/docs/wordpress">WordPress plugin</a> 1049 <a href="/docs/shopify">Shopify</a> 1050 <a href="/docs">Documentation</a> 1051 <span class="footer-heading footer-subheading">Tools</span> 1052 <a href="/utm-builder">UTM Builder</a> 1053 <a href="/gdpr-checker">GDPR Checker</a> 1054 <a href="/ga4-data-loss-estimator">GA4 Data Loss Estimator</a> 1055 <a href="/is-google-analytics-legal">Is Google Analytics legal?</a> 1056 </div> 1057 1058 <div class="footer-col"> 1059 <span class="footer-heading">Product</span> 1060 <a href="/docs/your-first-dashboard">Dashboard</a> 1061 <a href="/docs/realtime">Real-Time</a> 1062 <a href="/docs/sessions">Sessions</a> 1063 <a href="/docs/engagement">Engagement</a> 1064 <a href="/docs/goals">Goals</a> 1065 <a href="/docs/filters">Filtering</a> 1066 <a href="/docs/funnels">Funnels</a> 1067 <a href="/docs/flows">Flows</a> 1068 <a href="/gdpr">Privacy First</a> 1069 <a href="/docs/bot-management">Bot Protection</a> 1070 <a href="/updates">Updates</a> 1071 <a href="/status">Status</a> 1072 </div> 1073 1074 <div class="footer-col"> 1075 <span class="footer-heading">Use cases</span> 1076 <a href="/agencies">For Agencies</a> 1077 <a href="/saas">For SaaS</a> 1078 <a href="/ecommerce">For E-commerce</a> 1079 <a href="/affiliates">For Affiliates</a> 1080 <a href="/publishers">For Publishers & Bloggers</a> 1081 <a href="/enterprise">For Enterprise</a> 1082 <span class="footer-heading footer-subheading">Comparisons</span> 1083 <a href="/blog/clickport-vs-google-analytics">vs Google Analytics</a> 1084 <a href="/blog/clickport-vs-matomo">vs Matomo</a> 1085 <a href="/blog/clickport-vs-cloudflare-analytics">vs Cloudflare</a> 1086 </div> 1087 1088 <div class="footer-col"> 1089 <span class="footer-heading">Company</span> 1090 <a href="/about">About</a> 1091 <a href="/blog">Blog</a> 1092 <a href="/contact">Contact</a> 1093 <a href="/sitemap">Sitemap</a> 1094 <span class="footer-heading footer-subheading">Legal</span> 1095 <a href="/privacy">Privacy</a> 1096 <a href="/security">Security</a> 1097 <a href="/terms">Terms</a> 1098 <a href="/refund">Refund policy</a> 1099 <a href="/gdpr">GDPR compliance</a> 1100 <a href="/dpa">DPA</a> 1101 <a href="/imprint">Imprint</a> 1102 </div> 1103 </div> 1104 1105 <div class="footer-bottom"> 1106 <div class="footer-bottom-left">© 2026 Clickport Analytics.</div> 1107 <a href="/status" class="footer-status"><span class="footer-status-dot"></span> All services online</a> 1108 </div> 1109 </footer> 1110 1111
1111<script> 1112 (function() { 1113 var menu = document.getElementById('mobile-menu'); 1114 document.querySelector('.nav-toggle').addEventListener('click', function() { 1115 menu.classList.add('open'); 1116 }); 1117 document.querySelector('.mobile-menu-close').addEventListener('click', function() { 1118 menu.classList.remove('open'); 1119 }); 1120 menu.querySelectorAll('.mobile-menu-links a, .mobile-menu-cta a').forEach(function(a) { 1121 a.addEventListener('click', function() { menu.classList.remove('open'); }); 1122 }); 1123 menu.querySelectorAll('.mobile-section-toggle').forEach(function(btn) { 1124 btn.addEventListener('click', function() { 1125 var section = btn.parentElement; 1126 var isOpen = section.classList.contains('open'); 1127 menu.querySelectorAll('.mobile-section.open').forEach(function(s) { 1128 s.classList.remove('open'); 1129 }); 1130 if (!isOpen) section.classList.add('open'); 1131 }); 1132 }); 1133 })(); 1134 </script>
1134 1135 1136 <!-- Search Modal (Pagefind) --> 1137 <div id="search-overlay" class="search-overlay" style="display:none;"> 1138 <div class="search-backdrop"></div> 1139 <div class="search-dialog"> 1140 <div id="search-container"></div> 1141 </div> 1142 </div> 1143 1144 <style> 1145 /* Footer search button */ 1146 .footer-search-btn { 1147 display: inline-flex; 1148 align-items: center; 1149 gap: 6px; 1150 background: none; 1151 border: 1px solid #30363d; 1152 border-radius: 6px; 1153 padding: 5px 10px; 1154 color: #7d8590; 1155 font-size: 13px; 1156 font-family: inherit; 1157 cursor: pointer; 1158 transition: all 0.15s ease; 1159 white-space: nowrap; 1160 } 1161 .footer-search-btn:hover { 1162 border-color: #7d8590; 1163 color: #d4d4dc; 1164 } 1165 .footer-search-btn svg { 1166 flex-shrink: 0; 1167 opacity: 0.7; 1168 } 1169 .footer-search-kbd { 1170 font-family: inherit; 1171 font-size: 10px; 1172 background: rgba(255,255,255,0.04); 1173 border: 1px solid #30363d; 1174 border-radius: 3px; 1175 padding: 1px 4px; 1176 color: #7d8590; 1177 line-height: 1.4; 1178 } 1179 1180 .search-overlay { 1181 position: fixed; 1182 inset: 0; 1183 z-index: 10000; 1184 display: flex; 1185 align-items: flex-start; 1186 justify-content: center; 1187 padding-top: 12vh; 1188 } 1189 .search-backdrop { 1190 position: fixed; 1191 inset: 0; 1192 background: rgba(0, 0, 0, 0.6); 1193 backdrop-filter: blur(4px); 1194 -webkit-backdrop-filter: blur(4px); 1195 } 1196 .search-dialog { 1197 position: relative; 1198 width: 90%; 1199 max-width: 620px; 1200 background: #151b23; 1201 border: 1px solid #30363d; 1202 border-radius: 12px; 1203 box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5); 1204 overflow: hidden; 1205 max-height: 70vh; 1206 display: flex; 1207 flex-direction: column; 1208 padding: 16px; 1209 } 1210 1211 /* Pagefind UI overrides */ 1212 :root { 1213 --pagefind-ui-scale: 0.9; 1214 --pagefind-ui-primary: #1999D6; 1215 --pagefind-ui-text: #d4d4dc; 1216 --pagefind-ui-background: #151b23; 1217 --pagefind-ui-border: #30363d; 1218 --pagefind-ui-tag: #1c2128; 1219 --pagefind-ui-border-width: 1px; 1220 --pagefind-ui-border-radius: 8px; 1221 --pagefind-ui-image-border-radius: 6px; 1222 --pagefind-ui-image-box-ratio: 0; 1223 --pagefind-ui-font: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; 1224 } 1225 1226 #search-container .pagefind-ui__form { 1227 position: relative; 1228 } 1229 #search-container .pagefind-ui__search-input { 1230 background: #0d1117; 1231 color: #d4d4dc; 1232 border: 1px solid #30363d; 1233 font-size: 16px; 1234 padding: 12px 16px 12px 40px; 1235 height: auto; 1236 width: 100%; 1237 box-sizing: border-box; 1238 } 1239 #search-container .pagefind-ui__search-input::placeholder { 1240 color: #7d8590; 1241 } 1242 #search-container .pagefind-ui__search-input:focus { 1243 border-color: #1999D6; 1244 outline: none; 1245 box-shadow: 0 0 0 2px rgba(25, 153, 214, 0.2); 1246 } 1247 #search-container .pagefind-ui__search-clear { 1248 color: #7d8590; 1249 top: 50%; 1250 transform: translateY(-50%); 1251 right: 8px; 1252 background: none; 1253 border: none; 1254 cursor: pointer; 1255 padding: 4px 8px; 1256 font-size: 13px; 1257 } 1258 #search-container .pagefind-ui__search-clear:hover { 1259 color: #d4d4dc; 1260 } 1261 #search-container .pagefind-ui__form::before { 1262 background-color: #7d8590; 1263 top: 50%; 1264 transform: translateY(-50%); 1265 left: 12px; 1266 } 1267 1268 /* Results area */ 1269 #search-container .pagefind-ui__results-area { 1270 overflow-y: auto; 1271 max-height: calc(70vh - 80px); 1272 padding: 0 4px; 1273 } 1274 #search-container .pagefind-ui__result { 1275 padding: 12px 12px; 1276 border-top: 1px solid #1c2128; 1277 } 1278 #search-container .pagefind-ui__result:hover { 1279 background: #1c2128; 1280 border-radius: 6px; 1281 } 1282 #search-container .pagefind-ui__result-link { 1283 color: #d4d4dc; 1284 font-weight: 500; 1285 } 1286 #search-container .pagefind-ui__result-link:hover { 1287 color: #1999D6; 1288 } 1289 #search-container .pagefind-ui__result-excerpt { 1290 color: #7d8590; 1291 font-size: 13px; 1292 line-height: 1.5; 1293 } 1294 #search-container mark { 1295 background: rgba(25, 153, 214, 0.25); 1296 color: #d4d4dc; 1297 border-radius: 2px; 1298 padding: 0 2px; 1299 } 1300 #search-container .pagefind-ui__message { 1301 color: #7d8590; 1302 padding: 24px 12px; 1303 } 1304 #search-container .pagefind-ui__button { 1305 background: #1c2128; 1306 color: #d4d4dc; 1307 border: 1px solid #30363d; 1308 border-radius: 6px; 1309 } 1310 #search-container .pagefind-ui__button:hover { 1311 background: #262d36; 1312 border-color: #1999D6; 1313 } 1314 </style> 1315 1316
1316<script> 1317 (function() { 1318 var overlay = document.getElementById('search-overlay'); 1319 var container = document.getElementById('search-container'); 1320 var initialized = false; 1321 var pfInstance = null; 1322 1323 function loadAsset(tag, attrs) { 1324 return new Promise(function(resolve) { 1325 var el = document.createElement(tag); 1326 for (var k in attrs) el[k] = attrs[k]; 1327 el.onload = resolve; 1328 el.onerror = resolve; 1329 document.head.appendChild(el); 1330 }); 1331 } 1332 1333 function openSearch() { 1334 if (!initialized) { 1335 initialized = true; 1336 Promise.all([ 1337 loadAsset('link', { rel: 'stylesheet', href: '/pagefind/pagefind-ui.css' }), 1338 loadAsset('script', { src: '/pagefind/pagefind-ui.js' }) 1339 ]).then(function() { 1340 pfInstance = new PagefindUI({ 1341 element: container, 1342 showSubResults: true, 1343 showImages: false, 1344 autofocus: true, 1345 resetStyles: false, 1346 processResult: function(result) { 1347 result.url = result.url.replace(/\.html$/, ''); 1348 return result; 1349 } 1350 }); 1351 overlay.style.display = 'flex'; 1352 document.body.style.overflow = 'hidden'; 1353 requestAnimationFrame(function() { 1354 var input = container.querySelector('.pagefind-ui__search-input'); 1355 if (input) input.focus(); 1356 }); 1357 }); 1358 return; 1359 } 1360 overlay.style.display = 'flex'; 1361 document.body.style.overflow = 'hidden'; 1362 requestAnimationFrame(function() { 1363 var input = container.querySelector('.pagefind-ui__search-input'); 1364 if (input) input.focus(); 1365 }); 1366 } 1367 1368 function closeSearch() { 1369 overlay.style.display = 'none'; 1370 document.body.style.overflow = ''; 1371 } 1372 1373 // Cmd+K / Ctrl+K to open 1374 document.addEventListener('keydown', function(e) { 1375 if ((e.metaKey || e.ctrlKey) && e.key === 'k') { 1376 e.preventDefault(); 1377 if (overlay.style.display === 'none') { 1378 openSearch(); 1379 } else { 1380 closeSearch(); 1381 } 1382 } 1383 if (e.key === 'Escape' && overlay.style.display !== 'none') { 1384 closeSearch(); 1385 } 1386 }); 1387 1388 // Click backdrop to close 1389 overlay.querySelector('.search-backdrop').addEventListener('click', closeSearch); 1390 1391 // Expose for search buttons 1392 window.openClickportSearch = openSearch; 1393 })(); 1394 </script>
1394 1395 1396 1397</body> 1398</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.