在这里插入图片描述

一、GEO系统核心概念与开发前言
GEO 全称 Generative Engine Optimization(生成式引擎优化),是区别于传统SEO的新一代AI搜索优化技术。传统SEO仅适配关键词排名、搜索引擎爬虫抓取,而GEO聚焦适配文心一言、ChatGPT、通义千问、AI搜索聚合引擎等生成式AI,让网站内容被AI精准收录、提炼、引用并优先生成问答摘要,大幅提升AI搜索场景下的品牌曝光与流量转化。本文将从零搭建一套定制化GEO智能优化系统,涵盖架构设计、环境部署、核心算法开发、AI语义优化、结构化数据生成、自动化爬虫检测、评分诊断全功能,提供完整可运行源码,支持二次定制开发、企业私有化部署,适配个人站长、中小企业AI流量优化场景。核心实现能力:AI语义内容优化、结构化标签自动生成、LLM检索适配、内容合规打分、区域权重优化、AI搜索摘要适配、批量页面优化。
在这里插入图片描述

二、系统整体架构与技术栈选型
2.1 整体架构设计(前后端分离)
采用轻量化企业级架构,低配置服务器即可部署,兼顾性能与可扩展性,整体分为五大核心模块:

数据采集模块:智能爬取网站页面内容、元标签、文本结构、关键词布局

AI语义优化模块:基于Embedding向量算法、大模型接口,优化内容适配AI检索

GEO规则引擎模块:内置AI搜索专属优化规则,自动修正标题、描述、段落结构、FAQ布局

结构化数据生成模块:自动输出llms.txt、robots.txt、JSON-LD、AI专属Meta标签

诊断评分与可视化模块:对页面GEO优化度打分,输出优化报告与整改方案

在这里插入图片描述

2.2 核心技术栈
后端核心:Python 3.9+、Flask(轻量接口服务)

AI算法:SentenceTransformer语义向量、大模型API适配(通义千问/OpenAI)

数据存储:MySQL(任务数据)、本地JSON缓存(轻量化部署)

部署工具:Docker、Docker Compose(一键部署)

前端展示:原生HTML+CSS+JS(可视化操作面板,无需复杂框架)

核心算法:GeoHash区域权重、语义相似度匹配、意图分类、文本切块优化

三、开发环境准备
3.1 基础环境要求
系统:Windows/Linux/MacOS

Python版本:3.9及以上

依赖工具:pip、git、Docker(可选)

网络:可正常访问大模型API接口

3.2 依赖库安装命令

安装核心依赖 pip install flask requests sentence-transformers numpy beautifulsoup4 lxml python-dotenv

四、GEO系统完整源码开发实现
本章节提供全套可直接运行源码,包含核心引擎、AI优化、结构化文件生成、页面诊断、接口服务五大核心文件,复制即可部署运行。

4.1 项目目录结构
geo-ai-optimize/ ├── .env # 环境变量配置 ├── app.py # 项目入口+接口服务 ├── geo_engine.py # GEO核心优化引擎 ├── ai_semantic.py # AI语义算法模块 ├── page_crawler.py # 页面数据采集爬虫 ├── struct_generator.py # AI结构化文件生成 └── templates/ └── index.html # 前端可视化面板
4.2 环境变量配置文件(.env)

大模型API配置 AI_API_KEY=你的大模型API密钥 AI_API_URL=https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation AI_MODEL=qwen-turbo # 服务配置 PORT=5000 DEBUG=True # GEO优化规则阈值 TITLE_MIN=10 TITLE_MAX=30 DESC_MIN=50 DESC_MAX=160 KEYWORD_MIN=3 KEYWORD_MAX=10

4.3 AI语义算法核心模块(ai_semantic.py)
实现文本向量化、语义相似度计算、内容切块、结论提取,适配AI搜索摘要抓取逻辑

