当前位置:首页 > SEO入门 > 正文

前后端分离怎么影响SEO? PHP项目该如何优化?

大家好,我是贝贝。

前后端分离怎么影响SEO? PHP项目该如何优化?

最近好几个做PHP开发的朋友来问我,说他们项目改成前后端分离了,数据都是前端通过API来拿,结果网站收录好像变差了,排名也往下掉,问我有没有办法。

这确实是个挺实际的问题,所以我想结合我自己遇到的情况和试过的方法,来具体聊聊。

前后端分离和SEO的核心矛盾在哪

传统的PHP项目,比如用ThinkPHP、Laravel直接渲染页面,服务器返回给浏览器的是完整的HTML,搜索引擎爬虫来抓取的时候,拿到的是直接能看懂的内容。

前后端分离之后,情况变了。

你的PHP服务器可能只提供API接口,返回一堆JSON数据,真正的页面是由浏览器里的JavaScript,用Vue或React这些框架动态渲染出来的。

问题就出在这里:很多搜索引擎爬虫在处理这种JavaScript渲染的页面时,能力是有限的,或者根本不去执行JS。

它可能只抓取到你最初返回的那个几乎空白的HTML壳子,里面根本没有实质性的文章内容、产品列表这些关键信息。

这就导致了“内容不能被索引”这个最根本的SEO问题。

前后端分离怎么影响SEO? PHP项目该如何优化?

PHP项目做前后端分离SEO的具体办法

知道了问题,那怎么解决呢?

我把我用过和了解过的几种方案列一下,各有各的适用场景。

  • 服务端渲染(SSR):这是目前比较主流和推荐的方案。不是说回到老路,而是在Node.js服务器(或PHP的V8JS扩展)上,先把你Vue/React组件渲染成完整的HTML,再发给浏览器和爬虫。这样爬虫拿到的是“熟”的页面。Nuxt.js(对应Vue)和Next.js(对应React)就是干这个的。对于PHP项目,你可以把前端部分单独部署一个Node服务来做SSR,PHP后端专心提供数据API。
  • 预渲染(Prerender):如果你的页面不是高度动态的(比如博客文章、产品介绍页),可以在项目构建的时候,就用无头浏览器把每个路由的页面提前抓取并保存为静态HTML文件。当爬虫访问时,直接返回这些静态文件。用Webpack的prerender-spa-plugin就能做。这个办法更简单,但对频繁更新的内容不太友好。
  • 动态渲染:这个方案是识别访问者是不是爬虫。如果是普通用户,就返回前后端分离的单页应用;如果是搜索引擎爬虫,就在服务器端实时渲染出完整的HTML返回给它。可以用中间件来做识别。不过Google官方提示,如果操作不当,被判定为“隐藏真实内容”,可能会有风险。

为了更清楚,我简单对比一下这几个方案的关键点:

方案实现难度维护成本对动态内容的支持适合的场景
服务端渲染(SSR)较高较高内容频繁更新、交互复杂的中大型应用
预渲染(Prerender)内容相对固定、页面数不多的宣传站、博客
动态渲染中等中等需要区别对待爬虫与用户、有SEO需求的动态应用

除了渲染,PHP后端还要注意什么

就算解决了页面内容渲染的问题,PHP后端API的设计也得配合好SEO。

有几个细节很容易被忽略。

第一是URL结构。

即使前端用了Vue Router,定义了`/article/:id`这样的路由,你也要确保这个URL模式能映射到真实的、有内容的页面。

并且,要在PHP后端或者SSR服务中,为这些重要的路由设置正确的`sitemap.xml`,主动提交给搜索引擎。

第二是元标签的管理。

每个页面的title、description、keywords这些,不能再写死在前端代码里了。

比较合理的做法是,PHP的API在返回文章内容数据时,一起把这篇内容的meta信息返回。

然后在前端或者SSR服务中,动态地注入到页面的``里面去。

比如你的文章API返回的数据结构可以这样设计:

{

"post" {

"id"123,

"title" "文章标题" "content" " },

"seoMeta" {

"eTitle" "标题 - 网站名" "description" "摘要描述" ""关键词1,关键词2" }

}

第三是链接的可用性。

确保你网站内的所有重要链接,都是普通的`

  • 用命令行工具,比如`curl`或者`wget`,直接去请求你的页面地址,看看返回的HTML是什么。
  • 我一般会用`curl`简单测一下:

    `curl -A "Googlebot"你的页面网址`

    这个命令是模拟Google爬虫去请求,看看返回的HTML内容里,文章正文部分是不是已经以纯文本形式存在了。

    另外,记得在Search Console里提交你的站点地图,并关注“覆盖率”报告。

    如果有大量页面显示“已抓取但未编入索引”,或者“编入索引时出现问题”,那很可能就是渲染问题还没解决彻底。

    一些实际操作的参数参考

    最后,如果你决定用Node做SSR来配合PHP后端,部署的时候有几个参数设置会影响性能和SEO效果。

    说到底,PHP做前后端分离后的SEO,核心思路就是“把给爬虫看的内容准备好”。

    要么提前准备好(预渲染),要么实时准备好(SSR),关键是要保证爬虫拿到手的,是和用户看到的一样的、完整的内容。

    技术选型上没有绝对的好坏,就看哪个更适合你当前项目的规模和更新频率。

    最新文章