← All Articles

Shopify Tidak Memberikan Fail Log kepada Anda. Inilah Panduan Teknikal Lengkap untuk Mendapatkannya dengan Cloudflare (atau mana-mana Edge CDN).

Seni bina pengelogan permintaan Cloudflare CDN untuk kedai Shopify

Satu Titik Buta Besar dalam E-Dagang Baru Sahaja Diselesaikan

Sejak hari Shopify dilancarkan, platform ini menyimpan log pelayan mentah sepenuhnya di luar jangkauan pemilik kedai. Anda mendapat corong penukaran dan laporan jualan. Apa yang anda tidak dapat ialah satu perkara yang benar-benar memberitahu anda apa yang menghentam pelayan anda: log permintaan HTTP.

Selama bertahun-tahun, ini hanyalah gangguan kecil. Siapa yang peduli tentang log mentah apabila anda mempunyai paparan halaman dan kadar penukaran? Google Analytics menjejaki manusia anda. Platform iklan anda menjejaki kempen anda. Kehidupan baik.

Kemudian AI berlaku.

ChatGPT, Claude, Perplexity, Google AI Overviews, Microsoft Copilot - mereka semua menghantar bot ke kedai anda sekarang. Ada yang merangkak halaman anda untuk membina data latihan. Yang lain mengambil kandungan produk anda secara masa nyata untuk menjawab soalan pelanggan. Dan yang paling mengejutkan? Alat analitik tradisional seperti Google Analytics tidak dapat melihat mana-mana daripadanya. Mereka bergantung pada JavaScript pihak klien yang bot tidak pernah laksanakan. Majoriti interaksi AI dengan kedai anda tidak kelihatan kepada anda.

Ini adalah titik buta baharu dalam e-dagang. Bot AI tidak menjalankan skrip penjejakan anda. Mereka tidak menerima kuki. Mereka tidak muncul dalam laporan GA4 anda. Tetapi mereka pasti membaca halaman produk anda, menarik penerangan anda ke dalam jawapan yang dijana AI, dan membentuk sama ada pelanggan pernah menemui jenama anda.

Alat baharu yang tertumpu pada “analitik ejen” sedang muncul untuk membantu pemilik laman web memahami aktiviti perangkak AI dan rujukan yang dijana AI melalui penjejakan pihak pelayan, klasifikasi bot, dan pengesahan IP. Industri mengiktiraf bahawa model analitik pihak klien lama pada asasnya rosak untuk era penemuan kandungan yang mengutamakan AI. Itulah sebabnya kami membina Papan Pemuka WISLR AI Visibility - untuk memberikan jenama gambaran jelas tentang cara platform AI berinteraksi dengan kandungan mereka, daripada kadar rangkakan hingga permintaan pengambilan hingga trafik rujukan yang didorong AI.

Tetapi jika anda menggunakan Shopify, anda mempunyai masalah unik: anda tidak mengawal pelayan. Anda tidak boleh memasang penjejakan pihak pelayan secara langsung. Anda tidak boleh melihat log akses anda. Anda tidak boleh grep untuk GPTBot. Infrastruktur Shopify adalah kotak hitam, dan mereka tidak menunjukkan apa-apa keurganan untuk membukanya.

Tidak lagi. Inilah cara untuk mendapatkan semula log anda.

Panduan ini membimbing anda melalui pembinaan saluran pengelogan permintaan penuh anda sendiri untuk kedai Shopify menggunakan Cloudflare. Setiap permintaan HTTP. Data geografi penuh. Metrik prestasi. Dan yang paling penting, pengesanan dan klasifikasi bot yang lengkap, supaya anda akhirnya dapat melihat dengan tepat sistem AI mana yang melawat kedai anda, berapa kerap, dan halaman mana yang mereka minati.


