自己站 SEO 改造复盘:从默认主题到完整元数据

Sherwin.Wei Lv8

自己站 SEO 改造复盘:从默认主题到完整元数据

自己的 javai.tech 站,最近半年没更新。偶然打开 View Source 一看,差点没晕过去——
og:title 是 “Hexo”,author 是 “John Doe”,连个 description 都没有。
搜索引擎大概也懵了:这是谁的站? 本文复盘整个改造过程。

一、为什么突然想修?

事情是这样的:

最近一直在做 AI 相关项目,朋友圈里也开始有人搜「javai」「Sherwin Wei Java」想找到我。结果我跟朋友开玩笑说「你搜 javai.tech 看看」,他搜了,说:

「搜出来一堆东西,但都是 Hexo 主题相关的内容,不像你的站啊?」

我打开浏览器,登录百度站长、Google Search Console,再 curl https://javai.tech,看返回的 HTML。

然后愣住了。


二、诊断:体检报告

下面这段,是我跑 curl https://javai.tech | grep -E 'og:|description|author' 抓出来的真实数据:

1
2
3
4
5
6
<meta name="keywords" content="Hexo Theme Redefine">
<meta name="author" content="John Doe">
<meta property="og:title" content="Hexo">
<meta property="og:site_name" content="Hexo">
<meta property="og:locale" content="en_US">
<link rel="canonical" href="http://javai.tech/">

看见没?六个 meta,全错。

  • keywords 是主题名字「Hexo Theme Redefine」
  • author 是 Hexo 默认占位的 「John Doe」
  • og:title 直接就是「Hexo」两个字
  • og:localeen_US,但内容全是中文
  • canonical 还是 http://,没用 https

更离谱的是 404 页面。我访问 /xxx(不存在的路径),打开 View Source,作者也是 John Doe。也就是说,搜索引擎每抓到一个不存在的链接,都以为这是某个叫 John Doe 的英文博客。


三、问题清单:哪些是真正的硬伤

我把这些分了三档:

🔴 P0:必须立刻修(不改搜索引擎看不懂你是谁)

问题 现状 修复
og:title “Hexo” “javai - java与ai”
og:site_name “Hexo” “javai”
meta author “John Doe” “Sherwin.Wei”
meta keywords “Hexo Theme Redefine” 真实关键词
meta description 缺失 站点描述
og:image 缺失 分享卡片图
canonical http https
<html lang> “en” “zh-CN”

🟡 P1:能加就加(影响收录和订阅)

  • 没有 sitemap.xml,搜索引擎不知道你有多少页面
  • 没有 robots.txt,抓取规则没有声明
  • 没有 RSS / Atom feed,想订阅的用户没路径
  • 没有站内搜索,Ctrl+K 啥也没反应

🟢 P2:长期才能见效

  • Google Analytics 没接,访问数据是黑盒
  • 百度统计没接,国内访问数据不准确
  • 分享到微信/微博没图没描述,传播效果差

四、修复实施

第一刀:Hexo 站点的 _config.yml

这是所有问题的根源。打开一看,全是默认占位:

1
2
3
4
5
6
7
title: Hexo
description: ''
keywords:
author: John Doe
language: en
timezone: ''
url: http://example.com # ← 这里是 example.com,不是 javai.tech

这一段不改,其他都白搭。改成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
title: javai - java与ai
subtitle: java与ai结合一定会更强更远!
description: 'Sherwin.Wei(魏远标)个人技术站,分享 Java/AI 实战、系统设计面试、前后端架构、国学智慧与现代技术融合。13 年经验,曾就职于美的、亿迅、华为。'
keywords:
- javai
- java与ai
- Sherwin.Wei
- 魏远标
- Java
- AI
- 系统设计
- 后端开发
- 面试题
- Elasticsearch
- Spring Boot
- AI定制开发
author: Sherwin.Wei
language: zh-CN
timezone: Asia/Shanghai
url: https://javai.tech

⚠️ 关键点:url 一定要写对。Hexo 的 canonical、sitemap、feed、og:url 全靠这个字段。一字之差,搜索引擎就不认你。

