ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

ไอเดีย (Idea) idea url analytics beginner

ไอเดีย #13: ระบบ URL Shortener พร้อมสถิติคลิก

เคยไหมครับ จะใส่ลิงก์แบบฟอร์มลงในโปสเตอร์ประชาสัมพันธ์ แต่ลิงก์ยาวเป็นพรืดจนพิมพ์ตามไม่ได้ หรือทำแคมเปญลงหลายช่องทางแล้วไม่รู้เลยว่าคนคลิกมาจากไหน URL Shortener เป็นระบบที่ดูเล็ก แต่ซ่อนโจทย์ดี ๆ ไว้เพียบ ทั้งการสร้างรหัสสั้นไม่ให้ชนกัน การเก็บสถิติคลิกจำนวนมาก และการกันไม่ให้ระบบกลายเป็นเครื่องมือของคนส่งลิงก์หลอกลวง เหมาะกับมือใหม่ที่อยากได้งานที่ใช้ได้จริงในองค์กรหรือชมรม

ใครจะใช้

  • ผู้ใช้ทั่วไป — ย่อลิงก์และแชร์ต่อ
  • เจ้าของลิงก์ (สมาชิก) — จัดการลิงก์ของตัวเอง และดูสถิติการคลิก
  • แอดมิน — ตรวจลิงก์ที่ถูกรายงาน ปิดลิงก์อันตราย และจัดการโดเมนต้องห้าม

ฟีเจอร์ขั้นต่ำ (MVP)

  • วางลิงก์ยาวแล้วได้รหัสสั้น 6–8 ตัวอักษร หรือตั้งชื่อเองได้ (custom alias) ถ้ายังไม่มีคนใช้
  • redirect ด้วย HTTP 301 หรือ 302 พร้อมบันทึกการคลิกทุกครั้ง
  • สถิติคลิก: จำนวนคลิกรายวัน, referrer, ประเภทอุปกรณ์, เบราว์เซอร์ แสดงเป็นกราฟด้วย Chart.js
  • สร้าง QR code ของลิงก์สั้นเพื่อเอาไปพิมพ์ลงสื่อ
  • กันสแปม: จำกัดจำนวนการสร้างลิงก์ต่อ IP ต่อชั่วโมง, ตรวจโดเมนกับ blocklist และปุ่มรายงานลิงก์อันตราย
  • ตั้งวันหมดอายุหรือปิดลิงก์ชั่วคราวได้

ต่อยอดได้อีก

  • รองรับ UTM parameter เพื่อแยกแคมเปญ
  • ลิงก์ที่ต้องใส่รหัสผ่านก่อนเปิด
  • หน้าพรีวิวปลายทางก่อน redirect เพื่อให้ผู้ใช้มั่นใจว่าปลอดภัย
  • API สำหรับให้ระบบอื่นสร้างลิงก์สั้นอัตโนมัติ

โครงข้อมูลตั้งต้น

CREATE TABLE links (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NULL,
  code VARCHAR(16) UNIQUE NOT NULL,
  target_url TEXT NOT NULL,
  expires_at TIMESTAMP NULL,
  is_active BOOLEAN DEFAULT TRUE,
  created_at TIMESTAMP DEFAULT now()
);
CREATE TABLE clicks (
  id BIGSERIAL PRIMARY KEY,
  link_id BIGINT REFERENCES links(id),
  clicked_at TIMESTAMP DEFAULT now(),
  referrer TEXT, device VARCHAR(20), ip_hash CHAR(64)
);

เพิ่มตาราง blocked_domains (domain, reason) และ reports (link_id, reason, status) สำหรับระบบกันสแปม

ระดับความยาก และสิ่งที่จะได้เรียนรู้

ระดับ มือใหม่ ทำได้ด้วย Yii2, Laravel หรือ Node.js + PostgreSQL/MySQL สิ่งที่จะได้เรียนรู้:

  • การสร้างรหัสสั้นด้วย base62 หรือสุ่มแล้วเช็กซ้ำผ่าน unique index
  • การตั้ง URL routing และเข้าใจความต่างของ 301 กับ 302
  • การออกแบบตารางที่โตเร็ว ใส่ index ให้ถูก และสรุปสถิติรายวันด้วย cron
  • พื้นฐาน rate limiting และ input validation

ข้อควรระวัง

  • ถ้าเปิดให้ใครก็ย่อลิงก์ได้ ระบบจะถูกใช้ส่งลิงก์ phishing อย่างรวดเร็ว ควรมี blocklist และช่องทางรายงาน
  • ตรวจ target URL ให้เป็น http/https เท่านั้น กันการใส่ javascript: หรือ scheme แปลก ๆ
  • IP address ถือเป็นข้อมูลส่วนบุคคลตาม PDPA ควรเก็บแบบ hash และไม่เก็บนานเกินจำเป็น

ใครเคยทำ URL Shortener ใช้งานจริงบ้างครับ ตอนตารางคลิกโตเป็นหลักล้านแถวแก้ปัญหาช้ายังไง ใช้ partition, สรุปรายวัน หรือย้ายไปเก็บใน Redis ก่อน ถ้าลองทำแล้วมาแชร์โค้ดหรือเล่าวิธีกันสแปมในบอร์ดนี้กันได้เลย

0 คะแนน

0 คำตอบ

ยังไม่มีคำตอบ

รู้คำตอบ? ช่วยแบ่งปันได้เลย

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก