← Về trang chủ

Tạo QR Động — Đổi URL sau khi in, theo dõi lượt quét

QR Động (Dynamic QR) dẫn qua link rút gọn của chúng tôi, sau đó redirect đến URL đích. Bạn có thể đổi URL đích bất kỳ lúc nào mà không cần in lại QR, và xem được số lượt quét theo ngày, theo quốc gia. Không cần đăng ký tài khoản.

Editable URLScan analyticsNo loginClaim token

QR động của bạn

Bạn chưa có QR động nào. Tạo cái đầu tiên ở trên ⬆️

Vì sao dùng công cụ này

✏️
Đổi URL bất cứ lúc nào

In QR lên banner, sau 1 tháng đổi landing page mà không phải in lại — chỉ cần đăng nhập dashboard và update URL đích.

📊
Theo dõi lượt quét

Đếm số lượt scan tổng, 24h gần nhất, 7 ngày gần nhất + breakdown theo ngày và quốc gia (qua Cloudflare geo).

🔑
Không cần tài khoản

Mỗi QR cấp 1 claim-token bí mật lưu trong trình duyệt của bạn. Không email, không password — chỉ token là chìa khoá.

Cách sử dụng

  1. 1Dán URL đích vào ô input và bấm 'Tạo QR động'.
  2. 2Lưu claim-token vào nơi an toàn (1Password, Notes app, file văn bản). Mất token = mất quyền edit + xem stats.
  3. 3Tải QR PNG, in lên banner/poster/danh thiếp. Người quét sẽ đi qua link rút gọn rồi vào URL đích.
  4. 4Khi cần đổi URL: vào dashboard 'QR của bạn' → bấm Edit → nhập URL mới → Save. Mọi QR đã in vẫn hoạt động.
  5. 5Theo dõi stats: dashboard hiển thị scan_count + 24h/7d breakdown realtime.

QR Động vs QR Tĩnh — Khác nhau như thế nào?

QR Tĩnh (Static QR) là loại phổ biến nhất: URL được encode trực tiếp vào pattern. Quét → mở URL đó. Ưu điểm: miễn phí, không phụ thuộc server, không hết hạn. Nhược điểm: URL không đổi được — đã in là vĩnh viễn.

QR Động (Dynamic QR) encode 1 link rút gọn của chúng tôi (vd qr-code.phanmemtonghop.com/r/aB3xY7Pq). Quét → trình duyệt mở link rút gọn → server redirect 302 đến URL đích thực sự. Vì URL đích lưu trong DB của ta, có thể đổi bất kỳ lúc nào.

Đổi lại, QR Động phụ thuộc vào server chúng tôi: nếu server down, QR không quét được. Chúng tôi cam kết SLA 99.9% và backup DB hàng ngày. Hệ thống chạy trên homeserver phanmemtonghop ổn định 18+ tháng (xem các SaaS khác trong ecosystem).

Anonymous claim-token: thay vì login email/password, mỗi QR cấp 1 token bí mật 24-char nanoid. Bạn lưu token này (browser localStorage tự động), khi cần edit/stats thì gửi kèm. Không tài khoản nghĩa là không bị phishing email + không cần verify.

  • URL có thể đổi sau khi tạo (PATCH /api/qr/:id)
  • Scan analytics: total + 24h + 7d + by_country + by_day
  • Anonymous claim-token (không email/password)
  • Link rút gọn 8 ký tự (qr-code.../r/aB3xY7Pq)
  • Bot detection — không tính lượt scan từ crawler
  • 302 redirect chuẩn (SEO-friendly)
  • Rate limit 5 QR/phút/IP chống spam
  • Xóa QR + scan history qua dashboard

Trường hợp sử dụng QR Động

Marketing campaign

Banner sự kiện QR Động → đổi landing theo mùa. Khách quét sau 6 tháng vẫn vào trang mới.

Menu nhà hàng

Sticker QR trên bàn → đổi link menu khi update giá hoặc đổi platform (Google Drive → website riêng).

A/B test

In 1000 QR, tuần 1 trỏ về Landing A, tuần 2 chuyển sang Landing B — so sánh conversion.

Coupon expiry

QR coupon hết hạn → đổi link sang trang 'Hết hạn' hoặc voucher mới. Khách không cần quét QR khác.

Khoá QR phishing

Nếu phát hiện QR bị share sai context (lừa đảo, bookmark cũ), đổi target sang trang cảnh báo hoặc xoá QR.

Tracking campaign

1 QR cho mỗi kênh (Facebook, TikTok, Email) → so sánh số scan để biết kênh nào hiệu quả nhất.

Kỹ thuật phía sau QR Động

Khi tạo QR động, hệ thống sinh ID 8 ký tự (nanoid alphanumeric URL-safe) và 24 ký tự claim-token. Cặp ID + bcrypt hash của token được lưu vào SQLite. Bạn nhận lại id + token (token chỉ trả 1 lần — sau đó chỉ còn hash).

QR Code được tạo client-side trỏ về https://qr-code.phanmemtonghop.com/r/<id>. Khi user quét, request đến /r/<id> handler Next.js Route Handler, lookup target_url trong DB, increment scan_count + log scan_event (UA + cf-ipcountry), trả về 302 redirect.

Edit URL: gửi PATCH /api/qr/<id> với body chứa target_url mới + claim_token. Server verify bcrypt.compare(token, hash) — nếu match, update target_url. Không match → 403 Forbidden.

Anti-spam: rate limit 5 creates/min/IP qua in-memory bucket. Bot detection regex (bot|crawler|spider|preview|fetch|curl|wget) — bot vẫn được redirect nhưng không tính vào scan_count để stats sạch.

Câu hỏi về QR Động

Mất claim-token thì sao? Khôi phục được không?

Không. Chúng tôi chỉ lưu bcrypt hash, không lưu plain text token. Mất token = mất vĩnh viễn quyền edit + xem stats. QR vẫn hoạt động (vẫn redirect về URL đích cũ) nhưng bạn không update được nữa. Hãy lưu token ngay sau khi tạo (browser tự lưu localStorage, nhưng nên backup vào 1Password / file txt).

Nếu xoá localStorage browser thì có mất luôn QR không?

QR và stats vẫn còn trong DB của ta. Nhưng dashboard không thấy QR đó nữa vì danh sách 'QR của bạn' đọc từ localStorage. Để khôi phục: cần claim-token để fetch /api/qr/:id/stats. Nếu mất cả localStorage và backup token → coi như mất quyền sở hữu.

Số lượt scan có chính xác không?

Có. Mỗi /r/:id GET đều log 1 scan_event vào DB (trừ khi User-Agent là bot/crawler — bị filter ra). Stats hiển thị realtime từ COUNT(*) các scan_event.

Country breakdown lấy từ đâu?

Từ header cf-ipcountry của Cloudflare (DNS proxy). Nếu request không đi qua CF (vd test internal), country sẽ là '??'.

Có giới hạn số QR tạo được không?

Rate limit 5 QR/phút/IP để chống spam. Không giới hạn tổng số QR mỗi user. DB SQLite chứa được hàng triệu records.

URL đích có cần là HTTPS không?

Chấp nhận cả HTTP và HTTPS. Tuy nhiên 1 số trình duyệt mobile có thể chặn redirect đến HTTP — khuyến nghị luôn dùng HTTPS.