前端面试-什么是seo?如何优化seo?

101 阅读6分钟

一、什么是 SEO?

SEO(Search Engine Optimization,搜索引擎优化)  是指通过一系列技术与内容策略,让网站在搜索引擎(如 Google、Bing、百度)自然搜索结果中获得更高的排名、更多的流量和更好的展示。SEO 不等于“欺骗搜索引擎”,而是让网站对用户和搜索引擎都更清晰、更有价值。

二、 为什么要优化SEO?

当用户在搜索引擎搜索手机或某一个产品时,排名优先的产品网站一般先被用户浏览,靠自然搜索获取流量也是提高产品知名度的手段之一,所以我们需要了解一定搜索引擎排名规则后,对我们的产品官网进行从内到外的调整,让网站提升尽量多的排名,获取更多的流量, 从而提升产品知名度,提高产品竞争力。

三、搜索引擎是如何工作的

How Do Search Engines Work? (Easy Beginner's Guide)转存失败,建议直接上传图片文件

主要分为三个核心步骤:爬行(Crawling),即使用网络爬虫(Spider)自动发现和收集互联网上的网页信息;索引(Indexing),对爬行收集到的信息进行分析、分类并存储到巨大的索引库中;以及排名(Ranking),当用户进行搜索时,搜索引擎根据数百种因素(如相关性、权威度等)对索引中的内容进行打分和排序,最后将最相关的结果呈现给用户。

四、作为前端,如何优化SEO

1. SSR服务端渲染

现在大部分项目都基于现代web框架vue和react的SPA应用,SPA的核心特点是通过JavaScript动态加载和重写当前页面,而不是像传统多页应用(MPA)那样在服务器端生成完整的HTML。因此,搜索引擎爬虫在初始抓取时只能看到一个空的HTML骨架,无法直接识别通过JavaScript生成的内容,而且爬虫的Javascript执行能力仍有一些限制,SPA在首次加载时可能需要下载大量的JavaScript代码,这可能导致较慢的加载时间,影响用户体验和搜索引擎排名。

SSR (服务器端渲染)通过在服务器上提前生成完整的HTML 内容,解决了客户端渲染(CSR)中搜索引擎爬虫只能看到空白页面的问题,从而提高了对搜索引擎的友好度,使得搜索引擎能更好地理解和索引页面内容,从而提升网站的SEO排名。

对于vue和react项目,相应的支持ssr的框架是更好的选择,比如Nuxt.js(Vue),Next.js(React)。

2. 准确的TDK描述

TDK = Title(标题) + Description(描述) + Keywords(关键词)
这是放在网页 <head> 里的三项最基本的元信息,搜索引擎和社交平台会读取它们来展示结果或生成卡片。以下是一个🌰,

<head>
  <title>轻量办公椅 | 舒适扶手可调 | Acme家居</title>
  <meta name="description" content="Acme 轻量办公椅:人体工学设计、可调扶手与高度、通风靠背,30天无理由退货。立刻查看优惠价与用户评价。">
  <meta name="keywords" content="办公椅, 人体工学, 可调扶手, 办公家具">
  <link rel="canonical" href="https://example.com/products/ergonomic-chair-xyz">
  <!-- Open Graph(可选) -->
  <meta property="og:title" content="轻量办公椅 — Acme 家居">
  <meta property="og:description" content="人体工学、可调扶手,享受舒适办公。查看详情与促销。">
  <meta property="og:image" content="https://example.com/images/chair-xyz-hero.jpg">
</head>
  • title是网站的标题,搜索引擎会优先检索title信息
  • description是对网站的简短描述,通常在搜索引擎结果页标题下方显示,应概括网页内容。
  • keywords: 网页内容中的关键词汇,反映了页面主题和内容,每个关键字要有对应内容匹配。

注意:现代主流搜索引擎(如 Google、Bing、百度)普遍不把 meta keywords 作为排名信号,但在某些小型搜索或内部站点搜索里仍有用。重点应放在 Title 与 Description。

3.语义化标签

语义化的html代码和符合w3c标准是seo的关键要素之一。

语义化是指使用具有明确含义的html元素,搜索引擎在爬取网站时,也会更容易理解网站的内容以便进行收录,有助于搜索引擎理解网页内容,还能提高网页的可读性和可维护性。

代码示例:从 “div 汤” 到语义化重构

非语义(问题:难以被屏幕阅读器/爬虫理解):

<div class="header">
  <div class="logo">Logo</div>
  <div class="menu">
    <div class="item">Home</div>
    <div class="item">Blog</div>
  </div>
</div>

<div class="content">
  <div class="post">
    <div class="title">标题</div>
    <div class="meta">作者 • 2025-09-16</div>
    <div class="body">文章正文...</div>
  </div>
</div>

语义化重构:

<header>
  <div class="logo">Logo</div>
  <nav aria-label="主导航">
    <ul>
      <li><a href="/">首页</a></li>
      <li><a href="/blog">博客</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h1>标题</h1>
    <p class="meta">作者 • <time datetime="2025-09-16">2025-09-16</time></p>
    <section>
      <p>文章正文...</p>
    </section>
  </article>
</main>

<aside>
  <!-- 相关文章 / 广告 -->
</aside>

<footer>
  © 2025 公司名
</footer>

注意:图片必须加alt,链接必须加title。

4. 编写robots文件

robots.txt 是放在网站根目录(https://example.com/robots.txt)的一个文本文件,用来告诉爬虫(search engine crawlers)哪些路径可以抓取、哪些不可以抓取。它遵循 Robots Exclusion Protocol,是对爬虫的“礼貌性建议”(大部分主流爬虫会遵守),不是用于安全保护(敏感信息不应仅靠它隐藏)。编写robots.txt,可以告诉爬虫可以被抓取和不需要抓取的内容,让搜索引擎关注需要索引的内容,提高网站收录效率。

示例:www.zhihu.com/robots.txt

5.https

启用 HTTPS 是必须的:它本身是一个(轻量但真实的)排名信号,同时能改善用户信任、浏览器安全提示、页面渲染能力和性能机会;配置错误或证书问题则会立刻伤及抓取与索引。

Google 已把使用 HTTPS 作为搜索排名的轻量信号之一——虽然权重不大,但在竞争接近的页面间可以成为加分项。

Chrome 等浏览器会把 HTTP 页面标注为 “Not secure”,这会降低用户信任、提高跳出率,进而影响用户行为指标(点击率 / 停留 / 转化),这些间接信号会影响搜索表现。

6.内部和外部链接

  • 内部链接(Internal link) :同一域名(或同一站点/子目录)内部不同页面之间的超链接。
    例:https://example.com/blog/post1 → https://example.com/blog/post2

  • 外部链接(External link / outbound link / backlinks) :指向站外域名的链接(站外链接)或站外指向本站的链接(反向链接 / backlinks)。

    • 出站(Outbound)指向外部网站的链接。
    • 反向链接(Backlink)是外部站点指向你站点的链接(对 SEO 很重要)。

7.sitmap.xml

除了上述技术,确保你的SPA具有一个详细的sitemap.xml文件也是一个好方法,它能帮助搜索引擎发现你的所有重要页面。

sitemap(站点地图)  是一个(通常为 XML)文件,列出你站点上可被爬取的 URL 以及可选的元数据(lastmodchangefreqpriority 等),用于帮助搜索引擎更智能、更高效地抓取你的网站。对大型站点、深层分页、JS 渲染页面、图片/视频内容尤为重要。

一个最小可用的 XML sitemap 示例:

<?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-09-10</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/blog/seo-guide</loc>
    <lastmod>2025-09-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>