Bagaimanakah Pengelogan Permintaan Cloudflare Berfungsi untuk Shopify?

 Pelawat meminta kedai Shopify anda
         │
         ▼
 Cloudflare CDN (domain anda diproksi melalui Cloudflare)
         │
         ▼
 Cloudflare Worker (berjalan pada setiap permintaan)
    ├──→ Meneruskan permintaan ke asal Shopify (pelawat mendapat respons biasa)
    └──→ POST entri log JSON ke penerima log anda (tidak menyekat, melalui ctx.waitUntil)
              │
              ▼
         Cloudflare Tunnel
         (CNAME pada domain anda → terowong → localhost pada pelayan anda)
              │
              ▼
         Penerima HTTP Node.js (localhost:9090)
              │
              ▼
         Fail log JSON ditulis ke cakera

Tiada port didedahkan secara awam. Cloudflare Tunnel mengendalikan pengangkutan selamat dari pinggir Cloudflare ke pelayan anda melalui sambungan keluar sahaja.


Apa yang Anda Perlukan untuk Menyediakan Pengelogan Permintaan Shopify?

  • Kedai Shopify dengan domain tersuai yang diproksi melalui Cloudflare (awan oren diaktifkan)
  • Pelayan untuk menerima log
  • Node.js dipasang pada pelayan
  • Akaun Cloudflare dengan Workers diaktifkan
  • Wrangler CLI dipasang (npm install -g wrangler)
  • Cloudflared dipasang pada pelayan

Langkah 1: Cipta Cloudflare Worker

Worker memintas setiap permintaan pada domain anda, memproksi ke Shopify, dan menghantar entri log secara tak segerak ke penerima anda.

1a. Sumber 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. Konfigurasi 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" }
]

Gantikan www.yourdomain.com dengan domain tersuai kedai Shopify anda.

1c. Tetapkan Rahsia Worker

wrangler secret put INGEST_API_KEY
# Paste your generated API key when prompted

1d. Sebarkan

npx wrangler deploy

Langkah 2: Sediakan Penerima Log pada Pelayan Anda

Pelayan HTTP Node.js yang minimum yang menerima kumpulan log dan menulisnya ke cakera.

