谈谈seo优化
搜索引擎优先爬取页面
HTML结构,通过SSR渲染,会在服务端生成HTML结构,给到客户端渲染,有利于seo
深度seo优化,需要知道那些细节点?
- 合理的
title 、 description 、 keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有所不同;description把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description有所不同;keywords列举出重要关键词即可 - 语义化的
HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页 - 重要内容
HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取 - 重要内容不要用
js输出:爬虫不会执行js获取内容 - 控制页面的大小,减少http请求,提高网站的加载速度。
- 少用
iframe:搜索引擎不会抓取iframe中的内容
为什么需要seo?
从用户角度、业务角度、产品角度去分析
- 1、提高搜索引擎
- 2、首屏的加载速度
对业务来说
- 提高了产品可见性、市场曝光度, 流量入口
- 帮助业务的增长
seo优化思路
- 1、页面结构优化
- 语义化标签
- 根据语义化,爬取内容的时候,可以获取到更多有用的信息
- 搜索引擎更容易理解页面
- div,span这些的标签,都需要替换为语义化
- 比如头部 header标签、导航栏 nav标签 、核心内容 main标签,底部 footer标签等等
- 设置
title 、 description 、 keywords- title是网站页面标题 :
<title>网站标题</title> - description是页面描述概况:
<meta name=”Description” Content=”你网页的简述”> - keyword是页面关键字:
<meta name=”Keywords” Content=”关键词1,关键词2,关键词3,关键词4″>
- title是网站页面标题 :
- 语义化标签
- 2、内容优化
- 保证页面中的关键词的覆盖率
- 3、结构化schema数据
- 使用Schema.org 规范的 FAQ
- 通过标准版的schema的结构,为搜索引擎提供明确的上下文信息
- 通过Schema数据对网页内容进行语义化标注
<script type='application/ld+json'>
{
'@context': 'https://schema.org',
'@type': 'FAQPage',
"author":'qqqiu',
mainEntity: mainEntity.value.map(({ question, answer }) => ({
@type': 'Question',
name: question,
acceptedAnswer: {
'@type': 'Answer',
text: answer,
},
})),
}
</script>
企业级SEO优化
- 1、URL规则优化
- 2、nofollow标签
- 导航栏,底部导航栏增加nofollow标签
- 3、lang声明标签声明
- 全部页面增加语言声明
- 4、hreflangs标签声明
- 5、H标签规则
- 6、301重定向
- 7、搜索引擎相关文件,如robots.txt、sitemap.xml
- 都是放在网站的根目录下
robots.txt
robots.txt 是一个文本文件,用于告诉搜索引擎的爬虫(如 Googlebot、Bingbot)哪些页面或文件可以被抓取,哪些不可以被抓取
- 主要用于:
- 防止搜索引擎抓取某些页面(如后台管理页面、测试页面等)
- 限制爬虫访问频率,减轻服务器压力
- 指定网站地图(sitemap.xml)的地址
- 主要作用是:告诉搜索引擎「哪些页面不能爬取」,可以节省爬虫资源
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /
Sitemap: https://example.com/sitemap.xml
User-agent: *表示对所有搜索引擎生效Disallow: /admin/禁止爬取后台目录Allow: /表示其余路径可以抓取 最后一行Sitemap:是可选的,用来告诉搜索引擎 sitemap 的地址
sitemap.xml
sitemap.xml 是一个为搜索引擎优化(SEO)而设计的重要文件,用于向搜索引擎清晰地列出网站中希望被抓取和索引的所有页面
sitemap.xml就像是你网站的“站点地图”,告诉搜索引擎:- 网站有哪些页面(URLs)
- 每个页面的更新时间(
<lastmod>) - 页面更新的频率(
<changefreq>) - 页面的重要性(
<priority>)
- 通过sitemap列出网站所有重要的页面,帮助搜索引擎发现、理解和索引网站内容
- sitemap是站点地图,可以告诉搜索引擎哪些页面可以被抓取收录,可以提升页面的收录,提高搜索索引的效率
- 用 sitemap.xml 主动推送比较高价值页面(如首页、分类页、标签页,播放页、详情页)
URL规则优化
- 多语言切换时,URL需要区分语言
- 比如 www.demo.com/ja、www.demo.com/en,即`主链接/语言`
- URL 中体现语言前缀
- 更好的搜索引擎、爬虫识别
- 页面跳转时,带上语言、分类、id
- 比如跳转到短剧详情页面
主链接/语言/video/剧名/episodes-剧集
- 简单来说,url链接尽可能直观的表示当前页面的作用
- 比如跳转到短剧详情页面
nofollow标签
背景: 为了优化网站的 SEO 表现,防止搜索引擎将权重传递给某些链接(如广告链接、外部链接或用户生成内容的链接),需要对这些链接配置 rel="nofollow" 属性。
目的:
- 避免权重流失。
- 控制搜索引擎爬取策略。
- 提高搜索引擎对网站内容的质量评估。
h标签
- 比如标题、描述、内容,可以通过h标签来渲染
- 比如标题、核心关键词,使用h1
- 概要、描述,使用h2
- 子标题 使用h3
- 让搜索引擎理解页面内容层级关系
hreflangs标签声明
目的:
- 告诉搜索引擎每个页面的语言和地区版本。
- 避免语言和地区版本页面的重复内容问题。
- 提升目标地区用户的搜索体验。
规则说明
- Hreflang 标签需要在页面的
<head>部分声明。 - 每个页面必须包含指向其自身的
hreflang标签。 - 每个页面必须包含默认页面
<hreflang="x-default">的标签。
Canonical链接
- canonical可以理解为规范标准链接,告诉搜索引擎,这个页面的标准规范地址是哪一个
- canonical 是用于解决重复内容问题,告诉搜索引擎,在多个相似的URL中,哪些是权重的页面,让搜索引擎可以集中收录,防止重复收录,避免多个URL分散权重
场景:
- 分页场景,每个分页的页面都需要有单独的canonical的链接,因为每个分页的页面的内容都是不一样的,如果每个页面的canonical都一样,那么会搜索引擎会认为是重复的内容
标签格式
- Canonical 标签需放在网页的
<head>标签内
<link rel="canonical" href="https://www.flextv.com/对应链接"/>
noindex
- noindex是seo的指令
- 告诉搜索引擎:这个页面可以抓取,但不要收录到搜索结果里。
场景:
- 低价值的页面,比如有些页面对用户是没有太大的价值,就可以不需要出现在搜索结果中
- 临时的测试页面、周期性的活动页面
生成网页TDK
网页TDK, 指的是title,description, keywords, 这3个是seo比较核心的基础元标签,其中title标签是搜索结果的关键,利于提高搜索的排名,description, keywords 这2个是通过meta标签设置, 显示搜索的摘要
TDK 是网页最核心的三大基础 SEO 元标签:
| 名称 | 标签 | 主要作用 |
|---|---|---|
| Title | <title> | 决定搜索结果标题、权重最高的关键词字段 |
| Description | <meta name="description"> | 展示在搜索摘要中,影响点击率(CTR) |
| Keywords | <meta name="keywords"> | 早期搜索引擎使用,如今权重极低,但仍用于结构化管理与内部检索 |
- Title 是 SEO 权重最高的元素。
- Description 影响点击率(CTR),在搜索结果中是主要摘要
useTDK方法
- 对于支持动态TDK的页面,其渲染过程应动态载入相应的参数替换规则,并在最终的渲染上下文中,将TDK模板内的所有预设参数替换为准确的实时数据。
- home.ts
- assets/tdk/home.ts
export default {
en: {
title: 'FlexTV | Watch Trending Short Dramas & High-Impact Stories',
description: 'FlexTV is your portal to the world of short, high-octane drama. Each episode is a mini-marvel, packed with climaxes and crafted to keep you on the edge of your seat. From action-packed thrillers to heartwarming romances, FlexTV offers a comprehensive selection of popular shows tailored to suit every taste.',
keywords: 'FlexTV, Minidramas, Short Videos, Bitesize Dramas, Playlets'
},
ru: {
title: 'FlexTV | Смотрите популярные короткие драмы и захватывающие истории',
description: 'Погрузитесь в мир мини-драм на FlexTV! Новые хиты ежедневно: напряжённые сюжеты, неожиданные повороты, любовь, драма и триллеры!',
keywords: 'FlexTV, мини-драмы, короткие видео, драмы малого формата, мини-сериалы'
},
sc: {
title: 'FlexTV | 观看热门短剧与高能剧情故事',
description: '沉浸式短剧尽在 FlexTV!热门短剧每日上新,剧情高能反转、节奏紧凑。甜宠、虐恋、悬疑、复仇全类型齐聚,追剧欲爆棚!',
keywords: 'FlexTV, 迷你剧, 短视频, 轻量短剧, 小剧场'
}
}
- useTdk
import { get } from 'lodash-es'
export type TdkProps = {
page?: 'home' | 'video' | 'genres' | 'genres_all' | 'search'
}
export type TdkData = {
title: string
description: string
keywords: string
}
export type PageTDKConfig = {
page?: TdkProps['page']
params?: Record<string, any>
}
export default function useTDK(tdkOptions?: TdkProps) {
const { locale } = useI18n()
/**
* 根据页面类型和当前语言获取 TDK 数据
*/
const getPageTDK = async (page: TdkProps['page'] = 'home', params?: Record<string, any>): Promise<TdkData | null> => {
try {
const lang = locale.value || 'en'
const tdkModule = await import(`~/assets/tdk/${page}.ts`)
const tdkDataConfig: TdkData = tdkModule.default || tdkModule
const tdkData = get(tdkDataConfig, lang) || {}
if (params && Object.keys(params).length > 0) {
const result: TdkData = {
title: formatMessage(tdkData.title, params),
description: formatMessage(tdkData.description, params),
keywords: formatMessage(tdkData.keywords, params)
}
return result
}
return tdkData
} catch (error) {
console.error(`Failed to load TDK for page: ${page}, locale: ${locale.value}`, error)
return null
}
}
/**
* @param template 模板字符串(如 "Hello {name}")
* @param params 参数对象(如 { name: "John" })
* @returns 替换后的字符串
*/
const formatMessage = (template: string, params: Record<string, any>): string => {
return template.replace(/\{(\w+)\}/g, (match, key) => {
return params[key] !== undefined && params[key] !== null ? String(params[key]) : match
})
}
const setPageTDK = async (pageTDKConfig: PageTDKConfig = {}) => {
const { page, params } = pageTDKConfig
const tdkData = await getPageTDK(page || tdkOptions?.page, params)
if (!tdkData) return
useHead({
title: tdkData.title,
meta: [
{
name: 'description',
content: tdkData.description
},
{
name: 'keywords',
content: tdkData.keywords
}
]
})
}
return {
getPageTDK,
setPageTDK
}
}
结构化schema数据
通过schema的结构,为搜索引擎提供明确的上下文信息,让搜索引擎更好理解网页结构的标记语言 【简单来说让搜索引擎“更懂网页的内容”】
- 结构化数据通过json配置来描述相关结构化信息
- 在 Nuxt中,直接通过
useHead注入 JSON- 可以使用
@nuxt/schema-org模块
- 可以使用
提高seo目的效果
- 提供搜索的质量
- 提高搜索结果丰富度
- 可以提高点击率
- 搜索结果更吸引用户点击
- 提高网页内容的抓取效率
- 提高网站的曝光率
参考文档:
| 文档名 | 链接 |
|---|---|
| 视频结构化数据官方规范 | developers.google.com |
| 结构化数据测试入口 | search.google.com |
| EEAT:《搜索质量评估员指南》 | https://developers.google.com/search/docs/appearance/quality-evaluator-guidelines |
Schema 类型
OrganizationCollectionPageWebSiteItemListListItemBreadcrumbList
| Schema 类型 | 作用 | 适用场景 | 典型字段 |
|---|---|---|---|
| Organization | 描述一个组织、公司或机构 | 网站主体信息、企业信息页、联系我们页 | name, url, logo, sameAs, contactPoint |
| WebSite | 描述整个网站,提供网站层级信息给搜索引擎 | SEO 增强、站点搜索、站点结构信息 | name, url, potentialAction(如 SearchAction) |
| CollectionPage | 表示一个内容集合页面 | 产品列表页、文章列表页、视频列表页 | name, mainEntity, about, hasPart |
| ItemList | 列表集合(可嵌套 ListItem) | 文章列表、产品列表、排行榜、目录 | itemListElement(ListItem 数组), numberOfItems |
| ListItem | 列表中的单个项 | 配合 ItemList 或 BreadcrumbList 使用 | position, url, name |
| BreadcrumbList | 面包屑导航结构 | 页面面包屑导航,帮助搜索引擎理解页面层级 | itemListElement(ListItem 数组,包括 position 和 name) |
GEO/FAQ 优化
FAQ 是通过 schema 结构化数据,让传统搜索引擎明确识别页面中的问答内容。 GEO是通过页面内容本身的结构化来实现,让 AI 搜索引擎更容易抓取、拆分、理解、检索、引用并生成答案。
- GEO使用生成引擎优化技术,针对 ChatGPT、Perplexity 和 Google AI 等 AI 搜索引擎优化文档
- 让内容更容易被 AI 检索、理解、引用和生成到答案中
- FAQ 结构化只是 GEO 的一部分,做了 FAQ schema
- FAQ 结构化是给传统搜索引擎问题解答
- GEO 结构化是给 AI搜索引擎去检索回答
Open Graph 社交平台分享优化
- Open Graph 是一套网页元数据协议,用来告诉社交平台“这页内容应该怎么展示”
- 当别人把你的链接发到X、Facebook、TikTok 等地方时,平台就更容易正确生成 (标题、摘要、封面图等等)
- 简单来说就是 当社交媒体分享,网页元数据的展示
- 文档:
影响SEO的性能指标
为什么性能指标会影响SEO, Google 认为:用户必须快速看到主要内容
- LCP 是最重要的 SEO 性能指标。
- 当 LCP 完成,用户才真正“看到主要内容”。
- 如果让用户等待的时间太久,Google会不愿意把你的网站排在前面
LCP慢的影响问题
- 影响用户停留时间,用户不看内容就离开。
- 影响爬虫效率,Google搜索引擎抓取频率会下降。
chrome seo相关插件
- Ubersuggest-SEO与关键词神器
- AITDK SEO Extension - 流量/关键词/Whois/SEO
接入GSC
- Google Search Console(简称 GSC)是 Google 官方推出的一款免费网站管理工具
- google搜索引擎的控制台
- 用于分析SEO
- 网址曝光量、点击率、平均排名
- 可以按关键词、页面、国家/地区、设备等维度分析数据
- 检查网站是否被 Google 正常收录
- 发现并修复网站问题
- 提交和管理网站内容
- 提交Sitemap
分析SEO工具
- 富媒体搜索结果测试:https://search.google.com/test/rich-results
- 验证结构化数据;https://validator.schema.org/