第二刀:装三个包

默认装的只有 archive、category、tag、index 这几个 generator,没装 sitemap、feed、search

1
npm install hexo-generator-sitemap hexo-generator-feed hexo-generator-search --save

装完在 _config.yml 加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sitemap:
path: sitemap.xml
url: https://javai.tech # 注意:也要写对 url,否则 sitemap 全是 http

feed:
type: atom
path: atom.xml
limit: 20

search:
path: search.json
field: post
format: html
limit: 10000

第三刀:补 OG 图

og:image 是分享到微信/微博/LinkedIn/Twitter 时的封面图。没有它,分享卡片就是个白板。

我用 Python + Pillow 临时画了一张(1200×600):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PIL import Image, ImageDraw, ImageFont

W, H = 1200, 630
img = Image.new('RGB', (W, H), (163, 31, 52)) # #A31F34 品牌色
draw = ImageDraw.Draw(img)

# 渐变背景
for y in range(H):
ratio = y / H
draw.line([(0, y), (W, y)],
fill=(163 - 25*ratio, 31 + 5*ratio, 52 + 10*ratio))

# 主标题
title_font = ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 200)
draw.text(((W - 480) / 2, 140), 'javai', fill='white', font=title_font)
draw.text(((W - 240) / 2, 380), 'java与ai', fill=(255, 240, 230),
font=ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 56))
draw.text(((W - 360) / 2, 500), 'Sherwin.Wei · 个人技术站',
fill=(255, 230, 220),
font=ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 26))

img.save('source/images/javai-og-cover.png', 'PNG', optimize=True)

5 分钟搞定。专业设计师看不上,但比自己强太多。

第四刀:head 注入

Redefine 主题用的是 inject.head 机制(不是 source/_data/head.json,那个我没试成功)。在 _config.redefine.yml 加:

1
2
3
4
5
6
7
8
9
10
11
inject:
enable: true
head:
- '<meta property="og:image" content="https://javai.tech/images/javai-og-cover.png">'
- '<meta property="og:image:width" content="1200">'
- '<meta property="og:image:height" content="630">'
- '<meta name="twitter:card" content="summary_large_image">'
- '<meta name="twitter:title" content="javai - java与ai">'
- '<meta name="twitter:image" content="https://javai.tech/images/javai-og-cover.png">'
- '<link rel="alternate" type="application/atom+xml" title="javai - java与ai" href="https://javai.tech/atom.xml">'
footer: []

这个机制的好处是改配置不改主题,主题升级不会被覆盖。

第五刀:robots.txt

放在 source/robots.txt

1
2
3
4
5
6
7
8
User-agent: *
Allow: /

Disallow: /404.html
Disallow: /search/

Sitemap: https://javai.tech/sitemap.xml
Sitemap: https://javai.tech/atom.xml

注意:Sitemap 一定要写完整 URL,不要写相对路径。

第六刀:导航 + 站内搜索

_config.redefine.yml 的 navbar 加 search:

1
2
3
4
5
6
7
8
9
10
11
12
navbar:
links:
面试:
path: /interview/
服务: # 新增
path: /services/
chat:
path: /chat
# ... 其他保持不变
search:
enable: true # 启用站内搜索
preload: true

五、验收

部署前先本地 hexo clean && hexo generate,看会不会报错。没问题了再 hexo deploy

部署完等 2-5 分钟,跑几个 curl 验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 检查 meta 修复
curl -s https://javai.tech | grep -E 'og:title|og:image|author'

# 期望:
# <meta name="author" content="Sherwin.Wei">
# <meta property="og:title" content="javai - java与ai">
# <meta property="og:image" content="https://javai.tech/images/javai-og-cover.png">

# 检查 sitemap URL 全部 https
curl -s https://javai.tech/sitemap.xml | grep -oE 'javai\.tech[^<]+' | head -3

# 期望:
# https://javai.tech/aboutme/index.html
# https://javai.tech/services/index.html

