PageSourceSearch

https://clickport.io/docs/google-search-console

html clickport.io collected 2026-10-04 16:03:56 UTC 86,643 bytes, 1,398 lines download raw bytes

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 &amp; 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 &amp; 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>&#8984;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 &amp;
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>&nbsp;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&nbsp;<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&nbsp;<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 &amp; 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">&copy; 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.