前后端分离SEO混合架构终极解决方案

开发 架构
前后端不分离的方式生成的 HTML 页面(即SEO专题页面),搜索引擎爬虫可以直接抓取页面内容,有利于提高网站在搜索引擎中的排名。

前言

什么是SEO ?

我们日常频繁借助搜索引擎,查找各类信息。只需在搜索引擎中输入简短字词,按下回车,就能获取所需内容。然而,每个搜索关键词往往对应着成千上万的结果,搜索引擎依据自身算法对这些结果进行排序,根据输入的搜索词,运用算法将结果呈现给用户。

对于网站所有者而言,自然期望自家网站信息能在搜索结果中名列前茅,这正是 SEO 的价值所在。

SEO 即 Search Engine Optimization,意为搜索引擎优化。它是指利用搜索引擎的规则,提升网站在相关搜索引擎中的自然排名,旨在助力网站在行业内占据领先地位,获取品牌效益,本质上是网站经营者为提升自身或公司排名而采取的商业行为。

SEO 是提升网站排名的有效方式,通过完善和优化网站的排名因素,影响搜索引擎的排名算法。它是网络营销策略(online marketing Digital strategy)与数字营销策略(Digital Marketing strategy)的关键环节,能提高网站在搜索引擎中的排名,进而为网站带来更多流量。

什么是SPA?

SPA 即 Single Page Application,也就是单页面应用。它的显著特点是,网站所有效果都展示在一个静态页面中。当用户进行页面切换操作时,并非真正从一个页面跳转到另一个页面,而是通过 JavaScript 动态修改页面内容来实现。

SPA 页面有着诸多优点。从用户体验角度来说,数据切换加载速度更快,内容变更无需重新加载整个页面,避免了不必要的跳转和重复渲染,极大提升了用户体验。从技术层面看,渲染工作由客户端完成,大大减轻了服务器的请求处理压力;并且采用前后端分离开发模式,前端专注于交互逻辑,后端负责数据处理,分工明确,有利于提高开发效率和代码维护性。

然而,SPA 也存在明显缺点。在初次加载时,需要统一加载基础的 JavaScript 和 CSS,部分页面虽可按需加载,但整体加载量依然较大。在搜索引擎优化(SEO)方面,由于所有内容都在同一页面动态替换显示,而爬虫蜘蛛在爬取网页时,不会执行其中的 JS 逻辑,这就导致隐藏在 JS 中的跳转逻辑无法被执行,使得搜索引擎蜘蛛难以爬取到页面的数据内容,在 SEO 上存在天然劣势。

为什么要做SEO优化?

首先,对于网站来说,搜索引擎是用户获取网站信息的重要渠道。如果网站在搜索引擎中的呈现效果不佳,比如标题和内容与实际不符,关键信息无法被收录,这将导致网站在搜索引擎中很难被用户发现。

以 SPA 应用为例,由于其自身特点(如内容通过 JavaScript 动态修改,而搜索引擎爬虫通常不执行 JS 逻辑),如果不进行 SEO 优化,搜索引擎抓取的内容就会和实际页面内容脱节。这意味着网站的价值内容无法通过搜索引擎传递给用户,从而影响网站的流量和曝光度。

图片图片

从用户访问角度看,用户在搜索引擎中查找信息时,主要是通过搜索结果中的标题和摘要等来判断是否点击访问网站。如果搜索引擎展示的内容不能准确反映网站实际内容,用户就不太可能访问这个网站,这会导致网站失去潜在的访问量和客户。

从网站运营角度讲,流量是网站生存和发展的重要因素。没有流量,网站的功能、产品或服务就无法得到有效传播。因此,为了让 SPA 应用(以及其他类型的网站)能够在搜索引擎中正确地展示内容,吸引用户访问,进行 SEO 优化是非常必要的。

SEO优化难点

页面渲染问题

在前后端分离的架构下,原本直接嵌入在HTML中的页面内容被重构为动态元素,它们依赖于JavaScript在客户端(浏览器)执行后才能完整展现。这也就意味着搜索引擎爬虫在初步抓取页面时,可能无法像对待静态页面那样直观地捕获所有实质性内容,特别是在爬虫技术未能完全模拟浏览器执行JavaScript的情况下,这可能会导致部分或全部关键信息无法被有效索引。

