知识架构
SEO概述
SEO是什么:搜索引擎优化,是通过优化网站结构、内容和外部因素,提升网站在搜索引擎(如Google、百度)中的自然(非付费)排名的过程。
搜索引擎原理
爬取过程
搜索引擎首先会使用爬虫先从种子URL(用户在搜索引擎平台提交的URL)作为起点开始进行爬取,期间会解析页面内的a标签递归提取新链接进行更深层次的爬取。
期间爬取过程还会收到 robots.txt
和 <meta name="robots">
的限制。
并且为了优化爬取的内容质量,搜索引擎一般会有算法对爬取的内容进行动态调整。
索引过程
爬取完成之后获取相关的网页,之后搜索引擎会解析这些网页的html代码,提取元数据并建立倒排索引,将关键词跟相关网页建立映射,这样子在之后搜索的时候速度就会很快。
其中关键的元数据主要有: <title>
、 <meta description>
、 <h1>
- <h6>
。
排位过程
建立好索引之后,就要决定之后显示在搜索结果中的优先顺序,这个过程会给每个页面建立一些指标评分(这些评分会实时变化),目标是优先展示高相关、高权威、高用户体验的页面,这也是为什么我们需要做SEO优化,目的就是为了提高页面的优先级,将搜索结果提前,增加曝光度。
其中核心的指标主要有:
- 内容相关性指标:TF-IDF(关键词在文章的重要性)、关键词位置(出现在h1/title标签的优先)、词频密度(关键词出现的次数越多,相关性越强)等
- 权威性指标:外链数量、域名权威性(gov、著名域名优先)等
- 用户体验指标:LCP、FID、CLS等
- 用户行为指标:用户点击率、停留时间、转化率等
用户搜索
例如:用户在Google搜索“iPhone 15评测”
搜索引擎会对其进行分词,再从索引库中筛选出匹配的页面
之后会根据指标来筛选页面,剔除内容重复和低质量的网站,再根据指标评分来对结果展示顺序进行排序,最终解析页面识别标题和描述展示给用户。
优化指南
主要还是根据之前说到的几个指标进行优化
针对内容相关性指标的优化
相关网站 | 网址 | 作用 |
---|---|---|
5118大数据 | https://www.5118.com/ | 关键词挖掘、分析(还有很多,挺全的) |
百度指数 | https://index.baidu.com/ | 查看关键词搜索趋势、地域分布、人群画像。 |
站长工具 | https://www.aizhan.com/ | 提供百度权重查询、关键词排名、反链分析。 |
微词云 | https://www.weiciyun.com/ | 生成关键词词云,直观展示高频词。 |
关键词的选择:
- 选择与内容相关度较高的关键词
- 优化更具体、竞争较低的长尾词(如“2024年最佳智能手机推荐”)。
- 使用与主题相关的同义词或扩展词(如“SEO优化”可搭配“搜索引擎排名”)。
关键词的分布:
- 标题(Title):核心关键词放在前60字符内。
- 首段:前100字内出现关键词,自然融入。
- 正文:均匀分布,避免堆砌(密度建议2-3%)。
- H1/H2标题:用关键词强化段落主题。
- 加粗/斜体:突出关键点,但不过度。
TF-IDF优化:
- 通过工具(如LSI Graph、TF-IDF分析工具)找出内容中缺失的高权重词。
- 使用AI对文章进行润色,提高关键词的相关性
针对内容质量的优化
- 内容原创性:避免抄袭、使用工具进行查重
- 内容深度与覆盖度:长文章优先、结构性优化,使用列表、表格等提高可读性
- 内容时限性:定时更新内容,保证内容不过时(一般搜索引擎会偏好于新鲜的内容)
针对于权威性的优化
- 作者署名:使用标签对作者进行署名
- 外链数量:与别人合作,提高外链数量和质量,但是注意不要一次性增加太多,不然会被判定为作弊
- 利用域名权威性:优先使用高权威的域名后缀(如gov、edu、cn、com),并且可以在高权威域名的博客平台、媒体平台发表文章并附带自己网站的链接(但是要注意该网站的
<meta>
标签或者<a>
标签是否是nofollow的)。
针对用户体验的优化
对前端进行全链路性能优化,提高响应效率和用户体验,可以利用浏览器控制台中的Google Lighthouse来分析指标。一般从以下几点入手:
- 性能:FCP、LCP、TBT、CLS
- 无障碍:键盘操作性、屏幕阅读器兼容性、颜色对比度
- 最佳做法:兼容性、安全性
性能优化
架构优化:
- 使用SSR,首屏由服务端渲染,JS仅用于交互和更新页面
打包体积优化:
- 编写代码时:优先使用轻量级库或者能自己实现就自己实现、使用ESM进行Treeshaking、将非重点内容进行懒加载、避免全量引入、避免过多重复样式代码
- 打包时:资源压缩、将较大的库分开打包、使用CDN分发静态资源或较大的库、剔除未使用的CSS
运行时优化:
- 使用preload优先加载重要的JS和CSS,使用defer延迟加载非必要JS和CSS
- 使用骨架屏,减少白屏实践,让用户提前想象感知页面
- 使用懒加载减少一次性渲染的DOM数量,可以使用IntersectionAPI来实时渲染视口内容。
- 优化渲染策略,例如:
- 使用虚拟列表或者Canvas对海量数据进行渲染
- 使用requestAnimateFrame对滚动行为、批量数据加载、交互、动画进行优化
- 将计算密集型任务放到WebWorker中处理,避免阻塞主线程
- 使用requestIdleCallback或者fiber对任务进行分片处理
- 使用Canvas、Svg来实现复杂交互动画
网络优化:
- 使用HTTP/2或者HTTP/3,加快网络层连接和传输效率
- 配置nginx使用代理服务器进行负载均衡和缓存和CDN分发
- 对非热门数据进行http缓存,使用ServiceWorker缓存静态资源代码减少重复加载
- 对非重要资源进行预取(使用link标签的prefetch),对将要用到的域名进行dns预取(使用link的dns-prefetch标签),对常用标签进行预渲染(使用link标签的prerendering)
- ssr场景中在服务端渲染时提前获取数据,加载完成之后客户端可以直接拿到请求的数据。
- 预测用户行为进行请求,如悬浮到某个标签就对该标签页的内容进行提前请求。
- 使用CDN分发较大资源或者静态资源。
- 降级策略,优先展示上一次请求内容(如商品页面的商品),请求完毕再刷新
- 降级策略,对于图片或者视频使用渐进式加载,优先加载质量较低的。
无障碍优化
无障碍方面有详细的WCAG标准(web内容无障碍指南)来规定,可以参考标准来进行优化。
官网:https://www.w3.org/Translations/WCAG21-zh
下面对于一些常见的优化来进行讲解
键盘操作性:
- 良好的聚焦行为,保证所有交互元素都可以聚焦, 自定义交互控件需加上
tabIndex="0"
,避免非必要的聚焦(如模态框的聚焦逃逸)通过设置tabindex="-1"
或aria-hidden="true"
实现。 - 非原生按钮(如
<div>
模拟的按钮)必须补全键盘事件。 - 避免覆盖系统级快捷键(如
Ctrl+S
),可通过<aria-keyshortcuts>
声明自定义快捷键。
屏幕阅读性:
- 使用语义化html标签
- 通过
<aria-live>
区域通知屏幕阅读器实时更新,内容变化时会自动朗读 - 避免无关内容干扰语音导航
- 表单使用
<label for="id">
或<aria-labelledby>
关联标签和输入框。通过<aria-describedby>
关联错误信息,并设置<aria-invalid="true">
。提前说明格式(如<aria-describedby="password-hint">
)。
颜色对比度:参考WCAG标准,例如:
标准等级 | 文本类型 | 最小对比度要求 | 适用场景示例 |
---|---|---|---|
AA级 | 普通文本(<18pt 或 <14pt 加粗) | 4.5:1 | 正文段落、表单标签、导航菜单项等 |
AA级 | 大文本(≥18pt 或 ≥14pt 加粗) | 3:1 | 标题、大号按钮文字、幻灯片标题等 |
AAA级 | 普通文本 | 7:1 | 高要求场景(如医疗、法律文档) |
AAA级 | 大文本 | 4.5:1 | 大号标题或强调文本(需更高可读性时) |
AA级 | 非文本 UI 元素(图标、图形) | 3:1 | 工具栏图标、图表关键数据点、输入框边框等 |
AA级 | 焦点指示器(:focus 样式) | 3:1 | 键盘操作时的焦点轮廓(如 outline: 2px solid #0066ff ) |
不适用 | 纯装饰性文本/元素 | 无要求 | 无信息传达作用的背景文字、分割线等 |
不适用 | 禁用状态文本 | 无要求(建议 ≥2:1) | 灰色按钮文字(需结合其他视觉区分,如虚线边框) |
最佳做法优化
兼容性:
- 浏览器前缀处理:使用
Autoprefixer
自动添加 CSS 厂商前缀(如-webkit-
、-moz-
)。 - Polyfill 按需引入:通过
@babel/preset-env
+core-js
按需填充 ES6+ 语法(如Promise
、Array.includes
)。 - 响应式布局适配:使用
rem/vw
单位 +@media
查询兼容不同屏幕尺寸。 - 特性检测替代 UA 嗅探:通过
Modernizr
或@supports
检测浏览器支持性(如flexbox
)。 - 跨浏览器测试:使用
BrowserStack
或Sauce Labs
覆盖老旧浏览器(如 IE11、Safari 旧版)。 - 图片格式降级:
<picture>
标签兼容 WebP(支持时)和 PNG/JPEG(降级)。 - 避免 CSS Hack:用
Feature Queries
替代_
或*
等 CSS Hack。 - JavaScript 异常捕获:
try/catch
包裹高风险操作,避免脚本阻塞。
安全性:
- XSS 防御:对动态内容转义(如
DOMPurify.sanitize()
),禁用innerHTML
直接插入。 - CSRF 防护:敏感请求添加
CSRF Token
,Cookie 设置SameSite=Lax|Strict
。 - CSP 策略:通过
Content-Security-Policy
头限制资源加载来源(如script-src 'self'
)。 - HTTPS 强制:启用
HSTS
头(Strict-Transport-Security: max-age=31536000
)。 - 依赖漏洞扫描:定期执行
npm audit
或Snyk
检测第三方库风险。 - 敏感信息隐藏:避免前端硬编码 API 密钥,使用环境变量(如
process.env.API_KEY
)。 - 点击劫持防护:设置
X-Frame-Options: DENY
或 CSP 的frame-ancestors
。 - JWT 安全实践:校验签名、过期时间,避免 localStorage 存储敏感 Token。