SEO 是网站获取自然流量的关键。本文深入探讨技术 SEO 和优化策略。
SEO 基础概念
搜索引擎工作原理
搜索引擎工作流程:
┌─────────────────────────────────────────────────────┐
│ │
│ 爬取 (Crawling) │
│ └── 机器人发现和访问网页 │
│ │
│ 索引 (Indexing) │
│ └── 分析和存储页面内容 │
│ │
│ 排名 (Ranking) │
│ └── 根据算法对结果排序 │
│ │
└─────────────────────────────────────────────────────┘
| 因素 | 重要性 | 优化方向 |
|---|---|---|
| 内容质量 | 最高 | 原创、有价值 |
| 用户体验 | 高 | Core Web Vitals |
| 技术优化 | 高 | 可爬取、可索引 |
| 外部链接 | 中 | 权威站点链接 |
技术 SEO
Meta 标签
<head>
<!-- 基础 Meta -->
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- SEO Meta -->
<title>页面标题 | 网站名称</title>
<meta name="description" content="155字符以内的页面描述,包含关键词" />
<meta name="keywords" content="关键词1, 关键词2, 关键词3" />
<!-- 规范链接 -->
<link rel="canonical" href="https://example.com/page" />
<!-- 语言和地区 -->
<html lang="zh-CN">
<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/page" />
<!-- 机器人指令 -->
<meta name="robots" content="index, follow" />
<meta name="googlebot" content="index, follow" />
</head>
Open Graph 和 Twitter Cards
<!-- Open Graph (Facebook, LinkedIn) -->
<meta property="og:title" content="页面标题" />
<meta property="og:description" content="页面描述" />
<meta property="og:image" content="https://example.com/image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="网站名称" />
<!-- Twitter Cards -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="页面标题" />
<meta name="twitter:description" content="页面描述" />
<meta name="twitter:image" content="https://example.com/image.jpg" />
<meta name="twitter:site" content="@username" />
结构化数据
<!-- JSON-LD 文章结构化数据 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "文章标题",
"author": {
"@type": "Person",
"name": "作者姓名",
"url": "https://example.com/author"
},
"datePublished": "2025-01-28",
"dateModified": "2025-01-28",
"image": "https://example.com/image.jpg",
"publisher": {
"@type": "Organization",
"name": "网站名称",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "文章描述"
}
</script>
<!-- 产品结构化数据 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "产品名称",
"image": "https://example.com/product.jpg",
"description": "产品描述",
"brand": {
"@type": "Brand",
"name": "品牌名称"
},
"offers": {
"@type": "Offer",
"price": "99.00",
"priceCurrency": "CNY",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "100"
}
}
</script>
<!-- FAQ 结构化数据 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "问题 1?",
"acceptedAnswer": {
"@type": "Answer",
"text": "答案 1"
}
},
{
"@type": "Question",
"name": "问题 2?",
"acceptedAnswer": {
"@type": "Answer",
"text": "答案 2"
}
}
]
}
</script>
网站架构
URL 结构
URL 最佳实践:
┌─────────────────────────────────────────────────────┐
│ │
│ 好的 URL │
│ ├── https://example.com/blog/seo-guide │
│ ├── 简短、描述性 │
│ ├── 使用连字符分隔 │
│ └── 包含关键词 │
│ │
│ 避免的 URL │
│ ├── https://example.com/p?id=123 │
│ ├── 过长或复杂 │
│ ├── 使用下划线或特殊字符 │
│ └── 无意义的参数 │
│ │
└─────────────────────────────────────────────────────┘
Sitemap
<!-- sitemap.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2025-01-28</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/blog</loc>
<lastmod>2025-01-28</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
robots.txt
# robots.txt
User-agent: *
Allow: /
# 禁止爬取的路径
Disallow: /admin/
Disallow: /api/
Disallow: /private/
# Sitemap 位置
Sitemap: https://example.com/sitemap.xml
页面性能
Core Web Vitals
// 监控 Core Web Vitals
import { getCLS, getFID, getLCP, getINP } from 'web-vitals';
function sendToAnalytics(metric: Metric) {
const body = JSON.stringify({
name: metric.name,
value: metric.value,
rating: metric.rating, // 'good' | 'needs-improvement' | 'poor'
});
navigator.sendBeacon('/analytics', body);
}
getCLS(sendToAnalytics);
getLCP(sendToAnalytics);
getINP(sendToAnalytics);
图片优化
<!-- 响应式图片 -->
<picture>
<source
srcset="/image-800.webp 800w, /image-1200.webp 1200w"
type="image/webp"
/>
<img
src="/image-800.jpg"
alt="描述性替代文本"
width="800"
height="600"
loading="lazy"
decoding="async"
/>
</picture>
<!-- Next.js Image -->
<Image
src="/image.jpg"
alt="描述"
width={800}
height={600}
priority={isAboveFold}
/>
预加载关键资源
<!-- 预加载字体 -->
<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin />
<!-- 预连接第三方 -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://www.google-analytics.com" />
<!-- 预加载 LCP 图片 -->
<link rel="preload" href="/hero.webp" as="image" />
内容优化
标题结构
<!-- 正确的标题层级 -->
<h1>主标题 - 包含主关键词</h1>
<h2>章节标题 - 次要关键词</h2>
<h3>子章节 - 长尾关键词</h3>
<h3>子章节</h3>
<h2>章节标题</h2>
<!-- 每个页面只有一个 H1 -->
内部链接
<!-- 描述性锚文本 -->
<a href="/seo-guide">SEO 优化完整指南</a>
<!-- 避免 -->
<a href="/seo-guide">点击这里</a>
图片 SEO
<img
src="/seo-optimization.jpg"
alt="SEO 优化流程图解,展示关键词研究到内容发布的完整步骤"
title="SEO 优化流程"
/>
<!-- 使用描述性文件名 -->
<!-- 好:seo-optimization-guide.jpg -->
<!-- 差:IMG_1234.jpg -->
Next.js SEO 实现
// app/layout.tsx
import { Metadata } from 'next';
export const metadata: Metadata = {
metadataBase: new URL('https://example.com'),
title: {
default: '网站名称',
template: '%s | 网站名称',
},
description: '网站描述',
openGraph: {
type: 'website',
locale: 'zh_CN',
url: 'https://example.com',
siteName: '网站名称',
},
twitter: {
card: 'summary_large_image',
site: '@username',
},
robots: {
index: true,
follow: true,
},
};
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }): Promise<Metadata> {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: [post.image],
type: 'article',
publishedTime: post.date,
},
};
}
// 生成静态站点地图
// app/sitemap.ts
export default async function sitemap() {
const posts = await getAllPosts();
return [
{ url: 'https://example.com', lastModified: new Date() },
...posts.map((post) => ({
url: `https://example.com/blog/${post.slug}`,
lastModified: post.updatedAt,
})),
];
}
国际化 SEO
<!-- hreflang 标签 -->
<link rel="alternate" hreflang="zh-CN" href="https://example.com/zh/page" />
<link rel="alternate" hreflang="en-US" href="https://example.com/en/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
最佳实践总结
SEO 优化清单:
┌─────────────────────────────────────────────────────┐
│ 技术 SEO │
│ ├── 正确的 Meta 标签 │
│ ├── 结构化数据 │
│ ├── XML Sitemap │
│ ├── robots.txt │
│ └── 规范链接 │
│ │
│ 页面性能 │
│ ├── Core Web Vitals │
│ ├── 图片优化 │
│ ├── 资源预加载 │
│ └── 移动优先 │
│ │
│ 内容优化 │
│ ├── 关键词研究 │
│ ├── 标题层级 │
│ ├── 内部链接 │
│ └── 原创内容 │
│ │
│ 监控分析 │
│ ├── Search Console │
│ ├── 排名追踪 │
│ └── 用户行为分析 │
└─────────────────────────────────────────────────────┘
| 场景 | 推荐工具 |
|---|---|
| 关键词研究 | Ahrefs, SEMrush |
| 技术审计 | Lighthouse, Screaming Frog |
| 排名监控 | Search Console |
| 性能监控 | PageSpeed Insights |
SEO 是马拉松,不是短跑。持续优化,耐心等待成果。