数据获取方式

前后端分离架构的核心在于通过API接口进行数据传输,后端服务器将原本的内嵌于HTML文档中的数据提取至独立的数据,并通过接口传递至前端应用。

这种情况下,搜索引擎爬虫在抓取网页时,无法直接从HTML源码中抓取到具体业务数据,因为这一些数据是在请求服务端接口之后才被填充至页面上来的。如果搜索引擎爬虫不去执行这些接口请求或是不支持对AJAX等异步请求的跟踪处理时,很有可能会错失大量有价值的内容信息,进而影响到我们网站在搜索引擎结果页中的可见性以及排名表现。

服务器端渲染问题

服务器端渲染可以说得上是一种战略性的技术手段了,它主要是为应对前后端分离设计模式所带来的SEO挑战而生。它和传统的客户端渲染方式有所不同,SSR允许服务器向浏览器发送响应前,就已经完成了对网页内容的完全构建——也就是将用户界面试图预先在服务器端转换成HTML格式文档。

这也意味着,当搜索引擎爬虫访问一个采用SSR技术的网站时,它们将能够即时捕获到丰富的、可供索引的内容,并不需要浏览器执行JavaScript后才能显示到信息。在工作流程上,当服务器接收到客户端发出的HTTP请求时,它首先负责调用响应的后台逻辑,从数据库或其他数据数据源检索页面展示所需的所有数据。接着,服务器会将这些实时数据注入到前端框架提供的HTML模版中,经过页面渲染引擎处理后,生成包含完整的DOM结构和数据的静态HTML页面。

最后,这个已渲染完毕的HTML页面将会被传送到客户端中(也就是用户的浏览器中),从而实现了首屏内容的快速加载以及对搜索引擎爬虫的高度友好。

技术方案选型

方案一 前端SSR

SSR(Server - Side Rendering,服务器端渲染)是当下前端项目极为常用的优化方案。其原理是页面内容由服务端进行渲染生成,浏览器只需直接展示服务端返回的 HTML。这种方式优势显著,它大幅提升了首屏加载速度,用户无需长时间等待页面加载,能快速获取信息,极大地优化了用户体验;同时,对于搜索引擎优化(SEO)极为有利,搜索引擎爬虫能更好地抓取页面关键内容,提升网站在搜索结果中的排名,增加曝光与流量。

然而,SSR并非完美无缺。在实际应用中,它存在一些不可忽视的弊端。一方面,项目若要引入 SSR,改造成本巨大,需要对原有的开发架构、代码逻辑等进行大规模调整;另一方面,开发人员需要掌握额外的技术知识与技能,学习成本相对较高,这对团队技术能力提出了更高要求。

此外,由于渲染工作在服务端完成,服务端需承担额外的计算压力,在高并发场景下,可能导致服务器性能瓶颈,影响整体服务质量。

方案二 无头浏览器

资源占用过大,服务器负担加重。无头浏览器在渲染网页时,需要模拟完整的浏览器环境,包括加载 HTML、CSS、JavaScript 等资源,执行复杂的脚本逻辑,这会消耗大量的 CPU、内存等服务器资源。对于一些小型网站或者服务器配置较低的情况,使用无头浏览器可能会导致服务器性能下降,甚至出现崩溃的情况,影响网站的正常运行。

成本增加。为了满足无头浏览器的资源需求,可能需要升级服务器硬件配置或者增加云服务的使用量,这无疑会增加网站运营的成本。例如,原本一台普通配置的服务器可以满足网站日常访问需求,但引入无头浏览器后,需要更换为更高配置的服务器,或者增加服务器实例数量,这都会带来额外的费用支出。

方案三 PHP后端混合架构

整体思路

借助反向代理把特定需收录的页面(像首页、政策列表以及详情页等这类页面)导向独立的 SEO 子系统。此子系统运用前后端不分离的开发模式,这里选用超高性能可扩展PHP框架webman框架进行开发,以达成系统轻便实用且稳定性高的目标。

前端使用nginx代理,当UA为爬虫请求时,直接反向代理到PHP的SEO路由,返回一个纯净的专门让爬虫蜘蛛查看的专题页页面。

具体实现步骤

