上一篇 下一篇 分享链接 返回 返回顶部

从零搭建GEO营销系统:定位、活动、优惠券到上线部署实战

发布人:慈云数据-客服中心 发布时间:6小时前 阅读量:2

GEO营销 部署完整教程|附源码

本文将从零开始讲解如何搭建一个可落地的 GEO营销系统,包括项目思路、功能设计、技术选型、目录结构、核心源码、环境部署、上线发布与优化建议。
这里的 GEO营销 可以理解为面向地理位置、城市、区域、人群标签的精准营销系统,适用于本地生活、连锁门店、区域代理、同城服务、房产、教育培训、餐饮、美业等场景。


一、什么是GEO营销?

GEO营销,全称可以理解为 Geographic Marketing,即基于地理位置的营销方式。

传统营销通常是“广撒网”,例如在全网投放广告、统一发送短信、统一展示活动页面。但不同城市、不同区域、不同门店的用户需求并不一样。例如:

  • 北京用户更关注高端服务和效率;
  • 三四线城市用户更关注价格和优惠;
  • 商场附近用户适合推送到店优惠券;
  • 学校周边用户适合教育、餐饮、文具类活动;
  • 写字楼周边用户适合咖啡、轻食、健身卡推广。

GEO营销的核心就是:

在正确的地理位置,把正确的内容,推送给正确的人群。

一个完整的GEO营销系统,通常包含以下能力:

  1. 用户定位;
  2. 城市识别;
  3. 区域活动匹配;
  4. 门店附近推荐;
  5. 优惠券发放;
  6. 用户行为记录;
  7. 营销数据统计;
  8. 后台活动配置;
  9. 前端落地页展示;
  10. API接口服务。

本文将实现一个简化版但完整可运行的GEO营销系统。


二、项目功能说明

本文实现的系统包含以下模块:

1. 用户端功能

用户访问活动页后,系统会:

  • 获取用户当前经纬度;
  • 根据经纬度判断用户所在城市;
  • 查询该城市是否有营销活动;
  • 展示附近门店;
  • 展示可领取优惠券;
  • 记录用户访问行为。

2. 后端接口功能

后端提供以下接口:

接口 功能
/api/location 根据经纬度获取城市与推荐信息
/api/campaigns 获取当前城市营销活动
/api/coupons 获取优惠券列表
/api/track 记录用户行为
/api/stores/nearby 查询附近门店

3. 数据存储

本教程为了便于部署,使用 SQLite 数据库。
如果用于生产环境,可以替换为 MySQL、PostgreSQL 或 MongoDB。


三、技术选型

本项目采用前后端分离架构。

后端技术

  • Node.js
  • Express
  • SQLite
  • CORS
  • dotenv

前端技术

  • HTML
  • CSS
  • JavaScript
  • 浏览器定位 API
  • Fetch API

部署方式

  • 本地部署
  • Linux服务器部署
  • PM2守护进程部署
  • Nginx反向代理部署

四、项目目录结构

创建项目目录:

geo-marketing-demo
├── server
│   ├── app.js
│   ├── db.js
│   ├── init.sql
│   ├── package.json
│   └── .env
├── public
│   ├── index.html
│   ├── style.css
│   └── main.js
└── README.md

其中:

  • server:后端服务目录;
  • public:前端页面目录;
  • app.js:Express主服务;
  • db.js:数据库连接;
  • init.sql:初始化SQL;
  • index.html:营销落地页;
  • main.js:前端定位与接口请求逻辑。

五、后端源码

1. 创建后端项目

进入项目目录:

mkdir geo-marketing-demo
cd geo-marketing-demo
mkdir server public
cd server
npm init -y

安装依赖:

npm install express sqlite3 cors dotenv

如果你想在开发环境自动重启服务,可以安装:

npm install nodemon -D

2. package.json

server/package.json 中写入:

{
  "name": "geo-marketing-server",
  "version": "1.0.0",
  "description": "GEO营销系统后端服务",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js",
    "init-db": "node db.js"
  },
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^16.4.5",
    "express": "^4.18.3",
    "sqlite3": "^5.1.7"
  },
  "devDependencies": {
    "nodemon": "^3.1.0"
  }
}

3. 环境变量配置

创建 server/.env

PORT=3000
DB_FILE=./geo_marketing.db

4. 数据库初始化SQL

创建 server/init.sql


DROP TABLE IF EXISTS campaigns;
DROP TABLE IF EXISTS stores;
DROP TABLE IF EXISTS coupons;
DROP TABLE IF EXISTS user_tracks;

CREATE TABLE campaigns (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  city TEXT NOT NULL,
  title TEXT NOT NULL,
  description TEXT,
  banner TEXT,
  start_time TEXT,
  end_time TEXT,
  status INTEGER DEFAULT 1
);

CREATE TABLE stores (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  city TEXT NOT NULL,
  address TEXT,
  lat REAL NOT NULL,
  lng REAL NOT NULL,
  phone TEXT
);

CREATE TABLE coupons (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  city TEXT NOT NULL,
  title TEXT NOT NULL,
  amount INTEGER DEFAULT 0,
  condition_text TEXT,
  status INTEGER DEFAULT 1
);

CREATE TABLE user_tracks (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id TEXT,
  event TEXT,
  city TEXT,
  lat REAL,
  lng REAL,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO campaigns(city, title, description, banner, start_time, end_time, status)
VALUES
('北京', '北京
目录结构
全文