臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速7.Google 搜索收录排查:为什么关键词搜得到别人,却搜不到我的网站?Obsidian、双向链接与知识图谱
架构设计
分布式分布式事务RPC原理
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
数据库
mysql01.MySQL基础语法与约束02.MySQL数据库类型03.MySQL多表查询04.MySQL 索引05.MySQL 事务06.MySQL 隔离级别07.MySQL MVCC08.MySQL 锁09.EXPLAIN10.慢查询与 SQL 优化
mysql面试题01.索引问题02.事务与隔离级别03.锁机制04.存储引擎与性能优化05.用户权限、字符集与备份恢复
mysql实战01.EXPLAIN实战02.测试环境菜单误删排查与恢复03.MySQL IN 详解
网络
网络安全1.无线监听网卡苹果M系列虚拟机安装Kali Linux教程3.kali怎么使用RTL8812AU4.kali基础命令
网络基础进程之间怎样通过网络传递数据
网址常用网址
中间键
esElasticsearch 入门
mq
RabbitMQRabbitMQ高级RabbitMQ基础
1. MQ 基础2. MQ 核心角色与代码对应3. MQ Consumer Group 与消费模式4. SOFAMQ 账户变更代码实践5. MQ 可靠性问题6. 消息幂等
redis缓存击穿、穿透与雪崩Redis 分布式锁Redis 缓存问题Redis 数据结构
AI
使用说明
第三方插件&技能简介Archify使用与安装指南geekgeekRun使用OfferFlow使用指南Ponytail使用指南Skills Manager使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发0-学习路线1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.*完成可运行聊天接口11.Function Calling、Tool Calling 原理12.用 Java 方法定义 Tool13.工具参数设计和校验14.实现订单查询工具15.实现物流查询工具16.实现库存查询工具17.多个工具自动选择18.工具异常、超时、重试
diy主机
主机零件学习1.CPU2.主板3.内存4.显卡5.硬盘6.散热7.风扇8.机箱热门型号价格表
捡垃圾diy-13600kf+5060diy-14600kf+5070
English高频词汇英文基础语法简单句子音标
GitGit常用命令Sublime Merge 使用指南
Java
工具库Caffeine本地缓存Reactor教程
工作实践如何使用@Async线程池使用与排查线上服务 CPU 使用率过高排查压测下RPC接口大量失败排查记录
基础1.HashMap2.ConcurrentHashMap3.HashSet4.final5.static6.volatile7.AtomicInteger8.String动态代理反射锁与线程同步线程注解
面试题1.HashMap 存储在方法内是线程安全的吗2.ArrayList参数传递与引用重新赋值3.== 和 equals 的区别、hashcode4.重载和重写的区别5.String、StringBuffer、StringBuilder区别及使用场景6.接口和抽象类7.ArrayList 与 LinkedList 的区别和扩容机制8.HashMap 和 Hashtable 的区别及底层实现9.Object 和 Objects 的区别10.ThreadLocal的原理和使用场景11.字节码是什么及作用12.Java类加载器有哪些13.双亲委派模型14.Java异常体系15.GC是什么16.GC如何判断对象可以被回收
面试总结0.HR面试模板1.面试一2.面试二3.面试三笔试
网络与 IO(黑马程序员-纯理论)01-网络编程基础02-IO模型与零拷贝03-BIO04-NIO基础与缓冲区05-NIO通道与选择器06-AIO
juc00-目录01-进程与线程02-线程同步与通信03-并发设计模式04-Java内存模型05-CAS与原子类06-ThreadLocal07-阻塞队列08-线程池使用与原理09-任务调度10-ForkJoin与享元模式11-AQS12-ReentrantLock13-读写锁14-并发协作工具15-ConcurrentHashMap16-CopyOnWrite与同步容器17-SkipListMap18-非阻塞队列
juc(工作常见)Java并发编程三个重点拆解
jvm1. JVM运行时数据区
Spring1.Spring IoC、DI与构造方法注入CGLIB、Byte Buddy 与 Spring AOPSpring 常用注解详解Spring Bean 生命周期
Spring MVC异常处理机制
linux常用命令
mac快捷键终端常用操作
python
基础01.Python是什么,为什么要安装Python02.Python项目中.venv是什么03.Python基础语法
基础实战sql替换
HTTPXHRMS员工详情接口调用(Python HTTPX)
windowswindows激活

