Shopify не надає лог-файли. Ось повний технічний посібник, як їх отримати за допомогою Cloudflare (або будь-якого Edge CDN).
Велика сліпа зона в електронній комерції щойно була вирішена
З моменту запуску Shopify платформа повністю приховувала необроблені серверні логи від власників магазинів. Ви отримуєте воронки конверсій та звіти про продажі. Чого ви не отримуєте — це єдине, що дійсно показує, що саме звертається до вашого сервера: лог HTTP-запитів.
Роками це було незначним незручністю. Кого цікавлять необроблені логи, коли є перегляди сторінок та показники конверсії? Google Analytics відстежує ваших відвідувачів. Ваша рекламна платформа відстежує ваші кампанії. Все чудово.
А потім з’явився штучний інтелект.
ChatGPT, Claude, Perplexity, Google AI Overviews, Microsoft Copilot — вони всі прямо зараз надсилають ботів до вашого магазину. Деякі сканують ваші сторінки для формування навчальних даних. Інші отримують контент ваших товарів у реальному часі, щоб відповісти на запитання клієнта. І ось у чому підступність: традиційні інструменти аналітики, такі як Google Analytics, нічого з цього не бачать. Вони покладаються на клієнтський JavaScript, який боти ніколи не виконують. Переважна більшість AI-взаємодії з вашим магазином для вас невидима.
Це нова сліпа зона електронної комерції. AI-боти не запускають ваші скрипти відстеження. Вони не приймають cookies. Вони не відображаються у ваших звітах GA4. Але вони абсолютно точно читають ваші сторінки товарів, витягують ваші описи в AI-генеровані відповіді та впливають на те, чи взагалі клієнти дізнаються про ваш бренд.
Нові інструменти, орієнтовані на “агентну аналітику”, з’являються, щоб допомогти власникам сайтів зрозуміти активність AI-краулерів та AI-генеровані переходи через серверне відстеження, класифікацію ботів та верифікацію IP. Індустрія визнає, що стара модель клієнтської аналітики фундаментально зламана для епохи AI-орієнтованого виявлення контенту. Саме тому ми створили панель AI Visibility від WISLR — щоб дати брендам чітку картину того, як AI-платформи взаємодіють з їхнім контентом, від частоти сканування до запитів на отримання даних і AI-генерованого реферального трафіку.
Але якщо ви на Shopify, у вас є унікальна проблема: ви не контролюєте сервер. Ви не можете встановити серверне відстеження напряму. Ви не можете переглядати логи доступу. Ви не можете шукати GPTBot у логах. Інфраструктура Shopify — це чорна скринька, і вони не виявляють жодної поспішності, щоб її відкрити.
Більше це не проблема. Ось як повернути собі свої логи.
Цей посібник проведе вас через побудову власного повного конвеєра логування запитів для магазину Shopify за допомогою Cloudflare. Кожен HTTP-запит. Повні геодані. Метрики продуктивності. І, найважливіше, повне виявлення та класифікація ботів, щоб ви нарешті могли бачити, які саме AI-системи відвідують ваш магазин, як часто та які сторінки їх цікавлять.
Як працює логування запитів Cloudflare для Shopify?
Відвідувач запитує ваш магазин Shopify
│
▼
Cloudflare CDN (ваш домен проксується через Cloudflare)
│
▼
Cloudflare Worker (виконується на кожному запиті)
├──→ Передає запит до origin-серверу Shopify (відвідувач отримує звичайну відповідь)
└──→ Надсилає POST з JSON-записом логу до вашого приймача логів (неблокуючий, через ctx.waitUntil)
│
▼
Cloudflare Tunnel
(CNAME на вашому домені → тунель → localhost на вашому сервері)
│
▼
Node.js HTTP-приймач (localhost:9090)
│
▼
JSON лог-файли записуються на диск
Жодні порти не відкриті публічно. Cloudflare Tunnel забезпечує безпечний транспорт від edge-мережі Cloudflare до вашого сервера через вихідне з’єднання.
Що потрібно для налаштування логування запитів Shopify?
- Магазин Shopify з власним доменом, проксованим через Cloudflare (увімкнена помаранчева хмарка)
- Сервер для прийому логів
- Node.js, встановлений на сервері
- Обліковий запис Cloudflare з увімкненими Workers
- Встановлений Wrangler CLI (npm install -g wrangler)
- Cloudflared, встановлений на сервері
Крок 1: Створіть Cloudflare Worker
Worker перехоплює кожен запит на вашому домені, проксує його до Shopify та асинхронно надсилає запис логу до вашого приймача.
1a. Вихідний код Worker (cloudflare-worker.js)
/**
* Shopify Request Logger
*
* Cloudflare Worker that:
* 1. Logs ALL requests to a self-hosted log receiver (via Cloudflare Tunnel)
* 2. Optionally logs detailed bot request data to a database
*/
// ============================================
// CONFIG - update these for your setup
// ============================================
const INGEST_URL = 'https://log-collector.yourdomain.com/collect'; // Your tunnel hostname
const INGEST_API_KEY = process.env.INGEST_API_KEY || ''; // Set as Worker secret
// ============================================
// BOT DETECTION PATTERNS
// ============================================
const BOT_PATTERNS = {
// AI realtime fetchers (user-triggered queries)
'ChatGPT-User': { pattern: /ChatGPT-User/i, type: 'realtime' },
'Perplexity-User': { pattern: /Perplexity-User/i, type: 'realtime' },
// Add your own patterns here for other AI bots
// Search engine crawlers
'Googlebot': { pattern: /Googlebot/i, type: 'crawler' },
'Bingbot': { pattern: /bingbot/i, type: 'crawler' },
// Social link preview bots
'FacebookBot': { pattern: /facebookexternalhit/i, type: 'preview' },
'LinkedInBot': { pattern: /LinkedInBot/i, type: 'preview' },
};
function identifyBot(userAgent) {
if (!userAgent) return { name: 'unknown', type: 'unknown' };
for (const [name, config] of Object.entries(BOT_PATTERNS)) {
if (config.pattern.test(userAgent)) return { name, type: config.type };
}
return { name: 'other', type: 'unknown' };
}
function isKnownBot(userAgent) {
if (!userAgent) return false;
return Object.values(BOT_PATTERNS).some(config => config.pattern.test(userAgent));
}
async function logToReceiver(request, env, perfData = {}) {
const url = new URL(request.url);
const cf = request.cf || {};
const bot = identifyBot(request.headers.get('user-agent') || '');
const logEntry = {
// Request basics
timestamp: new Date().toISOString(),
method: request.method,
url: request.url,
path: url.pathname,
host: url.hostname,
userAgent: request.headers.get('user-agent') || '',
ip: request.headers.get('cf-connecting-ip') || '',
referer: request.headers.get('referer') || '',
cfRay: request.headers.get('cf-ray') || '',
// Bot classification
botName: bot.name,
botType: bot.type,
// Cloudflare geo data
country: cf.country || '',
region: cf.region || '',
city: cf.city || '',
postalCode: cf.postalCode || '',
latitude: cf.latitude || '',
longitude: cf.longitude || '',
timezone: cf.timezone || '',
continent: cf.continent || '',
// Network info
asn: cf.asn || '',
asOrganization: cf.asOrganization || '',
colo: cf.colo || '',
httpProtocol: cf.httpProtocol || '',
tlsVersion: cf.tlsVersion || '',
// Client hints (helps detect headless browsers)
secChUa: request.headers.get('sec-ch-ua') || '',
secChUaMobile: request.headers.get('sec-ch-ua-mobile') || '',
secChUaPlatform: request.headers.get('sec-ch-ua-platform') || '',
// Fetch metadata (helps detect programmatic requests)
secFetchDest: request.headers.get('sec-fetch-dest') || '',
secFetchMode: request.headers.get('sec-fetch-mode') || '',
secFetchSite: request.headers.get('sec-fetch-site') || '',
// Performance metrics
edgeStartTimestamp: perfData.startTime || '',
edgeEndTimestamp: perfData.endTime || '',
edgeTimeToFirstByteMs: perfData.ttfbMs ?? '',
clientTcpRttMs: cf.clientTcpRtt ?? '',
cacheCacheStatus: perfData.cacheStatus || '',
originResponseStatus: perfData.responseStatus ?? '',
};
try {
await fetch(INGEST_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': env.INGEST_API_KEY,
},
body: JSON.stringify({ logs: [logEntry] }),
});
} catch (e) {
console.error(`Log ingest failed: ${e.message}`);
}
}
export default {
async fetch(request, env, ctx) {
const startTime = Date.now();
const url = new URL(request.url);
// Avoid infinite loop - skip logging for your ingest hostname
if (url.hostname === 'log-collector.yourdomain.com') {
return fetch(request);
}
// Fetch the origin response (Shopify)
const response = await fetch(request);
const endTime = Date.now();
// Ship log entry asynchronously (does not delay the response)
ctx.waitUntil(logToReceiver(request, env, {
startTime,
endTime,
ttfbMs: endTime - startTime,
cacheStatus: response.headers.get('cf-cache-status') || '',
responseStatus: response.status,
}));
return response;
}
};
1b. Конфігурація Wrangler (wrangler.toml)
name = "shopify-request-logger"
main = "cloudflare-worker.js"
compatibility_date = "2024-01-01"
routes = [
{ pattern = "www.yourdomain.com/*", zone_name = "yourdomain.com" }
]
Замініть www.yourdomain.com на власний домен вашого магазину Shopify.
1c. Встановіть секрети Worker
wrangler secret put INGEST_API_KEY
# Paste your generated API key when prompted
1d. Розгортання
npx wrangler deploy
Крок 2: Налаштуйте приймач логів на вашому сервері
Мінімальний HTTP-сервер на Node.js, який приймає пакети логів та записує їх на диск.
2a. Скрипт приймача (receive-logs.js)
const http = require('http');
const fs = require('fs');
const path = require('path');
const PORT = 9090;
const API_KEY = process.env.LOG_API_KEY;
const LOG_DIR = '/var/log/cdn-requests'; // Choose your log directory
if (!API_KEY) {
console.error('LOG_API_KEY environment variable is required');
process.exit(1);
}
// Ensure log directory exists
fs.mkdirSync(LOG_DIR, { recursive: true });
const server = http.createServer((req, res) => {
// Health check
if (req.method === 'GET' && req.url === '/status') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ status: 'ok' }));
return;
}
// Log ingest endpoint
if (req.method === 'POST' && req.url === '/collect') {
const apiKey = req.headers['x-api-key'];
if (apiKey !== API_KEY) {
res.writeHead(401, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'unauthorized' }));
return;
}
let body = '';
let size = 0;
const MAX_BODY = 10 * 1024 * 1024; // 10MB limit
req.on('data', chunk => {
size += chunk.length;
if (size > MAX_BODY) {
res.writeHead(413, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'payload too large' }));
req.destroy();
return;
}
body += chunk;
});
req.on('end', () => {
try {
JSON.parse(body); // Validate JSON
} catch (e) {
res.writeHead(400, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'invalid JSON' }));
return;
}
const filename = `logs-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.json`;
const filepath = path.join(LOG_DIR, filename);
fs.writeFile(filepath, body, err => {
if (err) {
console.error(`Write failed: ${err.message}`);
res.writeHead(500, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'write failed' }));
return;
}
console.log(`Wrote ${filename} (${size} bytes)`);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ ok: true }));
});
});
} else {
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'not found' }));
}
});
server.listen(PORT, '127.0.0.1', () => {
console.log(`Log receiver listening on 127.0.0.1:${PORT}`);
});
Ключові моменти:
- Прив’язується лише до
127.0.0.1— не відкритий для інтернету - Автентифікує запити за допомогою заголовка
X-API-Key - Записує кожен пакет логів як JSON-файл з часовою міткою
- Обмеження корисного навантаження 10 МБ на запит
2b. Служба systemd
Створіть /etc/systemd/system/log-receiver.service:
[Unit]
Description=Shopify request log receiver
After=network.target
[Service]
Type=simple
Environment=LOG_API_KEY=<your-generated-api-key>
ExecStart=/usr/bin/node /opt/log-receiver/receive-logs.js
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Увімкніть та запустіть:
systemctl daemon-reload
systemctl enable --now log-receiver
Крок 3: Налаштуйте Cloudflare Tunnel
Тунель створює безпечне з’єднання від edge-мережі Cloudflare до вашого сервера — без відкритих портів, без правил файрволу.
3a. Встановіть cloudflared
# Debian/Ubuntu
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
-o /tmp/cloudflared.deb
dpkg -i /tmp/cloudflared.deb
3b. Автентифікація
cloudflared tunnel login
# Opens a browser (or gives you a URL) to authorize with your Cloudflare account
Це зберігає cert.pem у ~/.cloudflared/.
3c. Створіть тунель
cloudflared tunnel create shopify-log-collector
Це виведе Tunnel ID (UUID) та створить JSON-файл з обліковими даними в ~/.cloudflared/.
3d. Налаштуйте тунель
Створіть ~/.cloudflared/config.yml:
tunnel: <YOUR-TUNNEL-ID>
credentials-file: /root/.cloudflared/<YOUR-TUNNEL-ID>.json
ingress:
- hostname: log-collector.yourdomain.com
service: http://localhost:9090
- service: http_status:404
hostname: Піддомен, на який ваш Worker буде надсилати POST-запити з логамиservice: Маршрутизує до вашого Node.js-приймача на localhost:9090- Правило за замовчуванням: Повертає 404 для будь-якого іншого імені хоста (вимагається cloudflared)
3e. Створіть DNS-запис
cloudflared tunnel route dns shopify-log-collector log-collector.yourdomain.com
Це створить запис CNAME у вашому Cloudflare DNS:
log-collector.yourdomain.com → <TUNNEL-ID>.cfargotunnel.com
Запис проксується через Cloudflare (помаранчева хмарка) — ідентифікатор тунелю в CNAME не є публічно значущим.
3f. Встановіть як системну службу
cloudflared service install
systemctl enable --now cloudflared
Це скопіює вашу конфігурацію до /etc/cloudflared/config.yml та створить юніт systemd.
Перевірка тунелю
systemctl status cloudflared
# Should show: active (running)
curl https://log-collector.yourdomain.com/status
# Should return: {"status":"ok"}
Крок 4: Згенеруйте API-ключ
Згенеруйте випадковий API-ключ, спільний для Worker та приймача:
openssl rand -hex 32
Встановіть це значення:
- Як секрет Worker через
wrangler secret put INGEST_API_KEY - У рядку Environment служби systemd приймача (LOG_API_KEY=…)
Крок 5: Перевірка наскрізної роботи
- Відвідайте ваш магазин Shopify у браузері
- Перевірте логи приймача:
journalctl -u log-receiver -f
# Should show: Wrote logs-1234567890-abc123.json (1234 bytes)
- Перевірте лог-файл:
cat /var/log/cdn-requests/logs-*.json | head -1 | python3 -m json.tool
Ви повинні побачити повний запис логу з деталями запиту, геоданими та метриками продуктивності.
Приклад запису логу
{
"logs": [{
"timestamp": "2026-03-04T15:19:55.584Z",
"method": "GET",
"url": "https://www.yourdomain.com/products/example",
"path": "/products/example",
"host": "www.yourdomain.com",
"userAgent": "Mozilla/5.0 ...",
"ip": "198.51.100.23",
"country": "US",
"city": "Seattle",
"asn": 16509,
"asOrganization": "Amazon.com",
"colo": "SEA",
"edgeTimeToFirstByteMs": 109,
"originResponseStatus": 200,
"cacheCacheStatus": "HIT",
"botName": "other",
"botType": "unknown"
}]
}
Як працює повний конвеєр логування Shopify?
| Компонент | Що він робить | Де він працює |
|---|---|---|
| Cloudflare Worker | Перехоплює кожен запит, проксує до Shopify, надсилає запис логу | Edge-мережа Cloudflare (розгорнутий через Wrangler) |
| Cloudflare Tunnel | Безпечно з’єднує edge-мережу Cloudflare з вашим сервером (без відкритих портів) | Демон cloudflared на вашому сервері |
| DNS CNAME | log-collector.yourdomain.com до <tunnel-id>.cfargotunnel.com |
Cloudflare DNS для вашої зони |
| Node.js-приймач | Приймає JSON-логи через POST, автентифікує за API-ключем, записує на диск | Ваш сервер, прив’язаний до localhost:9090 |
Потік даних
1. Відвідувач заходить на https://www.yourdomain.com/products/something
2. Cloudflare маршрутизує через Worker
3. Worker отримує відповідь від origin-сервера Shopify → повертає її відвідувачу
4. Worker надсилає POST { logs: [entry] } на https://log-collector.yourdomain.com/collect
(неблокуючий — відвідувач не чекає на це)
5. Cloudflare розпізнає log-collector.yourdomain.com через CNAME тунелю
6. Тунель пересилає запит на localhost:9090 на вашому сервері
7. Приймач перевіряє X-API-Key, записує JSON-файл на диск
Які дані запитів Shopify ви можете захопити, яких Shopify вам не покаже?
Адмін-панель Shopify показує вам перегляди сторінок, замовлення та джерела переходів. Вона не показує, які AI-боти відвідували, які сторінки вони завантажували, звідки вони прийшли та як швидко відповів ваш сервер. Це рішення захоплює 40+ полів на кожен запит у таких категоріях:
| Категорія | Поля |
|---|---|
| Запит | timestamp, method, url, path, host, userAgent, ip, referer |
| Виявлення ботів | botName, botType (realtime / crawler / preview / unknown) |
| Геодані Cloudflare | country, region, city, postalCode, latitude, longitude, timezone, continent |
| Мережа | asn, asOrganization, colo, httpProtocol, tlsVersion |
| Client Hints | sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform |
| Метадані Fetch | sec-fetch-dest, sec-fetch-mode, sec-fetch-site |
| Продуктивність | edgeTimeToFirstByteMs, clientTcpRttMs, cacheCacheStatus, originResponseStatus |
Client Hints та Fetch Metadata особливо корисні для ідентифікації headless-браузерів та непідписаних ботів — справжні браузери надсилають ці заголовки, більшість ботів — ні.
Які AI-боти відвідують ваш магазин Shopify?
Shopify не розрізняє людських відвідувачів та AI-краулерів. Цей Worker класифікує кожен User-Agent у дві категорії, важливі для AI-видимості:
| Тип | Опис | Приклади |
|---|---|---|
realtime |
AI-асистенти, що завантажують сторінки у відповідь на запити користувачів | ChatGPT-User, Claude-Web, Perplexity-User |
crawler |
Боти, що індексують контент для пошуку або навчання AI | GPTBot, Googlebot, ClaudeBot, Bingbot |
Запити від нерозпізнаних User-Agent позначаються як other / unknown — ви можете проаналізувати їх пізніше для виявлення непідписаних краулерів. Це дані, які Shopify, Google Analytics та більшість SaaS-платформ аналітики просто не надають.
Як зберігати дані про ботів Shopify в базі даних для глибшого аналізу
Для поглибленої аналітики ботів ви можете розширити Worker для логування запитів ботів у Supabase (або будь-яку базу даних) додатково до запису на диск. Додайте ці секрети Worker:
wrangler secret put SUPABASE_URL
wrangler secret put SUPABASE_SERVICE_KEY
Потім додайте функцію logToDatabase(), яка надсилає POST до REST API вашої бази даних, що викликається через ctx.waitUntil() для відомих запитів ботів. Це дає вам структуровані, запитувані дані про ботів поряд з необробленими лог-файлами.
Як налаштувати Cloudflare DNS для магазину Shopify з логуванням запитів
Для роботи цього рішення ваш домен повинен бути проксований через Cloudflare (помаранчева хмарка). Типова конфігурація DNS для Shopify + Cloudflare:
| Тип | Ім’я | Ціль | Проксі |
|---|---|---|---|
| CNAME | www |
shops.myshopify.com |
Проксований (помаранчева) |
| CNAME | log-collector |
<tunnel-id>.cfargotunnel.com |
Проксований (помаранчева) |
CNAME www вказує на Shopify — Cloudflare проксує та кешує. CNAME log-collector вказує на ваш тунель — Cloudflare безпечно маршрутизує лог-трафік до вашого сервера.
Важливо: Маршрут Worker повинен відповідати проксованому імені хоста (наприклад,
www.yourdomain.com/*). Він не спрацює на непроксованих (сіра хмарка) записах.
Як моніторити та підтримувати ваш конвеєр логування Shopify
# Check receiver status
systemctl status log-receiver
# Check tunnel status
systemctl status cloudflared
# Tail live logs
journalctl -u log-receiver -f
# Count stored log files
ls /var/log/cdn-requests/*.json | wc -l
# Check disk usage
du -sh /var/log/cdn-requests/
Рекомендується додати cron-завдання для моніторингу використання диска та сповіщення, коли обсяг сховища наближається до вашого ліміту.
Поширені запитання
Чому власники магазинів Shopify не мають доступу до серверних логів?
Shopify — це повністю керована SaaS-платформа. Власники магазинів не мають доступу до базової серверної інфраструктури, а це означає відсутність доступу до необроблених логів HTTP-запитів, логів доступу або логів помилок. Shopify надає власну панель аналітики з переглядами сторінок, замовленнями та даними про переходи, але вона не включає окремі HTTP-запити, user agent ботів, час відповіді або геодані на рівні запитів. Немає жодного тарифного плану Shopify, включаючи Shopify Plus, який надає доступ до необроблених серверних логів. Єдиний спосіб захопити ці дані — перехоплювати запити на рівні CDN до того, як вони досягнуть origin-серверів Shopify.
Як відстежувати трафік AI-ботів на магазині Shopify?
Трафік AI-ботів неможливо відстежити через Google Analytics, Shopify Analytics або будь-який інструмент аналітики на основі клієнтського JavaScript, оскільки AI-боти не виконують JavaScript. Єдиний надійний метод — серверне логування запитів. Для магазинів Shopify це означає перехоплення запитів на рівні CDN за допомогою Cloudflare Worker (або еквівалентної edge-функції на іншому CDN). Worker логує кожен вхідний запит, включаючи заголовок User-Agent, який ідентифікує конкретних AI-ботів, таких як ChatGPT-User, GPTBot, ClaudeBot, PerplexityBot та інших. Це той самий підхід, який використовують нові платформи “агентної аналітики”, але розміщений самостійно та повністю під вашим контролем.
Які AI-боти сканують магазини Shopify прямо зараз?
Станом на 2026 рік, основні AI-боти, що звертаються до магазинів Shopify, поділяються на дві категорії. Боти отримання в реальному часі (ChatGPT-User, Claude-User, Perplexity-User) завантажують контент на вимогу під час живих розмов з користувачами. Навчальні краулери (GPTBot, ClaudeBot, PerplexityBot, Bytespider, Amazonbot, Applebot) збирають контент за розкладом для навчання моделей та побудови індексів. Без серверного логування жоден з них не відображається в аналітиці Shopify або Google Analytics.
Скільки полів даних Cloudflare логує на кожен запит?
Це рішення захоплює 40+ полів на кожен запит, включаючи основні дані запиту (часова мітка, метод, URL, шлях, user agent, IP, referer), класифікацію ботів (ім’я та тип бота), геодані Cloudflare (країна, регіон, місто, поштовий індекс, широта, довгота, часовий пояс, континент), мережеву інформацію (ASN, організація, дата-центр, HTTP-протокол, версія TLS), client hints (заголовки sec-ch-ua, що допомагають виявити headless-браузери), метадані fetch (заголовки sec-fetch, що ідентифікують програмні запити) та метрики продуктивності (час до першого байта, час TCP round trip, статус кешу, статус відповіді origin).
Як це порівнюється з вбудованою аналітикою Shopify?
Панель аналітики Shopify показує перегляди сторінок, сесії, показники конверсії та джерела переходів. Вона не показує окремі HTTP-запити, user agent ботів, географічні дані на рівні запитів, метрики продуктивності відповідей або будь-яку активність AI-ботів. Google Analytics, який інтегрується з Shopify, має те саме обмеження, оскільки покладається на клієнтський JavaScript. Це рішення логування на основі Cloudflare захоплює кожен запит, що звертається до вашого домену, включаючи запити від ботів, які ніколи не виконують JavaScript, даючи вам повну картину, яку інструменти Shopify не можуть забезпечити.
Чи можна використовувати це рішення з CDN, відмінним від Cloudflare?
Ця архітектура застосовна до будь-якого edge CDN, який підтримує edge-функції та безпечне тунелювання. Cloudflare Workers мають еквіваленти на інших платформах: Vercel Edge Functions, AWS CloudFront Functions, Fastly Compute та Akamai EdgeWorkers — всі вони можуть перехоплювати запити та надсилати дані логів. Компонент тунелю можна замінити будь-яким безпечним методом з’єднання (SSH-тунель, VPN, прямий HTTPS-ендпоінт з обмеженням за IP). Основний патерн залишається тим самим: перехоплення на edge, асинхронне логування, надсилання до власного приймача.