# 商城数据库 SEO 优化说明 ## 📊 SEO 优化概述 为了提升 SPA (Single Page Application) 的 SEO 友好性,我们为主要的商城数据表添加了 `cid` (Content ID) 自增字段,提供更友好的 URL 结构和更好的搜索引擎优化支持。 ## 🎯 涉及的数据表 ### 1. 商品表 (`ml_products`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例 /product/123/iphone-15-pro-256gb /product/456/nike-air-max-270 ``` ### 2. 商品分类表 (`ml_categories`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例 /category/1/digital-electronics /category/5/fashion-clothing ``` ### 3. 品牌表 (`ml_brands`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例 /brand/1/apple /brand/2/nike ``` ### 4. 店铺表 (`ml_shops`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例 /shop/1/zhang-digital-store /shop/2/li-fashion-shop ``` ### 5. 订单表 (`ml_orders`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例(用户中心) /order/12345 /order/67890 ``` ### 6. 优惠券模板表 (`ml_coupon_templates`) ```sql -- 新增字段 cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID -- URL 示例 /coupon/1/new-user-discount /coupon/5/free-shipping ``` ## 🔍 SEO 优化特性 ### 1. URL 结构优化 - **短小精悍**: 使用数字 ID 替代冗长的 UUID - **语义化**: 结合 slug 提供有意义的 URL - **层次清晰**: 明确的路径结构 `/type/cid/slug` ### 2. 索引优化 ```sql -- 为所有 cid 字段创建索引 CREATE INDEX idx_ml_products_cid ON public.ml_products(cid); CREATE INDEX idx_ml_categories_cid ON public.ml_categories(cid); CREATE INDEX idx_ml_brands_cid ON public.ml_brands(cid); CREATE INDEX idx_ml_shops_cid ON public.ml_shops(cid); CREATE INDEX idx_ml_orders_cid ON public.ml_orders(cid); CREATE INDEX idx_ml_coupon_templates_cid ON public.ml_coupon_templates(cid); ``` ### 3. 视图增强 ```sql -- 商品详情视图包含所有相关的 cid SELECT p.cid as product_cid, c.cid as category_cid, b.cid as brand_cid, s.cid as shop_cid, -- 其他字段... FROM public.ml_products_detail_view; ``` ## 🛠️ SEO 实用函数 ### 1. 根据 CID 获取数据 ```sql -- 获取商品信息 SELECT * FROM public.get_product_by_cid(123); -- 获取分类信息 SELECT * FROM public.get_category_by_cid(5); -- 获取品牌信息 SELECT * FROM public.get_brand_by_cid(2); -- 获取店铺信息 SELECT * FROM public.get_shop_by_cid(1); ``` ### 2. 生成 SEO 友好 URL ```sql -- 生成商品 URL SELECT public.generate_seo_url('product', 123, 'iphone-15-pro'); -- 结果: /product/123/iphone-15-pro -- 生成分类 URL SELECT public.generate_seo_url('category', 5, 'digital-electronics'); -- 结果: /category/5/digital-electronics ``` ### 3. 批量更新 Slug ```sql -- 为现有数据生成 slug SELECT public.update_seo_slugs(); ``` ## 🎨 前端 URL 路由设计 ### 1. Vue Router 配置示例 ```javascript const routes = [ // 商品详情页 { path: '/product/:cid/:slug?', name: 'ProductDetail', component: () => import('@/views/ProductDetail.vue'), props: true }, // 分类页面 { path: '/category/:cid/:slug?', name: 'CategoryPage', component: () => import('@/views/CategoryPage.vue'), props: true }, // 品牌页面 { path: '/brand/:cid/:slug?', name: 'BrandPage', component: () => import('@/views/BrandPage.vue'), props: true }, // 店铺页面 { path: '/shop/:cid/:slug?', name: 'ShopPage', component: () => import('@/views/ShopPage.vue'), props: true } ]; ``` ### 2. API 调用示例 ```javascript // 根据 cid 获取商品详情 async getProductDetail(cid) { const response = await this.$http.get(`/api/products/cid/${cid}`); return response.data; } // 根据 cid 获取分类商品列表 async getCategoryProducts(cid, page = 1) { const response = await this.$http.get(`/api/categories/${cid}/products`, { params: { page, limit: 20 } }); return response.data; } ``` ## 📈 SEO 最佳实践 ### 1. URL 规范化 ```javascript // 确保 URL 包含 slug function normalizeProductUrl(cid, slug) { if (!slug) { // 重定向到包含 slug 的完整URL const product = await getProductByCid(cid); return `/product/${cid}/${product.slug}`; } return `/product/${cid}/${slug}`; } ``` ### 2. Meta 标签优化 ```javascript // 动态设置页面 meta 信息 function setProductMeta(product) { document.title = `${product.name} - ${product.brand_name} | 商城名称`; const metaDescription = document.querySelector('meta[name="description"]'); metaDescription.content = product.description.substring(0, 160); const metaKeywords = document.querySelector('meta[name="keywords"]'); metaKeywords.content = product.tags.join(', '); } ``` ### 3. 结构化数据 ```javascript // 生成商品的结构化数据 function generateProductSchema(product) { return { "@context": "https://schema.org/", "@type": "Product", "name": product.name, "description": product.description, "image": product.main_image_url, "brand": { "@type": "Brand", "name": product.brand_name }, "offers": { "@type": "Offer", "price": product.base_price, "priceCurrency": "CNY", "availability": product.available_stock > 0 ? "https://schema.org/InStock" : "https://schema.org/OutOfStock" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": product.rating_avg, "reviewCount": product.rating_count } }; } ``` ## 🔧 数据库迁移 ### 1. 现有数据处理 如果数据库中已有数据,`cid` 字段会自动从 1 开始分配: ```sql -- 检查现有数据的 cid 分配情况 SELECT 'ml_products' as table_name, MIN(cid) as min_cid, MAX(cid) as max_cid, COUNT(*) as total_records FROM public.ml_products UNION ALL SELECT 'ml_categories', MIN(cid), MAX(cid), COUNT(*) FROM public.ml_categories; ``` ### 2. 序列重置(如果需要) ```sql -- 重置序列到指定值 SELECT setval('public.ml_products_cid_seq', 10000); SELECT setval('public.ml_categories_cid_seq', 1000); ``` ## 📊 性能监控 ### 1. 查询性能 ```sql -- 监控 cid 查询的性能 EXPLAIN ANALYZE SELECT * FROM public.ml_products WHERE cid = 123; -- 检查索引使用情况 SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes WHERE indexname LIKE '%_cid'; ``` ### 2. 存储空间 ```sql -- 查看 cid 字段的存储开销 SELECT table_name, column_name, data_type, is_nullable FROM information_schema.columns WHERE column_name = 'cid' AND table_schema = 'public'; ``` ## 🎯 使用建议 ### 1. 前端开发 - 优先使用 `cid` 进行路由和API调用 - 保留 `slug` 用于SEO和用户体验 - 实现URL自动补全功能 ### 2. 后端开发 - API 接口支持 `cid` 查询 - 实现 `cid` 到 `UUID` 的快速映射 - 添加 URL 重定向逻辑 ### 3. SEO 优化 - 确保所有重要页面都有对应的 `cid` URL - 实现面包屑导航 - 生成 XML sitemap ### 4. 数据维护 - 定期检查 slug 的唯一性 - 监控 cid 序列的使用情况 - 备份重要的 SEO 相关数据 --- 通过以上优化,商城系统将获得更好的 SEO 表现和用户体验!