一、💡 一句话理解

核心结论

搜索结果里找不到自己的网站,先不要急着改标题或堆关键词。先确认 Google 是否已经发现、抓取并收录页面;当前博客的 sitemap 把文章写成服务器 IP 地址而不是 blog.afyke.com,这是应优先修复的配置问题。

可以把 Google 想成图书馆:文章写得再好,如果还没被登记入库,读者按关键词也找不到它。

二、🧭 理论:Google 搜索到底在做什么

2.1 发现、抓取、收录、排名

把 Google 想成一个很大的图书馆。你写的 aTrust 文章是一册新书,想让读者搜到它,图书馆要按顺序完成下面 4 件事:

  1. 先知道这本书存在(发现 URL)
    Google 必须先看到文章地址。首页里的文章链接、sitemap 和其他网站指向你的链接,都是在把“书的地址”告诉 Google。

  2. 把书拿来翻一翻(抓取页面)
    Googlebot 会尝试打开这个地址,读取标题和正文。页面必须能正常打开、不能要求登录,也不能拦住 Googlebot。
    例如浏览器访问文章时能看到内容,服务器返回 HTTP 200,才算“书能拿到手”。

  3. 把书登记进馆藏系统(收录内容)
    Google 读完后,才决定是否把它录入自己的搜索库。设置了 noindex 的页面,相当于书上贴着“不要入库”的标签;Google 就不会把它放进搜索结果。

  4. 有人问“aTrust 隔离计划”时,把书排到前面还是后面(排名)
    只有已经入库的文章,才有资格参与这一步。Google 会看文章是不是真的在解决这个问题、标题和正文是否清楚、其他人是否愿意引用它等。

用你的现象来判断

现在搜索 site:blog.afyke.com aTrust 没有结果,等于“图书馆里还查不到你这个书架上的书”。所以先检查第 1、2、3 步:Google 有没有找到文章、能不能打开、有没有收录。等确认收录后,再讨论为什么别人的文章排在你前面。

最终原因仍要以 Search Console 的“网址检查”和“网页编入索引”报告为准:搜索页只能告诉你“有没有结果”,这两个报告才能告诉你“卡在哪一步”。

2.2 Googlebot 是什么

Googlebot 是 Google 派出的自动浏览网页的小机器人。它就像图书馆派来的“收书员”,会自动访问公开的网站。

对一篇文章来说,它主要做 3 件事:

  1. 找到文章地址:从首页链接、sitemap 或其他网站的链接中,发现你的文章。
  2. 打开并阅读文章:读取网页里的标题、正文和链接。
  3. 把结果交给 Google:让 Google 判断这篇文章能否进入搜索库。
Googlebot 打开你的文章
        ↓
确认页面能看、没有禁止收录
        ↓
Google 决定是否把文章登记进搜索库
        ↓
用户搜索关键词时,文章才有机会出现

如果页面需要登录、打开报错、被 robots.txt 拦住,或设置了 noindex,Googlebot 就无法正常完成这项工作。

2.3 sitemap 是什么

先不用管 XML 是什么。你只要把 sitemap 理解成一张交给 Googlebot 的文章地址清单。

你的博客里有很多文章。Googlebot 不一定会自己走遍每一个页面,所以 Quartz 会生成一个叫 sitemap.xml 的文件,主动告诉它:

我的博客有这些文章,请按下面的地址去看:
 
https://blog.afyke.com/臭名昭著atrust隔离计划/1.臭名昭著atrust隔离计划
https://blog.afyke.com/臭名昭著atrust隔离计划/2.vpn原理与atrust隔离网络实践

