前言

vue开发的项目有时候会有SEO的需求,由于vue是JavaScript框架,内容都在JavaScript和服务端,所以SEO效果很差。vue的服务端渲染又很难和现在成熟的springboot等后端框架契合。本文介绍一种通过springboot+thymeleaf这样传统的前后端分离方案,再整合vue,从而在兼顾vue开发便利性的同时,获得不错的SEO效果。

核心思路

  • 将需要SEO的内容,通过springboot赋值给thymeleaf,然后由thymeleaf直接渲染出来。
  • 不需要SEO的内容、交互性比较强的内容。通过thymeleaf模板里的vue代码来完成交互。
  • 需要SEO,又有一定的交互性,想用Vue来开发。这种情况,使用springboot传递内容给thymeleaf,然后thymeleaf传递给Vue,Vue使用slot来渲染。【听着很晕没关系,后面一看代码就明白了】

主要内容

  • 如何使用thymeleaf+vue才能有一定的SEO效果
  • 如何在springboot+thymeleaf框架下整合vue,使用thymeleaf给vue赋值。

一、thymeleaf+vue的SEO优化

设想一个需求:开发一个导航栏,导航栏的导航链接由后端返回,需要SEO,让搜索引擎爬虫能够抓取。同时导航栏链接的active激活效果,又想用vue来控制。导航栏的用户头像等信息不需要SEO,但有比较复杂的交互状态。比如消息提醒角标等等。

思路: 使用vue开发一个名为HeaderNav的组件,导航栏的内容通过slot传入组件,导航链接通过Vue的插槽Prop特性,由HeaderNav组件控制class实现。大概的代码如下:

<Header-Nav
:login-Modal-Show="false" v-bind:login-Status-Prop="true"
th:v-bind:login-Status-Prop="|${userDO ne null}|"
>
<template v-slot:nav="slotProps">
<ul class="inline-flex ml-10 py-5 font-semibold" id="navTop">
<li class="px-3">
<a style="letter-spacing: 3px;" :class="slotProps.navClass.index" href="/">
博客
</a>
</li>
<li class="px-3"><a style="letter-spacing: 3px;"
:class="slotProps.navClass.book"
href="/books.html" th:href="@{/books}">专栏</a></li>
</ul>
</template> </Header-Nav>

这样的设计,能够让搜索引擎的爬虫爬取到slot中的导航链接,同时又可以使用vue来控制各种交互效果。

二、thymeleaf如何给vue赋值、传递参数

在thymeleaf中使用vue,需要SEO的内容肯定要通过thymeleaf来传递给vue。这方面很难找到对应的文档,作者把自己的实战经验写出来。

  • thymeleaf赋值给vue的v-bind。th:v-bind:login-Status-Prop="|${userDO ne null}|",不要使用v-bind的简写:变量,一定要使用v-bind:变量。然后用|来包围thymeleaf的$赋值语法。
  • thymeleaf赋值给vue的v-on。th:v-on:click="|jump('${name}')|",使用|包围click的内容,里面有对应的vue method,method的入参可以使用thymeleaf传递进去。

版权声明:《Springboot+thymeleaf结合Vue,通过thymeleaf给vue赋值解决Vue的SEO问题》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/article/n

