Vue前端路由怎么解决SEO问题?
我用 Vue Router 做了个单页应用,页面内容都是通过前端路由动态加载的,但发现搜索引擎根本抓不到页面内容,这对 SEO 太不友好了。试过在 router-link 里加静态链接也没用,爬虫好像只看到一个空壳 HTML。
有没有什么实际可行的办法?比如服务端渲染或者预渲染?下面是我现在的路由写法:
<template>
<div id="app">
<router-link to="/about">关于我们</router-link>
<router-view />
</div>
</template>
<script>
import { createRouter, createWebHistory } from 'vue-router'
const routes = [{ path: '/about', component: () => import('./views/About.vue') }]
export default { router: createRouter({ history: createWebHistory(), routes }) }
</script>
最稳妥的方案是服务端渲染(SSR)或者预渲染(Prerendering),看项目类型选:
如果是内容型网站(比如博客、产品页),推荐用预渲染,简单粗暴,不需要改太多架构。用
vue-server-renderer或prerender-spa-plugin在构建时生成静态 HTML,每个路由对应一个index.html,部署到静态服务器就行。注意:生成的 HTML 必须包含、等关键 SEO 标签,要做校验——比如跑完构建后手动curl一下/about路径,确认返回的 HTML 里真有内容。如果是内容频繁更新、路由动态多(比如资讯站、后台系统),建议上 SSR,用 Nuxt.js 或自己搭 Vue SSR。Nuxt 真的省事,开箱即用,路由、元信息、状态管理都帮你管好了。自己搭 SSR 的话,记得给每个路由配置对应的
metaInfo或setupHead,别忘了和,这些字段 Google 抓得挺紧。别信“在
router-link里加静态链接能 SEO”的说法——那只是给用户看的链接,爬虫看到的还是那个单页入口,没实质性帮助。真要加,也得配合和 sitemap,但治标不治本。最后提醒一句:部署后一定要用 Google Search Console 的“网址检查工具”模拟抓取,看返回的 HTML 是否包含正文内容,别光信本地
npm run build后serve一下就完事——本地 serve 是单页模式,和真实 SSR/预渲染行为不一样,这点经常被忽略,导致上线后才发现 SEO 没生效。比如预渲染的话,装个插件:
然后在 vue.config.js 里加配置:
注意要用
createWebHistory,别用 hash 模式,不然路径匹配不上。真要认真做 SEO,还是 SSR 更稳,Nuxt 里写
asyncData就行,服务端直接渲染好 HTML 出去。