反向代理设置:反向代理是位于前端服务器的代理服务器,它接收客户端的请求,再将请求转发给内部服务器,并把内部服务器的响应返回给客户端。在这个方案里,需要把反向代理配置为将特定页面请求转发到独立的 SEO 子系统。

实现方案

前端正常系统配置

开源技术小栈

Nginx 反向代理配置示例。反向代理是位于前端服务器的代理服务器

cms.tinywan.com.conf 配置文件

map $http_user_agent $is_spider {
    default 0;
    ~[\S\s]bot[\S\s] 1;
    ~[\S\s]Bot[\S\s] 1;
    ~[\S\s]pider[\S\s] 1;
    'DingTalk-LinkService/1.0' 1;
    'Yahoo! Slurp China' 1;
    'Mediapartners-Google' 1;
    'YisouSpider' 1;
}

server {
    listen 443 ssl http2;
    server_name cms.tinywan.com;
    root /home/www/website/cms.tinywan.com;

    location / {
        index index.html index.htm;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
        try_files $uri $uri/ /index.html;
    }

    # SEO-新闻资讯-列表|详情
    location ~ ^/news(list|detail)$ {
        if ($is_spider) {
            rewrite ^/news(list|detail)$ /seo/news/$1$is_args$args break;
            proxy_pass https://seo.tinywan.com;
        }
        try_files $uri $uri/ /index.html;
    }

    # SEO-首页
    location = / {
        if ($is_spider) {
            rewrite / /seo/home/index$is_args$args break;
            proxy_pass https://seo.tinywan.com;
        }
        try_files $uri $uri/ /index.html;
    }

}

在上述配置中,/news/list 和 /news/detail 路径的如果是正常访问请求会被转发到正常业务系统,而如果是爬虫请求会被转发到独立的 SEO 子系统。

SEO 服务配置

seo.tinywan.com.conf 配置文件

server {
    listen 443 ssl ;
    server_name seo.tinywan.com;

    location ^~ / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header Access-Control-Allow-Origin *;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://127.0.0.1:8787;
    }
}

SEO子系统开发

  • 选择 PHP 框架:为保证系统轻便实用且稳定,这里选择超高性能可扩展PHP框架webman框架进行开发为例,它简洁轻量,易于上手。
  • 前后端不分离开发:前后端不分离意味着在服务器端生成完整的 HTML 页面,然后直接返回给客户端。

安装webman

composer create-project workerman/webman

官方文档:https://www.workerman.net/doc/webman/install.html

开源技术小栈

安装视图模板,这里选用 think-template

composer require topthink/think-template

官方文档:https://www.workerman.net/doc/webman/view.html

优势分析

  • SEO 友好:前后端不分离的方式生成的 HTML 页面(即SEO专题页面),搜索引擎爬虫可以直接抓取页面内容,有利于提高网站在搜索引擎中的排名。
  • 稳定性高:PHP 是一种成熟且广泛应用的服务器端脚本语言,有丰富的资源和社区支持。选用合适的 PHP 框架可以保证系统的稳定性和可维护性。
  • 系统轻便:webman 轻量级 PHP 框架对服务器资源的消耗较少,能够满足系统轻便实用的要求。
责任编辑:武晓燕 来源: 开源技术小栈
相关推荐

2018-12-03 11:45:43

红旗云解决方案

2019-06-12 19:00:14

前后端分离AppJava

2017-02-15 10:18:32

架构前后端分离

2017-11-15 07:01:33

互联网分层架构前后端

2022-05-27 10:40:04

前后端权限控制设计

2023-02-08 16:29:58

前后端开发

2016-09-21 10:11:19

2015-11-12 10:32:27

前端后端分离

2022-02-22 11:54:05

跨域项目前后端

2021-09-18 09:45:33

前端接口架构

2017-11-06 08:41:53

互联网分层架构前后端

2020-09-29 07:42:34

互联网分层架构前后端分离

2011-03-25 13:35:36

2011-03-25 13:38:58

2022-03-15 23:55:33

混合云云计算远程办公

2014-04-18 14:43:07

前后端分离NodeJS

2021-10-20 18:21:18

项目技术开发

2019-07-09 05:44:35

前后端分离架构接口规范

2020-09-25 11:50:12

前后端分离架构Web

2014-02-17 17:40:13

系统架构Web架构
点赞
收藏

51CTO技术栈公众号