Googlebot 打开这张“地址清单”后,才知道应该去访问哪些文章:

Googlebot 先打开 sitemap.xml
        ↓
看到 aTrust 文章的地址
        ↓
按这个地址打开文章
        ↓
读取内容,交给 Google 判断是否收录

你的问题正出在“地址写错了”

当前 sitemap 写的是 https://47.99.178.186/...,等于给 Googlebot 的清单上写了“请去服务器 IP 找文章”;但你真正想让它收录的是 https://blog.afyke.com/...。这两个完整网址对 Google 来说不是同一个地址,因此需要把清单统一改成 blog.afyke.com。

你不需要手工逐篇填写 sitemap。Quartz 会自动生成它;要做的是在 Quartz 配置中把网站正式地址设置为 blog.afyke.com,然后重新部署。sitemap 的作用只是帮助 Googlebot找到文章,不代表 Google 一定会收录,更不代表一定排在前面。

2.4 robots.txt 和 noindex 不一样

继续用“图书馆收书员”来理解:

  • robots.txt 是大楼门口的告示牌:告诉 Googlebot “哪些房间可以进去,哪些先不要进去”。它管的是能不能进门看页面。
  • noindex 是放在某个房间里的纸条:Googlebot 已经进来并看到了页面,但纸条写着“这页不要登记进图书馆目录”。它管的是看完后能不能出现在 Google 搜索里。
robots.txt:Googlebot 能不能先走进这间房?
noindex:走进来以后,能不能把这页登记到 Google 搜索?

用博客文章举例:

你的目的应该怎么做
公开 aTrust 文章,并希望别人能搜到不拦 Googlebot,也不要设置 noindex
文章可以用链接直接打开,但不想让它出现在 Google允许 Googlebot 打开,再为该页设置 noindex
公司内部接口文档不希望外人看到不要发布到公网;或要求登录访问

最容易犯的错误

不要用 robots.txt 来保护内部资料。它只是在门口写“请别进”,但任何人只要知道网址,仍可能直接打开页面;而且其他网站若链接了该地址,Google 仍可能知道这个地址存在。

对当前博客的最简单结论

想让 aTrust 文章被搜索到:允许 Googlebot 访问、不要设置 noindex,并在 robots.txt 中告诉它 sitemap 在哪里即可。

三、🔎 本次网站实际排查结果

3.1 观察到的现象

2026-09-07 检查时,下面的 Google 查询没有返回结果:

site:blog.afyke.com
site:blog.afyke.com aTrust
site:blog.afyke.com "aTrust隔离计划"

同时,首页 https://blog.afyke.com/ 可以正常返回 HTTP 200,因此并非整个站点无法访问。

3.2 已确认:sitemap 使用了 IP 地址

打开 https://blog.afyke.com/sitemap.xml 后,aTrust 文章的条目是:

https://47.99.178.186/臭名昭著atrust隔离计划/1.臭名昭著atrust隔离计划

但你希望用户和 Google 使用的地址是:

https://blog.afyke.com/臭名昭著atrust隔离计划/1.臭名昭著atrust隔离计划

这表示 sitemap 指向的“正式地址”和博客域名不一致。Google 会按 sitemap 写出的完整地址抓取,而 Quartz 的 baseUrl 正是生成 sitemap 和 RSS 等绝对 URL 的配置来源。这个不一致会让 Google 发现与归一化页面的过程变得不可靠,是当前最优先修复项。

3.3 已确认:robots.txt 暂不存在

https://blog.afyke.com/robots.txt 当前返回 404。

这不会自动禁止收录,也不是当前问题的唯一证据;Google 仍可能通过站内链接或 Search Console 发现页面。不过,补上 robots.txt 并声明 sitemap,能让站点配置更完整。

3.4 仍待 Search Console 确认的事项

