[{"data":1,"prerenderedAt":449},["ShallowReactive",2],{"posts":3},[4,153,282],{"id":5,"title":6,"body":7,"category":138,"cover":139,"date":140,"description":141,"extension":142,"meta":143,"navigation":144,"path":145,"seo":146,"stem":147,"tags":148,"__hash__":152},"posts\u002Fblog\u002Fenterprise-website-guide.md","从 0 到 1 搭建企业官网：技术选型与避坑指南",{"type":8,"value":9,"toc":130},"minimark",[10,15,19,32,39,43,99,104,108,123,127],[11,12,14],"h2",{"id":13},"一先想清楚这个官网要解决什么问题","一、先想清楚：这个官网要解决什么问题",[16,17,18],"p",{},"很多企业主做官网时只会说\"做个好看的页面\"，但作为开发者，第一步永远是问清楚目的：",[20,21,22,26,29],"ul",{},[23,24,25],"li",{},"是品牌展示，还是获客转化？",[23,27,28],{},"需要后台管理内容吗？",[23,30,31],{},"目标用户是搜索引擎流量，还是直接访问？",[16,33,34,38],{},[35,36,37],"strong",{},"避坑","：不要一上来就选重型框架。一个纯展示站用静态生成就够了，没必要引入数据库和后台。",[11,40,42],{"id":41},"二技术选型建议","二、技术选型建议",[44,45,46,62],"table",{},[47,48,49],"thead",{},[50,51,52,56,59],"tr",{},[53,54,55],"th",{},"场景",[53,57,58],{},"推荐",[53,60,61],{},"理由",[63,64,65,77,88],"tbody",{},[50,66,67,71,74],{},[68,69,70],"td",{},"纯展示站",[68,72,73],{},"Nuxt\u002FVuePress 静态生成",[68,75,76],{},"快、SEO 好、无运维成本",[50,78,79,82,85],{},[68,80,81],{},"需要内容更新",[68,83,84],{},"Nuxt + 内容管理",[68,86,87],{},"Markdown 驱动，改文不改码",[50,89,90,93,96],{},[68,91,92],{},"需要后台",[68,94,95],{},"Next\u002FNuxt + Headless CMS",[68,97,98],{},"内容与代码解耦",[16,100,101,103],{},[35,102,37],{},"：国内访问务必注意字体与 CDN 的可用性，Google Fonts 经常加载失败，建议自托管。",[11,105,107],{"id":106},"三部署与-seo-的关键点","三、部署与 SEO 的关键点",[109,110,111,114,117,120],"ol",{},[23,112,113],{},"国内服务器必须 ICP 备案，提前 1-3 周准备",[23,115,116],{},"强制 HTTPS，配置 301 跳转",[23,118,119],{},"生成 sitemap 并提交百度站长平台",[23,121,122],{},"每个页面单独写 title 与 description，不要全站共用",[11,124,126],{"id":125},"四总结","四、总结",[16,128,129],{},"企业官网的核心是\"清晰 + 快\"。技术选型围绕内容更新频率来决定，能静态就不要动态。这篇文章里的方案已经过 10+ 个项目验证，希望对你有帮助。",{"title":131,"searchDepth":132,"depth":132,"links":133},"",2,[134,135,136,137],{"id":13,"depth":132,"text":14},{"id":41,"depth":132,"text":42},{"id":106,"depth":132,"text":107},{"id":125,"depth":132,"text":126},"前端","https:\u002F\u002Fcoresg-normal.trae.ai\u002Fapi\u002Fide\u002Fv1\u002Ftext_to_image?prompt=web%20development%20technology%20stack%20illustration%2C%20code%20snippets%20and%20gear%20wheels%2C%20navy%20blue%20color%20palette%2C%20flat%20design&image_size=landscape_16_9","2025-11","企业官网看似简单，但技术选型、SEO、部署环节处处是坑。分享一套经过 10+ 个项目验证的选型方案。","md",{},true,"\u002Fblog\u002Fenterprise-website-guide",{"title":6,"description":141},"blog\u002Fenterprise-website-guide",[149,150,151],"Vue","Nuxt","SEO","N_yyD626PKk5RUWpGOaWNrYl2PtOrITTiGaypHDuW5Y",{"id":154,"title":155,"body":156,"category":270,"cover":271,"date":272,"description":273,"extension":142,"meta":274,"navigation":144,"path":275,"seo":276,"stem":277,"tags":278,"__hash__":281},"posts\u002Fblog\u002Fminiapp-cost-guide.md","小程序开发成本到底多少？一份真实的报价拆解",{"type":8,"value":157,"toc":264},[158,161,164,184,187,237,240,254,257],[11,159,160],{"id":160},"为什么小程序报价差距这么大",[16,162,163],{},"同样一句\"做个商城小程序\"，有人报 5 千，有人报 5 万。差距来自三个变量：",[109,165,166,172,178],{},[23,167,168,171],{},[35,169,170],{},"功能复杂度","：展示型 vs 交易型，差了不止一个量级",[23,173,174,177],{},[35,175,176],{},"后台管理","：要不要管理端，决定工作量翻倍",[23,179,180,183],{},[35,181,182],{},"对接成本","：支付、物流、第三方系统，每个接口都要钱和时间",[11,185,186],{"id":186},"一份真实的报价区间参考",[44,188,189,202],{},[47,190,191],{},[50,192,193,196,199],{},[53,194,195],{},"类型",[53,197,198],{},"周期",[53,200,201],{},"参考报价",[63,203,204,215,226],{},[50,205,206,209,212],{},[68,207,208],{},"展示型小程序",[68,210,211],{},"2-4 周",[68,213,214],{},"0.5 - 1.5 万",[50,216,217,220,223],{},[68,218,219],{},"商城 + 支付",[68,221,222],{},"4-8 周",[68,224,225],{},"2 - 5 万",[50,227,228,231,234],{},[68,229,230],{},"交易 + 复杂业务",[68,232,233],{},"8-16 周",[68,235,236],{},"5 万起",[11,238,239],{"id":239},"给需求方的建议",[20,241,242,248,251],{},[23,243,244,245],{},"不要只比价格，要对比",[35,246,247],{},"案例 + 服务流程 + 售后",[23,249,250],{},"需求文档写得越细，报价越准确，双方越省心",[23,252,253],{},"确认是否包含：UI 设计、苹果安卓两端、服务器、上线审核、售后维护",[11,255,256],{"id":256},"给接单同行的建议",[16,258,259,260,263],{},"报价前一定要把",[35,261,262],{},"需求边界","写清楚，哪些包含、哪些不包含，避免后期扯皮。合理的报价 = 功能 + 人力 + 风险 + 合理利润。",{"title":131,"searchDepth":132,"depth":132,"links":265},[266,267,268,269],{"id":160,"depth":132,"text":160},{"id":186,"depth":132,"text":186},{"id":239,"depth":132,"text":239},{"id":256,"depth":132,"text":256},"接单经验","https:\u002F\u002Fcoresg-normal.trae.ai\u002Fapi\u002Fide\u002Fv1\u002Ftext_to_image?prompt=mini%20program%20development%20cost%20analysis%2C%20price%20tags%20and%20timeline%20chart%2C%20modern%20flat%20illustration%2C%20blue%20and%20navy&image_size=landscape_16_9","2025-09","很多人问\"做个小程序多少钱\"，答案从几千到几十万都有。这篇文章用真实案例拆解影响报价的核心因素。",{},"\u002Fblog\u002Fminiapp-cost-guide",{"title":155,"description":273},"blog\u002Fminiapp-cost-guide",[279,280],"小程序","报价","NWs4paQ5PsebZBJJDwmRSvLRTS1r41bf46sPgS2ljY0",{"id":283,"title":284,"body":285,"category":436,"cover":437,"date":438,"description":439,"extension":142,"meta":440,"navigation":144,"path":441,"seo":442,"stem":443,"tags":444,"__hash__":448},"posts\u002Fblog\u002Fpitfalls-10.md","中小软件项目的 10 个技术踩坑记录",{"type":8,"value":286,"toc":423},[287,291,306,310,321,325,333,337,345,349,357,361,369,373,381,385,393,397,405,409,417,420],[11,288,290],{"id":289},"_1-并发扣库存先锁后查","1. 并发扣库存：先锁后查",[16,292,293,296,297,300,301,305],{},[35,294,295],{},"坑","：先查询库存再判断，超卖事故。\n",[35,298,299],{},"解法","：",[302,303,304],"code",{},"UPDATE ... SET stock = stock - 1 WHERE stock > 0","，用原子操作 + 影响行数判断。",[11,307,309],{"id":308},"_2-慢查询索引失效的常见原因","2. 慢查询：索引失效的常见原因",[16,311,312,300,314,317,318,320],{},[35,313,295],{},[302,315,316],{},"LIKE '%keyword%'"," 前缀模糊导致全表扫描。\n",[35,319,299],{},"：业务上改为前缀匹配，或引入 ES；必要时用覆盖索引。",[11,322,324],{"id":323},"_3-时区问题永远存-utc","3. 时区问题：永远存 UTC",[16,326,327,329,330,332],{},[35,328,295],{},"：直接存东八区字符串，跨平台解析乱套。\n",[35,331,299],{},"：数据库统一 UTC，展示层再转本地时区。",[11,334,336],{"id":335},"_4-上传文件务必做类型校验","4. 上传文件：务必做类型校验",[16,338,339,341,342,344],{},[35,340,295],{},"：只看扩展名放行，被上传了 web shell。\n",[35,343,299],{},"：校验 MIME + 魔数 + 重命名存储 + 独立静态域。",[11,346,348],{"id":347},"_5-配置管理敏感信息不进代码仓库","5. 配置管理：敏感信息不进代码仓库",[16,350,351,353,354,356],{},[35,352,295],{},"：数据库密码写死在代码里，仓库泄露全完。\n",[35,355,299],{},"：环境变量 + 密钥管理服务，.env 不进 git。",[11,358,360],{"id":359},"_6-定时任务防重复执行","6. 定时任务：防重复执行",[16,362,363,365,366,368],{},[35,364,295],{},"：多实例部署后定时任务重复跑，产生重复数据。\n",[35,367,299],{},"：分布式锁（Redis SETNX + 过期时间）。",[11,370,372],{"id":371},"_7-第三方接口必须做超时与重试","7. 第三方接口：必须做超时与重试",[16,374,375,377,378,380],{},[35,376,295],{},"：调用支付接口不设超时，接口挂了页面一直转圈。\n",[35,379,299],{},"：统一 HTTP 客户端，设置连接\u002F读取超时 + 幂等重试。",[11,382,384],{"id":383},"_8-日志关键节点必须留痕","8. 日志：关键节点必须留痕",[16,386,387,389,390,392],{},[35,388,295],{},"：线上出问题查不到上下文，只能靠猜。\n",[35,391,299],{},"：请求 ID 贯穿全链路，关键操作打印结构化日志。",[11,394,396],{"id":395},"_9-数据库连接池用完必还","9. 数据库连接池：用完必还",[16,398,399,401,402,404],{},[35,400,295],{},"：连接未释放，连接池耗尽服务假死。\n",[35,403,299],{},"：使用 ORM\u002F连接池管理，禁止手写裸连接不关闭。",[11,406,408],{"id":407},"_10-备份先演练恢复","10. 备份：先演练恢复",[16,410,411,413,414,416],{},[35,412,295],{},"：有备份但从没演练过，真出事时恢复失败。\n",[35,415,299],{},"：定期做恢复演练，备份文件异地存储。",[11,418,419],{"id":419},"写在最后",[16,421,422],{},"这 10 条几乎都是\"看起来很简单，出事很严重\"的典型。小项目更要注重基本功，把这些变成肌肉记忆。",{"title":131,"searchDepth":132,"depth":132,"links":424},[425,426,427,428,429,430,431,432,433,434,435],{"id":289,"depth":132,"text":290},{"id":308,"depth":132,"text":309},{"id":323,"depth":132,"text":324},{"id":335,"depth":132,"text":336},{"id":347,"depth":132,"text":348},{"id":359,"depth":132,"text":360},{"id":371,"depth":132,"text":372},{"id":383,"depth":132,"text":384},{"id":395,"depth":132,"text":396},{"id":407,"depth":132,"text":408},{"id":419,"depth":132,"text":419},"踩坑记录","https:\u002F\u002Fcoresg-normal.trae.ai\u002Fapi\u002Fide\u002Fv1\u002Ftext_to_image?prompt=developer%20debugging%20bug%20fix%20concept%2C%20magnifying%20glass%20over%20code%2C%20warning%20signs%20and%20checkmarks%2C%20flat%20illustration%20navy%20blue&image_size=landscape_16_9","2025-07","汇总近三年中小项目中反复踩到的技术坑：从并发扣库存到慢查询优化，每一条都对应真实生产事故。",{},"\u002Fblog\u002Fpitfalls-10",{"title":284,"description":439},"blog\u002Fpitfalls-10",[445,446,447],"后端","数据库","运维","jlZmmrp4tG6U2To7vrceflGkT-5CBv79K44aBtd2EM4",1786005259838]