import numpy as np from sentence_transformers import SentenceTransformer from typing import List, Dict import re from datetime import datetime # 加载轻量语义模型 class AISemanticEngine: def init(self, model_name: str = “all-MiniLM-L6-v2”): self.model = SentenceTransformer(model_name) self.embedding_dim = self.model.get_sentence_embedding_dimension() def text_chunk(self, text: str, max_len: int = 80) -> List[str]: “”“文本智能切块,适配AI检索解析”“” sentences = re.split(r"[。!?;]“, text) chunks = [] temp_chunk = “” for sent in sentences: if not sent.strip(): continue if len(temp_chunk + sent) <= max_len: temp_chunk += sent + “。” else: if temp_chunk: chunks.append(temp_chunk.strip()) temp_chunk = sent + “。” if temp_chunk: chunks.append(temp_chunk.strip()) return chunks def encode_text(self, text_list: List[str]) -> np.ndarray: “”“文本批量向量化””" return self.model.encode(text_list, normalize_embeddings=True) def calc_similarity(self, text1: str, text2: str) -> float: “”“计算两段文本语义相似度,0-1"”" vec1 = self.encode_text([text1])[0] vec2 = self.encode_text([text2])[0] similarity = np.dot(vec1, vec2) return round(float(similarity), 4) def extract_conclusion(self, text: str) -> str: “”“提取段落核心结论,适配AI摘要生成”“” conclusion_key = [“因此”, “所以”, “综上”, “总而言之”, “核心是”, “关键在于”] for key in conclusion_key: if key in text: idx = text.find(key) return text[idx:] # 无关键词默认截取后30字作为结论 return text[-30:] if len(text) > 30 else text def build_ai_content_struct(self, title: str, content: str) -> Dict: “”“构建AI友好型结构化内容”“” chunks = self.text_chunk(content) conclusion = self.extract_conclusion(content) return { “title”: title, “content_chunks”: chunks, “core_conclusion”: conclusion, “chunk_count”: len(chunks), “update_time”: datetime.now().strftime(“%Y-%m-%d %H:%M:%S”) } # 初始化全局语义引擎 semantic_engine = AISemanticEngine()
4.4 页面数据采集模块(page_crawler.py)
自动抓取页面标题、描述、关键词、正文内容,为GEO优化提供原始数据

import requests from bs4 import BeautifulSoup from typing import Dict import re class PageCrawler: def init(self): self.headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36” } def crawl_page(self, url: str) -> Dict: “”“抓取页面核心GEO优化数据”“” try: res = requests.get(url, headers=self.headers, timeout=10) res.encoding = “utf-8” soup = BeautifulSoup(res.text, “lxml”) # 提取标题 title = soup.title.string.strip() if soup.title else “” # 提取Meta描述、关键词 desc = “” keyword = “” for meta in soup.find_all(“meta”): if meta.get(“name”) == “description”: desc = meta.get(“content”, “”).strip() if meta.get(“name”) == “keywords”: keyword = meta.get(“content”, “”).strip() # 提取正文内容(过滤标签、空格) content = soup.get_text() content = re.sub(r"\s+", " “, content).strip() return { “code”: 200, “url”: url, “title”: title, “description”: desc, “keywords”: keyword, “content”: content, “msg”: “数据采集成功” } except Exception as e: return { “code”: 500, “url”: url, “msg”: f"采集失败:{str(e)}” } crawler = PageCrawler()
4.5 结构化文件生成模块(struct_generator.py)
生成AI搜索专属llms.txt、robots.txt、JSON-LD结构化数据,让AI爬虫精准识别站点内容

from typing import Dict, List import json from datetime import datetime class StructGenerator: def generate_llms_txt(self, site_url: str, page_list: List[Dict]) -> str: “”“生成AI检索专属llms.txt文件”“” content = f"# {site_url} AI Index Document\n# Update Time: {datetime.now().strftime(‘%Y-%m-%d’)}\n\n" content += “## Page List\n” for page in page_list: content += f"- {page[‘title’]}:{page[‘core_conclusion’]}\n" return content def generate_robots_txt(self) -> str: “”“生成适配AI爬虫的robots规则”“” return “”“User-agent: * Allow: / Allow: /llms.txt Allow: /sitemap.xml Disallow: /admin/ Disallow: /private/ # AI Crawler Special Rule User-agent: GPTBot Allow: / User-agent: ClaudeBot Allow: / User-agent: WenxinBot Allow: / “”” def generate_json_ld(self, page_data: Dict) -> str: “”“生成页面结构化JSON-LD数据”“” json_ld = { “@context”: “https://schema.org”, “@type”: “Article”, “headline”: page_data[“title”], “description”: page_data[“description”], “keywords”: page_data[“keywords”], “dateModified”: datetime.now().strftime(“%Y-%m-%d”), “articleBody”: page_data[“content”][:500] } return json.dumps(json_ld, ensure_ascii=False, indent=2) struct_generator = StructGenerator()
4.6 GEO核心优化引擎(geo_engine.py)
核心规则引擎,实现页面GEO打分、内容优化、AI适配整改,是系统核心功能模块