Springboot+thymeleaf结合Vue,通过thymeleaf给vue赋值解决Vue的SEO问题的更多相关文章

  1. 图书-技术-SpringBoot:《Spring Boot2 + Thymeleaf 企业应用实战》

    ylbtech-图书-技术-SpringBoot:<Spring Boot2 + Thymeleaf 企业应用实战> <Spring Boot 2+Thymeleaf企业应用实战&g ...

  2. SpringBoot集成前端模版(thymeleaf)

    1.在application.properties配置文件中添加 thymeleaf 的配置信息 spring.datasource.driverClassName=com.mysql.jdbc.Dr ...

  3. SpringBoot thymeleaf使用方法,thymeleaf模板迭代

    SpringBoot thymeleaf使用方法,thymeleaf模板迭代 SpringBoot thymeleaf 循环List.Map ============================= ...

  4. 解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

    问题: 前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话. 在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, ...

  5. 【SpringBoot实战】视图技术-Thymeleaf

    前言 在一个Web应用中,通常会采用MVC设计模式实现对应的模型.视图和控制器,其中,视图是用户看到并与之交互的界面.对最初的Web应用来说,视图是由HTML元素组成的静态界面:而后期的Web应用更倾 ...

  6. SpringBoot(四)之thymeleaf的使用

    这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎. thymeleaf介绍 简单说, Th ...

  7. springboot的推荐模板引擎-Thymeleaf

    1)添加对themeleaf的支持的依赖 <!--Thymeleaf--> <dependency> <groupId>org.springframework.bo ...

  8. SpringBoot入门03-转发到Thymeleaf

    前言 Spring Boot不提倡使用jsp和用View层,而是使用Thymeleaf代替jsp,因为性能可以得到提升. 使用Thymeleaf要加入依赖 Thymeleaf不能直接被访问,它严格遵守 ...

  9. srping boot thymeleaf 学习总结 (2) - thymeleaf properties 国际化 mesaage

    thymeleaf获取配置properties中的数据与thymeleaf国际化(摘录) 使用thymeleaf提供的国际化 有时候会有直接在模板中获取配置文件properties中的配置信息,比如: ...

  10. JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...

随机推荐

  1. yaml文件详解

    一.yaml文件详解 前言 Kubernetes 支持 YAML 和 JSON 格式管理资源对象JSON 格式:主要用于 api 接口之间消息的传递YAML 格式:用于配置和管理,YAML 是一种简洁 ...

  2. 【源码】RapidJSON 源码剖析(0.1):调试工具 GDB 的使用

    [源码]RapidJSON 源码剖析(0.1):调试工具 GDB 的使用 正式开始源码阅读之前,有必要了解一下源码阅读中用到的调试工具 GDB. GDB(GNU Debugger) 是一种可以运行在多 ...

  3. Mac监控键盘输入并执行动作

    背景 电脑的安全是非常重要的,特别是里面的敏感数据,若是被有心之人利用,那后果不堪设想. 所以我们部门定下了一个规矩,谁离开工位要是不锁屏,就可以在部门群发送一个消息:我请大家吃鸡翅. oh,技术出身 ...

  4. 代码随想录算法训练营day24 | leetcode 77. 组合

    基础知识 回溯法解决的问题都可以抽象为树形结构,集合的大小就构成了树的宽度,递归的深度构成的树的深度 void backtracking(参数) { if (终止条件) { 存放结果; return; ...

  5. 从0搭建Vue3组件库(二):Monorepo项目搭建

    本篇文章是从0搭建Vue3组件库系列文章第二篇,本篇文章将带领大家使用pnpm搭建一个简单的Monorepo项目,并完成包的关联与测试 什么是 Monorepo 其实很简单,就是一个代码库里包含很多的 ...

  6. 人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0)

    世间无限丹青手,遇上AI画不成.最近一段时间,可能所有人类画师都得发出一句"既生瑜,何生亮"的感叹,因为AI 绘画通用算法Stable Diffusion已然超神,无需美术基础,也 ...

  7. mysql数据库总是锁表

    有可能是数据库服务器的磁盘空间满了

  8. 在linux 下如何快速创建环境

    首先先在你的主目录下创建一个文件 touch venv python创建环境 python3 -m venv venv 创建虚拟环境 (提示:当你有错找不到的时候可以重新创建一个环境) source ...

  9. C++数组(一):一维数组

    C++一维数组 C++数组的定义方式 数据类型 数组名[数组长度]; 例子:int arr[3]; arr[0] = 1; arr[1] = 2; arr[2] = 3; 数据类型 数组名[数组长度] ...

  10. 创建一个spring项目