以下信息不能只凭 Google 搜索页面判断,需要在 Search Console 中查看:

  • Google 是否已抓取过目标文章;
  • 是否识别到 noindex、robots 限制、软 404 或其他排除原因;
  • Google 选择的规范网址(canonical URL)是什么;
  • sitemap 提交后是否读取成功,以及有哪些 URL 被发现。

3.5 为什么 site: 还是查不到 aTrust 文章

如果你在 Google 搜索框输入:

site:blog.afyke.com "1.臭名昭著aTrust隔离计划"

仍然没有结果,先把它理解成:Google 目前没有把这篇文章展示在这个查询的结果中。这不是“文章网址打不开”。实际文章地址可以正常打开,sitemap 中的地址也已经统一为 blog.afyke.com。

最常见的情况是:刚修正 baseUrl 后,Google 还没有重新读取 sitemap、抓取文章并完成收录。这个过程通常需要数天到数周;提交 sitemap 只是告诉 Google“这里有文章”,并不能让页面马上出现在搜索结果中。

site: 只能作为辅助检查

site: 查询不会保证列出所有已收录页面。因此“没有结果”不能单独当作最终结论;确认一篇指定文章是否能被收录,应该以 Search Console 的“网址检查”为准。

现在按下面步骤操作即可:

  1. 打开 Google Search Console,进入已验证的 blog.afyke.com 资源。

  2. 在顶部“网址检查”中粘贴这篇文章的完整地址:

    https://blog.afyke.com/臭名昭著atrust隔离计划/1.臭名昭著aTrust隔离计划
  3. 看检查结果:

    • 显示“网址不在 Google 中”,但“可以编入索引”:点击一次“请求编入索引”,然后等待;
    • 显示被 noindex、robots、软 404 或规范网址问题排除:按页面给出的原因修复;
    • 显示“网址已在 Google 中”:说明页面已经收录,site: 暂未显示不代表页面一定有问题。
  4. 在“站点地图”提交 https://blog.afyke.com/sitemap.xml;同一个文章 URL 不要连续反复点击“请求编入索引”,这不会让处理更快。

2026-09-07 的外部检查中,这个精确 site: 查询和 site:blog.afyke.com 都没有返回结果;同时文章 URL 返回 HTTP 200、sitemap 返回 HTTP 200,且 sitemap 中的 URL 已全部使用 https://blog.afyke.com/。因此当前最应做的是到 Search Console 发起一次具体 URL 的检查与收录请求,而不是继续修改关键词。

四、🚀 实践:从修复到验证

4.1 前置准备

本次需要的对象只有 3 个:

  1. Quartz 项目源码和部署权限;
  2. blog.afyke.com 的 Google Search Console 资源所有权;
  3. 已经能公开访问的 HTTPS 博客。

建议先阅读 1.Quartz个人博客使用教程 了解“Markdown → Quartz 构建 → 静态网站”的发布流程;域名和 IP 的区别可参考 5.域名绑定。如果你使用 GitHub Actions 发布,部署过程见 3.使用 GitHub Actions 自动部署 Quartz 博客。

4.2 可以拿来干什么:快速判断问题在哪一层

动作要解决的问题正常结果
打开 https://blog.afyke.com/sitemap.xmlGoogle 被告知的 URL 是否正确所有 <loc> 都以 https://blog.afyke.com/ 开头
打开文章的正式 URL页面是否能被访问返回 HTTP 200,不要求登录
Search Console 的“网址检查”Google 实际怎么看这篇文章可看到抓取、收录和规范网址状态

这比反复搜索关键词更有效:搜索页只能告诉你“结果有没有出现”,网址检查才能告诉你“为什么没有出现”。

4.3 完整实践:修正地址、部署、提交、验证

4.3.1 修改 Quartz 的 baseUrl

在 Quartz 官方项目中,配置位于 quartz.config.ts。找到 configuration 下的 baseUrl,改成正式域名:

configuration: {
  // sitemap、RSS 等需要绝对 URL 的功能,会以此作为网站的正式地址。
  // 只填域名;不要带 https://,也不要填服务器 IP。
  baseUrl: "blog.afyke.com",
},