from typing import Dict import os from dotenv import load_dotenv load_dotenv() class GEOEngine: def init(self): # 加载GEO优化规则阈值 self.rule = { “title_min”: int(os.getenv(“TITLE_MIN”, 10)), “title_max”: int(os.getenv(“TITLE_MAX”, 30)), “desc_min”: int(os.getenv(“DESC_MIN”, 50)), “desc_max”: int(os.getenv(“DESC_MAX”, 160)), “kw_min”: int(os.getenv(“KEYWORD_MIN”, 3)), “kw_max”: int(os.getenv(“KEYWORD_MAX”, 10)) } def score_page_geo(self, page_data: Dict) -> Dict: “”“页面GEO优化度打分(满分100)”“” score = 100 tips = [] # 标题打分 title_len = len(page_data[“title”]) if title_len < self.rule[“title_min”]: score -= 15 tips.append(f"标题过短,建议{self.rule[‘title_min’]}-{self.rule[‘title_max’]}字符") elif title_len > self.rule[“title_max”]: score -= 15 tips.append(f"标题过长,建议{self.rule[‘title_min’]}-{self.rule[‘title_max’]}字符") # 描述打分 desc_len = len(page_data[“description”]) if desc_len < self.rule[“desc_min”]: score -= 20 tips.append(f"描述过短,建议{self.rule[‘desc_min’]}-{self.rule[‘desc_max’]}字符") elif desc_len > self.rule[“desc_max”]: score -= 20 tips.append(f"描述过长,建议{self.rule[‘desc_min’]}-{self.rule[‘desc_max’]}字符") # 关键词打分 kw_list = [k.strip() for k in page_data[“keywords”].split(“,”) if k.strip()] if len(kw_list) < self.rule[“kw_min”]: score -= 15 tips.append(f"关键词数量过少,建议{self.rule[‘kw_min’]}-{self.rule[‘kw_max’]}个") elif len(kw_list) > self.rule[“kw_max”]: score -= 15 tips.append(f"关键词过多,建议{self.rule[‘kw_min’]}-{self.rule[‘kw_max’]}个") # 内容长度基础分 if len(page_data[“content”]) < 300: score -= 10 tips.append(“页面内容过短,AI检索权重低,建议扩充内容”) return { “geo_score”: max(score, 0), “optimize_tips”: tips, “rule_standard”: self.rule } def auto_optimize_content(self, semantic_struct: Dict) -> Dict: “”“AI适配内容自动优化”“” optimize_chunks = [] # 重构段落,每段前置核心结论,适配AI摘要抓取 for chunk in semantic_struct[“content_chunks”]: if len(chunk) > 60: conclusion = self.extract_conclusion(chunk) new_chunk = f"【核心总结】{conclusion} {chunk}" optimize_chunks.append(new_chunk) else: optimize_chunks.append(chunk) # 生成AI友好FAQ结构 faq = self.generate_faq(semantic_struct) return { “optimize_title”: semantic_struct[“title”], “optimize_content”: “\n”.join(optimize_chunks), “faq_struct”: faq, “core_conclusion”: semantic_struct[“core_conclusion”] } def extract_conclusion(self, text: str) -> str: “”“简易结论提取”“” return text[-20:] if len(text) > 20 else text def generate_faq(self, semantic_struct: Dict) -> List[Dict]: “”“自动生成FAQ结构,提升AI问答收录概率”“” return [ { “question”: f"{semantic_struct[‘title’]}是什么?“, “answer”: semantic_struct[“core_conclusion”] }, { “question”: f”{semantic_struct[‘title’]}有什么作用?", “answer”: “本内容可为用户提供精准的行业信息解答,适配AI搜索智能问答场景” } ] geo_engine = GEOEngine()
4.7 项目入口与接口服务(app.py)
整合所有模块,提供Web接口与可视化访问服务,支持在线诊断、优化、文件生成

from flask import Flask, render_template, request, jsonify from page_crawler import crawler from ai_semantic import semantic_engine from geo_engine import geo_engine from struct_generator import struct_generator import os from dotenv import load_dotenv load_dotenv() app = Flask(name) # 前端页面 @app.route(“/”) def index(): return render_template(“index.html”) # 页面GEO诊断接口 @app.route(“/api/geo/diagnose”, methods=[“POST”]) def geo_diagnose(): data = request.json url = data.get(“url”, “”) if not url: return jsonify({“code”: 400, “msg”: “请输入有效网址”}) # 采集页面数据 page_data = crawler.crawl_page(url) if page_data[“code”] != 200: return jsonify(page_data) # GEO打分诊断 score_res = geo_engine.score_page_geo(page_data) # 语义结构化解析 semantic_struct = semantic_engine.build_ai_content_struct( title=page_data[“title”], content=page_data[“content”] ) # 自动优化内容 optimize_res = geo_engine.auto_optimize_content(semantic_struct) return jsonify({ “code”: 200, “page_info”: page_data, “geo_score”: score_res, “semantic_struct”: semantic_struct, “optimize_content”: optimize_res }) # 生成结构化文件接口 @app.route(“/api/geo/struct”, methods=[“POST”]) def gen_struct(): data = request.json site_url = data.get(“site_url”, “”) page_data_list = data.get(“page_list”, []) llms_txt = struct_generator.generate_llms_txt(site_url, page_data_list) robots_txt = struct_generator.generate_robots_txt() json_ld = struct_generator.generate_json_ld(page_data_list[0] if page_data_list else {}) return jsonify({ “code”: 200, “llms_txt”: llms_txt, “robots_txt”: robots_txt, “json_ld”: json_ld }) if name == “main”: app.run(port=int(os.getenv(“PORT”, 5000)), debug=os.getenv(“DEBUG”)==“True”)
4.8 前端可视化面板(templates/index.html)
极简操作界面,支持输入网址一键GEO诊断、查看优化报告、下载结构化文件

                             GEO AI搜索优化智能诊断系统  
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