# 检查 atom.xml 正常
curl -s https://javai.tech/atom.xml | head -5
# 期望:<?xml version="1.0" encoding="utf-8"?>...

我自己跑下来,生成 705 个文件、sitemap 包含 473 个 URL,全部 https。


六、经验总结

1. 默认值的陷阱

Hexo 的模板里 title: Hexoauthor: John Doeurl: http://example.com,新手很容易被「主题配了就行」骗过去。主题配置 ≠ 站点配置。主题只是换了外观,HTML head 里的 og/author/canonical 这些是 Hexo 自己吐的,看的是站点 _config.yml

2. 第一时间验证部署后的 HTML

每次部署完,第一件事应该是 curl https://yoursite.com | head -50,而不是打开浏览器看页面。

  • 浏览器只能看到视觉效果
  • 搜索引擎只看 HTML 源码
  • 分享卡片生成器只看 og:image、og:title、og:description

我这次能发现问题,就是 curl 救了我。

3. sitemap 的 url 必须显式声明

hexo-generator-sitemap 默认用 site.url 生成,但如果 site.url 写错了(比如写成 http),整个 sitemap 就是 http 版本。

  • Google 会按 http 收录
  • HSTS 升级后又会被认为是迁移
  • 反复折腾

所以在配置里额外写一遍 sitemap.url 是值得的。

4. 别相信「主题文档」说一切正常

Redefine 主题的文档看着很全,但默认配置下:

  • search 是关的
  • GA 是关的
  • social_links 是关的
  • feed 是关的

默认 + 不改 = 啥也没有。这点不如早期的 Next 主题,至少 Next 默认开 search 和 RSS。

5. 中英文站的 lang 配置

<html lang="en"> 看起来「无害」,但百度会直接降低权重。
中文内容必须 lang="zh-CN"

6. description 千万别空着

搜索引擎在搜索结果里展示的两行摘要,就是 description。没填的话,搜索引擎会从正文里截一段,经常截得莫名其妙(特别是代码块)。

我这次给的 description:

Sherwin.Wei(魏远标)个人技术站,分享 Java/AI 实战、系统设计面试、前后端架构、国学智慧与现代技术融合。13 年经验,曾就职于美的、亿迅、华为。

覆盖了品牌(Sherwin.Wei)+ 关键词(Java、AI、系统设计)+ 差异化(国学)+ 信任锚(13 年经验、大厂)。

7. OG 图是社交传播的入口

我自己测过,分享 javai.tech 之前,微信/微博卡片就一个标题加一行小字。
之后,1200×630 大图、标题、描述、域名全有。
同样的内容,传播效率至少差 3 倍。


七、下一步

SEO 修完了,但站还得「活」起来。我给自己定了三条线:

  1. 月更 8-10 篇:四个系列轮转(面试题深挖、AI 实战、国学智医五行、案例复盘)
  2. 第一个月提交百度站长 + Google Search Console:让搜索引擎主动来抓
  3. 接入 GA + 百度统计:知道流量从哪来、用户看什么

如果一个月后流量没起来,再来写下一篇复盘:《SEO 修完了,为什么流量还是没起色?》


附录:可复制的 SEO 自检清单

部署后跑一遍,5 分钟搞定:

1
2
3
4
5
6
7
8
9
curl -s https://yoursite.com | grep -E 'og:title|og:image|description|author|canonical' | sort -u

curl -s https://yoursite.com/sitemap.xml | head -3
curl -s https://yoursite.com/atom.xml | head -3
curl -s https://yoursite.com/robots.txt
curl -sI https://yoursite.com | grep -i 'strict-transport\|location'

# 找有没有漏改的「Hexo」「John Doe」「example.com」
curl -s https://yoursite.com | grep -iE 'hexo|john doe|example\.com'

如果第三步还有任何输出,说明还没改干净。


给自己的话
一个写代码的人,连自己的站都懒得维护好,是说不过去的。
这次改造花了半天,但下次别人搜到我时,第一眼看到的不再是「Hexo 默认主题」,
而是一个有名字、有故事、有内容的站。这就够了。

评论