以当前项目实际配置为准

如果你的项目不是 quartz.config.ts,而是其他配置文件,请在项目中搜索 baseUrl 或 47.99.178.186 后修改原有配置;不要为了照抄示例新建一个不会被构建程序读取的文件。

修改后按当前发布方式重新构建和部署。若使用现有 GitHub Actions 流程,推送后等待构建完成即可。

4.3.2 增加 robots.txt

在最终部署站点的根目录创建 robots.txt,内容如下:

# 允许通用搜索引擎抓取公开页面。
User-agent: *
Allow: /
 
# 告诉爬虫 sitemap 的正式地址。
Sitemap: https://blog.afyke.com/sitemap.xml

部署后直接打开 https://blog.afyke.com/robots.txt,应能看到上述内容,并返回 HTTP 200。

4.3.3 验证生成结果

依次检查:

https://blog.afyke.com/sitemap.xml
https://blog.afyke.com/robots.txt
https://blog.afyke.com/臭名昭著atrust隔离计划/1.臭名昭著atrust隔离计划

预期结果是:

  1. sitemap 的 <loc> 不再包含 47.99.178.186;
  2. robots.txt 中的 sitemap 地址是 blog.afyke.com;
  3. 文章 URL 可直接打开,且地址栏始终保持 blog.afyke.com。

4.3.4 在 Search Console 请求收录

  1. 打开 Google Search Console,添加并验证 https://blog.afyke.com/。
  2. 在“站点地图”提交 https://blog.afyke.com/sitemap.xml。
  3. 在“网址检查”粘贴上面的文章正式 URL。
  4. 先查看检测结果;如果页面可被 Google 访问且没有阻止收录的规则,再选择“请求编入索引”。
  5. 数天后回到同一页面查看状态,不要连续反复提交同一个 URL。

Google 明确说明:请求重新抓取并不保证立即、甚至不保证一定进入搜索结果;处理可能需要数天到数周。

4.4 收录后,再优化关键词匹配

只有确认文章已收录后,才进入关键词优化。aTrust 这篇文章可以按下面方式改:

位置建议
标题写清问题和方案,例如“macOS aTrust 隔离计划:Docker 与 Clash Tun 共存方案”
开头用两三句话讲清“谁遇到什么问题,本文能解决什么”
小标题使用真实读者会搜的词,如“aTrust 与 Clash Tun 冲突”“Docker 隔离 aTrust”
正文自然说明原理、操作条件和验证结果;不要机械重复关键词
内部链接保留首页、分类页到文章页的普通链接,帮助用户和爬虫发现文章

关键词优化的目标是“让 Google 和读者理解文章主题”,不是把同一个词尽可能多地塞进页面。

五、🛡️ 发布前必须确认的安全边界

先处理内部资料,再扩大收录

当前首页的公开目录中出现了“公司项目”“对外接口文档”等内容。若这些属于工作内部资料,应先从公网构建产物中移除或设为不发布,再提交 Google 收录。收录后删除,仍可能存在搜索缓存、转存或访问记录风险。

Quartz 官方支持通过 draft: true、发布过滤器或 ignorePatterns 排除不应公开的 Markdown 内容。注意:若 Git 仓库本身公开,仅让 Quartz 不生成页面并不能保护仓库中的原始文件。

六、📌 快速回顾

  • 先收录,后排名:site: 查询没有结果时,先解决发现、抓取和收录。
  • 一个站点只用一个正式域名:sitemap、页面地址和 Search Console 都应使用 blog.afyke.com,不要混用 IP。
  • Search Console 是最终诊断工具:它能显示 Google 抓取和排除的具体原因。
  • sitemap 是提示,不是保证:修复、提交后仍要等待 Google 抓取与评估。
  • 公开前先筛掉内部资料:robots.txt 不是权限控制,也不是保密措施。

记忆句

先统一 URL,再提交 sitemap;先确认收录,再优化关键词。

七、📚 官方资料