Налаштування відстеження відкривань та кліків в email
Відстеження відкривань працює через пікселем—прозоре зображення 1×1 px, вбудоване у листі. Відстеження кліків—через редирект-посилання. Більшість ESP роблять це автоматично, але іноді потрібна власна реалізація для зберігання даних у власній базі.
Пікслева відстеження (відкривання)
// GET /api/email/track/open/:token
app.get('/api/email/track/open/:token', async (req, res) => {
const { token } = req.params;
// Не await—не блокуйте відповідь
trackEmailOpen(token, {
ip: req.ip,
userAgent: req.get('User-Agent') ?? '',
timestamp: new Date(),
}).catch(console.error);
// Повертайте 1x1 прозоре GIF
const pixel = Buffer.from(
'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
'base64'
);
res.writeHead(200, {
'Content-Type': 'image/gif',
'Content-Length': pixel.length,
'Cache-Control': 'no-store, no-cache, must-revalidate',
});
res.end(pixel);
});
async function trackEmailOpen(token: string, meta: EmailOpenMeta) {
const emailLog = await db.emailLogs.findByTrackingToken(token);
if (!emailLog) return;
await db.emailOpens.create({
email_log_id: emailLog.id,
ip: meta.ip,
user_agent: meta.userAgent,
opened_at: meta.timestamp,
});
}
Відстеження кліків (редирект)
// GET /api/email/track/click/:token?url=...
app.get('/api/email/track/click/:token', async (req, res) => {
const { token } = req.query.url;
const targetUrl = req.query.url;
trackEmailClick(token, {
url: targetUrl,
ip: req.ip,
timestamp: new Date(),
}).catch(console.error);
res.redirect(targetUrl);
});
Інтеграція шаблону email
<!-- У вашому email шаблоні -->
<img src="https://your-app.com/api/email/track/open/{{trackingToken}}"
alt="" width="1" height="1" style="display:none;"/>
<a href="https://your-app.com/api/email/track/click/{{trackingToken}}?url={{urlencoded(cta_url)}}">
{{cta_text}}
</a>
Часова шкала
Базова реалізація—1–2 дні. З дашбордом та аналізом когорт—3–5 днів.







