个人博客 SEO 工程化指南
优化 H 标签结构
对于博客文章,不要把博客网站名字放在 <h1> 里面,而要把博客文章标题放在 <h1> 里面,确保每个页面 <h1> 是唯一的。确保标签是按顺序下降的:h1 -> h2 -> h3,不要跳级。
可以用
className="sr-only" 的方式,隐藏不希望展示、但是希望提升 SEO 排名的主副标题。优化页面的 Metadata
Metadata 是搜索引擎搜索结果页的门面,必须拒绝模板化,强调唯一性与相关性。每个页面的 description,alternates,title 等 Metadata,需要体现这个页面的独特性,不要千篇一律。比如文章页,要体现出这篇文章的描述,要切合文章内容对 Metadata 进行定制化。
对于 description
提取文章前 120-150 字的精华内容,或人工撰写一段包含核心关键词的导语,描述应具备吸引点击的属性,直接告诉用户该页面能解决什么问题。
对于 alternates / canonical
针对多语言或多终端页面,通过 rel="alternate" 指向对应版本,比如多语言页面、移动端页面,rel="alternate" hreflang="en" 就是指向英文版的页面;使用 rel="canonical" 声明唯一规范地址,防止因 URL 参数不同导致的权重分散,让搜索引擎知道,这是同一页面的不同版本。
加入 JSON-LD
JSON-LD 是页面的逻辑身份证,通过标准化格式消除搜索引擎歧义,提升网站在搜索结果中的展示效果。比如,利用 @id(锚点)将不同页面的相同实体(如作者)关联起来。再比如,用 @type 指定页面的类型,通常来讲,首页是 WebSite + Person,列表页是 ItemList,文章页:TechArticle(技术文章) + BreadcrumbList(面包屑)。
JSON-LD 中的 headline、description 必须与页面 <h1> 及 Metadata 中的 description 完全一致。
代码示例
{ "@context": "https://schema.org", "@type": "TechArticle", "headline": "Next.js 工程化实践", "description": "本文深入探讨 Next.js 的架构设计...", "author": { "@type": "Person", "name": "odaneo", "@id": "https://odaneo.com/#person" }, "breadcrumb": { "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "首页", "item": "https://odaneo.com" }, { "@type": "ListItem", "position": 2, "name": "前端", "item": "https://odaneo.com/tag/frontend" } ] } }
优化 server-sitemap.xml 内容
server-sitemap.xml 是搜索引擎抓取全站动态路径的向导,必须确保数据的实时性与完整性。不仅要包含首页和文章页,还必须涵盖所有动态生成的标签页以及静态功能页。
同时,lastmod(最后修改时间)必须动态绑定文章的最新编辑时间或标签下文章的更新时间,引导搜索引擎优先抓取新鲜内容。
通过 priority 指令(首页 1.0,核心文章 0.9,普通页 0.5)和 changefreq(daily/weekly),优化搜索引擎的抓取配额,确保核心价值页面高频收录。
优化 robots.txt 准则
robots.txt 是站点对搜索引擎爬虫的抓取指南,直接决定了抓取效率。必须明确指明 Sitemap 的绝对路径,确保爬虫在进入站点第一时间获取全量地图。
代码示例
import { MetadataRoute } from "next"; export default function robots(): MetadataRoute.Robots { return { rules: { userAgent: "*", allow: "/", disallow: ["/api/", "/_next/"], }, sitemap: `${process.env.HOME_URL}/server-sitemap.xml`, }; }