2a. Skrip Penerima (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}`);
});

Perkara utama:

  • Diikat kepada 127.0.0.1 sahaja - tidak didedahkan kepada internet
  • Mengesahkan permintaan dengan pengepala X-API-Key
  • Menulis setiap kumpulan log sebagai fail JSON bertanda masa
  • Had muatan 10MB setiap permintaan

2b. Perkhidmatan systemd

Cipta /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

Aktifkan dan mulakan:

systemctl daemon-reload
systemctl enable --now log-receiver

Langkah 3: Sediakan Cloudflare Tunnel

Terowong ini mencipta sambungan selamat dari pinggir Cloudflare ke pelayan anda - tiada port terbuka, tiada peraturan tembok api diperlukan.

3a. Pasang 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. Pengesahan

cloudflared tunnel login
# Opens a browser (or gives you a URL) to authorize with your Cloudflare account

Ini menyimpan cert.pem ke ~/.cloudflared/.

3c. Cipta Terowong

cloudflared tunnel create shopify-log-collector

Ini mengeluarkan ID Terowong (UUID) dan mencipta fail JSON kelayakan dalam ~/.cloudflared/.

3d. Konfigurasikan Terowong

Cipta ~/.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: Subdomain yang Worker anda akan POST log kepadanya
  • service: Menghala ke penerima Node.js anda pada localhost:9090
  • Peraturan tangkap semua: Mengembalikan 404 untuk mana-mana hostname lain (diperlukan oleh cloudflared)

3e. Cipta Rekod DNS

cloudflared tunnel route dns shopify-log-collector log-collector.yourdomain.com

Ini mencipta rekod CNAME dalam DNS Cloudflare anda:

log-collector.yourdomain.com  →  <TUNNEL-ID>.cfargotunnel.com

Rekod ini diproksi melalui Cloudflare (awan oren) - ID terowong dalam CNAME tidak bermakna secara awam.

3f. Pasang sebagai Perkhidmatan Sistem

cloudflared service install
systemctl enable --now cloudflared

Ini menyalin konfigurasi anda ke /etc/cloudflared/config.yml dan mencipta unit systemd.

Sahkan Terowong

systemctl status cloudflared
# Should show: active (running)

curl https://log-collector.yourdomain.com/status
# Should return: {"status":"ok"}

Langkah 4: Jana Kunci API Anda

Jana kunci API rawak yang dikongsi antara Worker dan penerima:

openssl rand -hex 32

Tetapkan nilai ini:

  1. Sebagai rahsia Worker melalui wrangler secret put INGEST_API_KEY
  2. Dalam baris Environment systemd penerima (LOG_API_KEY=…)

Langkah 5: Sahkan Hujung ke Hujung

  1. Lawati kedai Shopify anda dalam pelayar
  2. Semak log penerima:
journalctl -u log-receiver -f
# Should show: Wrote logs-1234567890-abc123.json (1234 bytes)
  1. Periksa fail log:
cat /var/log/cdn-requests/logs-*.json | head -1 | python3 -m json.tool

Anda sepatutnya melihat entri log penuh dengan butiran permintaan, data geografi, dan metrik prestasi.

Contoh Entri Log

{
  "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"
  }]
}

Bagaimanakah Keseluruhan Saluran Pengelogan Shopify Berfungsi?

Komponen Apa yang dilakukan Di mana ia berjalan
Cloudflare Worker Memintas setiap permintaan, memproksi ke Shopify, menghantar entri log Pinggir Cloudflare (disebarkan melalui Wrangler)
Cloudflare Tunnel Menghubungkan pinggir Cloudflare ke pelayan anda dengan selamat (tiada port terbuka) Daemon cloudflared pada pelayan anda
DNS CNAME log-collector.yourdomain.com ke <tunnel-id>.cfargotunnel.com DNS Cloudflare untuk zon anda
Penerima Node.js Menerima POST log JSON, mengesahkan melalui kunci API, menulis ke cakera Pelayan anda, diikat ke localhost:9090

Aliran Data

1. Pelawat melayari https://www.yourdomain.com/products/something
2. Cloudflare menghala melalui Worker
3. Worker mengambil respons asal dari Shopify → mengembalikannya kepada pelawat
4. Worker POST { logs: [entry] } ke https://log-collector.yourdomain.com/collect
   (tidak menyekat - pelawat tidak menunggu untuk ini)
5. Cloudflare menyelesaikan log-collector.yourdomain.com melalui CNAME terowong
6. Terowong memajukan permintaan ke localhost:9090 pada pelayan anda
7. Penerima mengesahkan X-API-Key, menulis fail JSON ke cakera

Apakah Data Permintaan Shopify yang Boleh Anda Tangkap yang Shopify Tidak Akan Tunjukkan kepada Anda?

Panel pentadbir Shopify menunjukkan anda paparan halaman, pesanan, dan sumber rujukan. Ia tidak menunjukkan bot AI mana yang melawat, halaman apa yang mereka ambil, dari mana mereka datang, atau seberapa pantas pelayan anda bertindak balas. Persediaan ini menangkap 40+ medan setiap permintaan merentasi kategori ini:

Kategori Medan
Permintaan timestamp, method, url, path, host, userAgent, ip, referer
Pengesanan Bot botName, botType (realtime / crawler / preview / unknown)
Geo Cloudflare country, region, city, postalCode, latitude, longitude, timezone, continent
Rangkaian asn, asOrganization, colo, httpProtocol, tlsVersion
Client Hints sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform
Fetch Metadata sec-fetch-dest, sec-fetch-mode, sec-fetch-site
Prestasi edgeTimeToFirstByteMs, clientTcpRttMs, cacheCacheStatus, originResponseStatus

Client Hints dan Fetch Metadata amat berguna untuk mengenal pasti pelayar tanpa kepala dan bot tidak bertandatangan - pelayar sebenar menghantar pengepala ini, kebanyakan bot tidak.


Bot AI Manakah yang Melawat Kedai Shopify Anda?

Shopify tidak membezakan antara pelawat manusia dan perangkak AI. Worker ini mengklasifikasikan setiap User-Agent ke dalam dua kategori yang penting untuk keterlihatan AI:

Jenis Penerangan Contoh
realtime Pembantu AI yang mengambil halaman sebagai respons kepada pertanyaan pengguna ChatGPT-User, Claude-Web, Perplexity-User
crawler Bot yang mengindeks kandungan untuk carian atau latihan AI GPTBot, Googlebot, ClaudeBot, Bingbot

Permintaan daripada User-Agent yang tidak dikenali ditandai other / unknown - anda boleh menganalisis ini kemudian untuk mencari perangkak tidak bertandatangan. Ini adalah data yang Shopify, Google Analytics, dan kebanyakan platform analitik SaaS langsung tidak sediakan.


Cara Menyimpan Data Bot Shopify dalam Pangkalan Data untuk Analisis Lebih Mendalam

Untuk analitik bot yang lebih mendalam, anda boleh melanjutkan Worker untuk melog permintaan bot ke Supabase (atau mana-mana pangkalan data) sebagai tambahan kepada cakera. Tambah rahsia Worker ini:

wrangler secret put SUPABASE_URL
wrangler secret put SUPABASE_SERVICE_KEY

Kemudian tambah fungsi logToDatabase() yang POST ke REST API pangkalan data anda, dipanggil melalui ctx.waitUntil() untuk permintaan bot yang dikenali. Ini memberikan anda data bot yang berstruktur dan boleh dikueri bersama fail log mentah.


Cara Mengkonfigurasikan DNS Cloudflare untuk Kedai Shopify dengan Pengelogan Permintaan

Untuk persediaan ini berfungsi, domain anda mesti diproksi melalui Cloudflare (awan oren). Persediaan DNS tipikal Shopify + Cloudflare:

Jenis Nama Sasaran Proksi
CNAME www shops.myshopify.com Diproksi (oren)
CNAME log-collector <tunnel-id>.cfargotunnel.com Diproksi (oren)

CNAME www menunjuk ke Shopify - Cloudflare memproksi dan menyimpan cache. CNAME log-collector menunjuk ke terowong anda - Cloudflare menghala trafik log dengan selamat ke pelayan anda.

Penting: Laluan Worker mesti sepadan dengan hostname yang diproksi (cth., www.yourdomain.com/*). Ia tidak akan dicetuskan pada rekod yang tidak diproksi (awan kelabu).


Cara Memantau dan Menyelenggara Saluran Log Shopify Anda

# 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/

Pertimbangkan untuk menambah kerja cron bagi memantau penggunaan cakera dan memberi amaran apabila storan menghampiri had anda.


Soalan Lazim

Mengapa pemilik kedai Shopify tidak boleh mengakses log pelayan?

Shopify adalah platform SaaS yang diurus sepenuhnya. Pemilik kedai tidak mempunyai akses kepada infrastruktur pelayan yang mendasari, yang bermakna tiada akses kepada log permintaan HTTP mentah, log akses, atau log ralat. Shopify menyediakan papan pemuka analitiknya sendiri dengan paparan halaman, pesanan, dan data rujukan, tetapi ini tidak termasuk permintaan HTTP individu, ejen pengguna bot, masa respons, atau data geografi pada peringkat permintaan. Tiada pelan Shopify, termasuk Shopify Plus, yang menyediakan akses log pelayan mentah. Satu-satunya cara untuk menangkap data ini adalah dengan memintas permintaan pada lapisan CDN sebelum ia mencapai pelayan asal Shopify.

Bagaimana anda menjejaki trafik bot AI pada kedai Shopify?

Trafik bot AI tidak boleh dijejaki melalui Google Analytics, Shopify Analytics, atau mana-mana alat analitik JavaScript pihak klien kerana bot AI tidak melaksanakan JavaScript. Satu-satunya kaedah yang boleh dipercayai adalah pengelogan permintaan pihak pelayan. Untuk kedai Shopify, ini bermakna memintas permintaan pada lapisan CDN menggunakan Cloudflare Worker (atau fungsi pinggir yang setara pada CDN lain). Worker melog setiap permintaan masuk, termasuk pengepala User-Agent, yang mengenal pasti bot AI tertentu seperti ChatGPT-User, GPTBot, ClaudeBot, PerplexityBot, dan lain-lain. Ini adalah pendekatan yang sama digunakan oleh platform “analitik ejen” yang baru muncul, tetapi dihoskan sendiri dan sepenuhnya di bawah kawalan anda.

Apakah bot AI yang merangkak kedai Shopify sekarang?

Sehingga 2026, bot AI utama yang menghentam kedai Shopify terbahagi kepada dua kategori. Bot pengambilan masa nyata (ChatGPT-User, Claude-User, Perplexity-User) mengambil kandungan atas permintaan semasa perbualan pengguna secara langsung. Perangkak latihan (GPTBot, ClaudeBot, PerplexityBot, Bytespider, Amazonbot, Applebot) mengumpul kandungan mengikut jadual untuk latihan model dan pembinaan indeks. Tanpa pengelogan pihak pelayan, tiada satu pun daripada ini muncul dalam analitik Shopify atau Google Analytics.

Berapa banyak medan data yang Cloudflare log setiap permintaan?

Persediaan ini menangkap 40+ medan setiap permintaan, termasuk asas permintaan (timestamp, method, URL, path, user agent, IP, referer), klasifikasi bot (nama bot dan jenis), data geo Cloudflare (negara, wilayah, bandar, poskod, latitud, longitud, zon masa, benua), maklumat rangkaian (ASN, organisasi, pusat data, protokol HTTP, versi TLS), client hints (pengepala sec-ch-ua yang membantu mengesan pelayar tanpa kepala), fetch metadata (pengepala sec-fetch yang mengenal pasti permintaan programatik), dan metrik prestasi (masa ke bait pertama, masa perjalanan pergi balik TCP, status cache, status respons asal).

Bagaimanakah ini berbanding dengan analitik terbina dalam Shopify?

Papan pemuka analitik Shopify menunjukkan paparan halaman, sesi, kadar penukaran, dan sumber rujukan. Ia tidak menunjukkan permintaan HTTP individu, ejen pengguna bot, data geografi pada peringkat permintaan, metrik prestasi respons, atau sebarang aktiviti bot AI. Google Analytics, yang Shopify integrasikan, mempunyai had yang sama kerana ia bergantung pada JavaScript pihak klien. Persediaan pengelogan berasaskan Cloudflare ini menangkap setiap permintaan yang menyentuh domain anda, termasuk yang daripada bot yang tidak pernah melaksanakan JavaScript, memberikan anda gambaran lengkap yang alat Shopify tidak mampu sediakan.

Bolehkah anda menggunakan persediaan ini dengan CDN selain Cloudflare?

Seni bina ini boleh digunakan pada mana-mana edge CDN yang menyokong fungsi pinggir dan terowong selamat. Cloudflare Workers mempunyai setara pada platform lain: Vercel Edge Functions, AWS CloudFront Functions, Fastly Compute, dan Akamai EdgeWorkers semuanya boleh memintas permintaan dan menghantar data log. Komponen terowong boleh digantikan dengan mana-mana kaedah sambungan selamat (terowong SSH, VPN, titik akhir HTTPS langsung dengan senarai kebenaran IP). Corak teras adalah sama: mintas di pinggir, log secara tak segerak, hantar ke penerima anda sendiri.