[{"data":1,"prerenderedAt":376},["ShallowReactive",2],{"blog-gsc-api-export-script":3,"blog-prev-gsc-api-export-script":104,"blog-next-gsc-api-export-script":197},{"id":4,"title":5,"author":6,"body":7,"canonical":88,"category":89,"cover":88,"date":90,"description":91,"draft":92,"extension":93,"keywords":88,"meta":94,"navigation":95,"noindex":92,"ogImage":88,"path":96,"seo":97,"seoDescription":88,"seoTitle":88,"stem":98,"tags":99,"updated":88,"__hash__":103},"blog\u002Fblog\u002Fgsc-api-export-script.md","用 GSC API 拉全量数据，别再手点导出了","元析智能",{"type":8,"value":9,"toc":78},"minimark",[10,14,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75],[11,12,13],"p",{},"GSC 网页界面导出有两个硬限制：一次最多 1000 行，数据只保留 16 个月。想按查询加页面组合看，或者想留三年数据做对比，只能走 API。2026 年 3 月我们把三个客户站的数据全部改成 API 拉取，每周自动更新。",[15,16,17],"h2",{"id":17},"为什么不用界面导出",[11,19,20],{},"一是行数限制。一个中型站有几十万个查询页面组合，1000 行只是九牛一毛。二是维度限制，界面能导的维度组合有限，想同时看查询和落地页就得靠 API。三是时间，16 个月之后历史数据就没了，想对比去年同期得提前存下来。",[11,22,23],{},"还有个体力问题：每个客户每周手动导一次，一个月就是十几次重复劳动，迟早会忘。",[15,25,26],{"id":26},"准备工作",[11,28,29],{},"在 Google Cloud 里建项目，启用 Search Console API，创建一个服务账号，把服务账号邮箱加到 GSC 的站点用户里，权限给“完全”。这一套二十分钟能配完。",[11,31,32],{},"用服务账号比 OAuth 省事，不需要人授权，适合定时任务。代价是权限管理要谨慎，服务账号泄露等于站点数据泄露。",[15,34,35],{"id":35},"拉什么",[11,37,38],{},"四个维度组合：查询加页面、查询加国家、页面加设备、日期加查询。每个组合分别拉，别指望一次全部拿到。",[11,40,41],{},"日期范围建议按周拉，不要按天，按天拉请求次数多、数据还经常不完整。GSC 数据有 2 到 3 天延迟，拉最近三天基本是空的。",[11,43,44],{},"分页要处理，单次请求有行数上限，返回里带分页游标，循环取完为止。",[15,46,47],{"id":47},"存哪",[11,49,50],{},"我们存 SQLite，一个客户一个库，表结构固定：日期、站点、查询、页面、国家、设备、点击、曝光、排名。每周增量写入，保留全部历史。",[11,52,53],{},"存下来之后能做的事很多：看某个词的排名变化曲线，看某篇文章上线后多久开始有曝光，看品牌词占比的月度趋势。这些在界面里都看不到。",[15,55,56],{"id":56},"拉下来的数据怎么用",[11,58,59],{},"我们最常用的查询是：某篇文章上线 30 天后，它覆盖的查询有多少进了前 20。这个在界面里要一页页翻，在库里一条 SQL 就出来。",[11,61,62],{},"另一个用途是内容复盘。每季度把写过的话题拉出来，看每个词的平均排名和点击，决定下一季度加不加码。",[11,64,65],{},"数据留到三年之后，还能看季节性和算法更新的影响。这些分析都建立在同一张表上，不用每次重新导。",[15,67,68],{"id":68},"三个坑",[11,70,71],{},"第一，配额是每天 2.5 万行，站大、维度多的话一天就可能用完，要错开任务时间。",[11,73,74],{},"第二，不同维度组合的行数不能直接相加，会重复计算。查询加页面和查询加国家是两套口径，混着算总数一定错。",[11,76,77],{},"第三，品牌词要单独标记。我们用正则匹配品牌名，存的时候加一个字段，分析时能一键排除。",{"title":79,"searchDepth":80,"depth":80,"links":81},"",2,[82,83,84,85,86,87],{"id":17,"depth":80,"text":17},{"id":26,"depth":80,"text":26},{"id":35,"depth":80,"text":35},{"id":47,"depth":80,"text":47},{"id":56,"depth":80,"text":56},{"id":68,"depth":80,"text":68},null,"SEO","2026-03-03","界面一次只给 1000 行、只留 16 个月，API 每天能拉 2.5 万行、四个维度自由组合。这篇写服务账号怎么配、拉什么、存哪，以及三个坑。",false,"md",{},true,"\u002Fblog\u002Fgsc-api-export-script",{"title":5,"description":91},"blog\u002Fgsc-api-export-script",[100,101,102],"GSC","API","自动化","tvlLNCHhVrKLiUoqwA3egcFMCjoxAm2ULxM7ds4_AR4",{"id":105,"title":106,"author":6,"body":107,"canonical":88,"category":185,"cover":88,"date":186,"description":187,"draft":92,"extension":93,"keywords":88,"meta":188,"navigation":95,"noindex":92,"ogImage":88,"path":189,"seo":190,"seoDescription":88,"seoTitle":88,"stem":191,"tags":192,"updated":88,"__hash__":196},"blog\u002Fblog\u002Foverseas-content-rhythm.md","做海外市场的软件公司，别用国内那套内容节奏",{"type":8,"value":108,"toc":177},[109,112,116,119,122,125,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174],[11,110,111],{},"把国内的内容节奏搬到海外，是我们在客户身上见过最多的浪费。国内一周 3 篇中等长度有效，海外两周 1 篇深度长文更有效。原因不在勤奋程度，在搜索意图和竞争结构。",[15,113,115],{"id":114},"国内节奏高频中等长度","国内节奏：高频、中等长度",[11,117,118],{},"国内做软件 SEO，我们给客户的排期一般是每周 3 篇，每篇 1000 到 1500 字，围绕一个功能点或一个用户问题。",[11,120,121],{},"原因很直接：百度对新内容有活跃度偏好，更新频率影响抓取频次；搜索结果的更新也快，一篇中等质量的文章也有机会进前 20。",[11,123,124],{},"一个做项目管理工具的客户，按这个节奏做了 4 个月，核心词从 40 名开外进到第 11，其中 60% 的流量来自 20 多篇中等长度的功能文章。",[15,126,128],{"id":127},"海外节奏低频深度","海外节奏：低频、深度",[11,130,131],{},"出海内容反过来。我们给海外站的排期是每两周 1 篇，每篇 2500 到 4000 字，带实测数据、截图、代码片段。",[11,133,134],{},"Google 的头部结果大多是这种深度长文，而且内容寿命长。一篇 2023 年的技术文章，到 2025 年还在吃流量，只要每年更新一次。",[11,136,137],{},"一个 API 工具客户按这个节奏做了 8 个月，发了 17 篇长文，自然流量从每月 3000 涨到 1.1 万，其中 5 篇贡献了 70% 的流量。",[15,139,140],{"id":140},"为什么不一样",[11,142,143],{},"三个原因。竞争结构不同：Google 上同一个词，前十名基本都是深度内容，中等长度进不去；百度上中等长度还有空间。",[11,145,146],{},"内容寿命不同：Google 的长文能用两三年，更新成本低；百度的内容生命周期短一些，需要持续补新内容。",[11,148,149],{},"外链获取方式不同：海外长文更容易被同行引用，一篇文章带来的自然外链，比国内发 10 篇都多。",[15,151,152],{"id":152},"我们的排期表",[11,154,155],{},"海外站：每两周 1 篇长文，每季度更新 5 篇旧文，每月 1 篇 changelog 或版本说明。",[11,157,158],{},"国内站：每周 3 篇中等长度，每月合并一次低质旧文，每季度做一次专题。",[11,160,161],{},"两套排期不要混着用。我们见过客户用国内的节奏做出海，发了 200 篇 1200 字的文章，Google 收录了，但零排名。",[15,163,164],{"id":164},"一个反例",[11,166,167],{},"去年一个客户坚持\"高频出奇迹\"，海外站一周发 4 篇，都是 1000 字左右，追热点。做了 5 个月，流量不到预期的三分之一，团队也累垮了。",[11,169,170],{},"后来砍到两周 1 篇深度，把之前 80 篇合并成 15 篇长文。三个月后流量开始起，第六个月超过之前 5 个月的峰值。",[15,172,173],{"id":173},"一句判断",[11,175,176],{},"节奏是策略的一部分，不是执行细节。出海内容拼的是密度和可信度，不是篇数。把\"发得多\"当成安全感，是内容团队最常见的自欺。",{"title":79,"searchDepth":80,"depth":80,"links":178},[179,180,181,182,183,184],{"id":114,"depth":80,"text":115},{"id":127,"depth":80,"text":128},{"id":140,"depth":80,"text":140},{"id":152,"depth":80,"text":152},{"id":164,"depth":80,"text":164},{"id":173,"depth":80,"text":173},"内容运营","2026-03-02","把国内的内容节奏搬到海外，是我们在客户身上见过最多的浪费。国内一周 3 篇中等长度有效，海外两周 1 篇深度长文更有效。原因、排期表和去年我们踩过的一个反例，都在这篇。我们给 4 个出海站排过这套节奏，最长跑了 14 个月。",{},"\u002Fblog\u002Foverseas-content-rhythm",{"title":106,"description":187},"blog\u002Foverseas-content-rhythm",[193,194,195],"出海内容","内容节奏","国际SEO","OWzKUUG1Jaj9KAqcaVROfjFcVUbhFRzAzcS1WBS3qF8",{"id":198,"title":199,"author":6,"body":200,"canonical":88,"category":364,"cover":88,"date":365,"description":366,"draft":92,"extension":93,"keywords":88,"meta":367,"navigation":95,"noindex":92,"ogImage":88,"path":368,"seo":369,"seoDescription":88,"seoTitle":88,"stem":370,"tags":371,"updated":88,"__hash__":375},"blog\u002Fblog\u002Furl-parameter-governance.md","URL 参数治理：筛选、排序、追踪参数要分开处理",{"type":8,"value":201,"toc":356},[202,205,208,215,221,227,231,239,242,245,248,323,326,330,337,340,343,346,349,352],[11,203,204],{},"参数治理的关键是分类，不是统一 canonical。功能参数、追踪参数、变体参数的处理方式完全不同，混着来一定出问题。",[15,206,207],{"id":207},"三类参数",[11,209,210,214],{},[211,212,213],"strong",{},"功能型","：筛选、排序、分页。这类参数用户真的会用，蜘蛛也会抓。保留，但要给规则：列表页 canonical 指向不带参数的版本，分页页 canonical 自指（别指向第一页），有独立搜索价值的筛选组合才允许单独成页。",[11,216,217,220],{},[211,218,219],{},"追踪型","：utm 系列、gclid、fbclid、ref、source。对内容没有任何影响，是纯噪声。最优解是在链接生成环节就不加，其次是在服务器或 CDN 层 302 清洗到干净 URL。",[11,222,223,226],{},[211,224,225],{},"变体型","：版本、语言、打印版、移动版。这类本质上不是参数问题，是路径设计问题。已经用参数的做 301 收编到路径，新页面别再犯。",[15,228,230],{"id":229},"_2025-年-12-月那个数据工具站","2025 年 12 月那个数据工具站",[11,232,233,234,238],{},"站内导航链接全都自动带 ",[235,236,237],"code",{},"?source=nav","，加上分享和投放链接，蜘蛛抓到了 3.4 万个带参数的 URL，GSC 里\"重复网页\"报了 2.1 万。客户的第一反应是加 canonical，但问题出在模板。",[11,240,241],{},"我们在模板里去掉 source 参数，nginx 上加一条规则 302 清洗 utm 和 gclid。三周后重复网页降到 4000，蜘蛛对产品页的抓取频次涨了 2.2 倍。",[15,243,244],{"id":244},"怎么查",[11,246,247],{},"日志里把 URL 的查询串提取出来，按参数名统计抓取次数：",[249,250,254],"pre",{"className":251,"code":252,"language":253,"meta":79,"style":79},"language-bash shiki shiki-themes github-light github-dark","grep \"Googlebot\" access.log | awk -F'?' '{print $2}' | cut -d'&' -f1 | sort | uniq -c | sort -rn\n","bash",[235,255,256],{"__ignoreMap":79},[257,258,261,265,269,272,276,279,283,286,289,291,294,297,300,303,305,308,310,313,316,318,320],"span",{"class":259,"line":260},"line",1,[257,262,264],{"class":263},"sScJk","grep",[257,266,268],{"class":267},"sZZnC"," \"Googlebot\"",[257,270,271],{"class":267}," access.log",[257,273,275],{"class":274},"szBVR"," |",[257,277,278],{"class":263}," awk",[257,280,282],{"class":281},"sj4cs"," -F",[257,284,285],{"class":267},"'?'",[257,287,288],{"class":267}," '{print $2}'",[257,290,275],{"class":274},[257,292,293],{"class":263}," cut",[257,295,296],{"class":281}," -d",[257,298,299],{"class":267},"'&'",[257,301,302],{"class":281}," -f1",[257,304,275],{"class":274},[257,306,307],{"class":263}," sort",[257,309,275],{"class":274},[257,311,312],{"class":263}," uniq",[257,314,315],{"class":281}," -c",[257,317,275],{"class":274},[257,319,307],{"class":263},[257,321,322],{"class":281}," -rn\n",[11,324,325],{},"排前面的参数就是治理重点。Screaming Frog 的 URL 参数报告能看站内链接里有多少带参数，这个数字比日志更能说明问题——站内链接是我们自己能控制的。",[15,327,329],{"id":328},"一个例外值得单独成页的筛选组合","一个例外：值得单独成页的筛选组合",[11,331,332,333,336],{},"不是所有筛选参数都该压掉。如果某个组合有稳定的搜索需求，比如\"北京 + 三年经验\"这类招聘筛选、\"100 人以下团队 + 项目协作\"这类软件筛选，单独做一个静态页比让参数页参与排名更好。判断标准是搜索量：GSC 里这类词每月有几十次展示，就值得做成 ",[235,334,335],{},"\u002Fsolutions\u002Fsmall-team"," 这样的路径页。",[11,338,339],{},"判断做不做，看两件事：这个词有没有独立搜索需求，页面内容能不能撑满 600 字。两个都满足就做成路径页，只有一个满足就留在参数里。",[15,341,342],{"id":342},"规则写在哪",[11,344,345],{},"优先级从高到低：模板生成规则 > 服务器 302 清洗 > canonical > robots 屏蔽。前面能解决的，不要留给后面。canonical 是声明不是限制，蜘蛛可以不遵守；robots 是屏蔽不是清理，被挡的 URL 仍然可能被索引。",[15,347,348],{"id":348},"立场",[11,350,351],{},"参数治理是工程问题，不是 SEO 问题。让前端改参数生成逻辑，比上线后加一百条规则都有效。做 SEO 的人要能跟开发说清楚\"这条链接为什么不能带这个参数\"。",[353,354,355],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":79,"searchDepth":80,"depth":80,"links":357},[358,359,360,361,362,363],{"id":207,"depth":80,"text":207},{"id":229,"depth":80,"text":230},{"id":244,"depth":80,"text":244},{"id":328,"depth":80,"text":329},{"id":342,"depth":80,"text":342},{"id":348,"depth":80,"text":348},"技术SEO","2026-03-04","三种参数混在一起治理，是软件站重复内容的源头。我们把参数分三类，给每类定规则：哪些进 canonical、哪些交给服务器清洗、哪些在链接生成时就掐掉。",{},"\u002Fblog\u002Furl-parameter-governance",{"title":199,"description":366},"blog\u002Furl-parameter-governance",[372,373,374],"URL参数","重复内容","canonical","FGb6TFLxOPkM6K52CqiVecaxcw_sCYqynHPYdFtg-HA",1794088107908]