使用强大的head配置、可组合组件和组件来改善nuxt应用的SEO。
可以在nuxt.config.ts中进行使用:
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
app: {
head: {
charset: 'utf-8',
viewport: 'width=device-width, initial-scale=1'
}
}
})
在nuxt.config.js中提供app.head属性可以让你自定义整个应用的头部,这个方法不允许提供响应数据,建议在app.vue中使用useHead()方法。
useHead可组合功能允许以编程式、响应式的方式管理head标记,由Unhead提供支持。
与所有组合式一样,他只能用于script setup中使用像生命周期hooks用法那样
index.vue
useHeadSafe事故useHead外部再进行一次包装,将输入限制为只允许安全的值输入。
useHeadSafe({
script: [
{ id: 'xss-script', innerHTML: 'alert("xss")' }
],
meta: [
{ 'http-equiv': 'refresh', content: '0;javascript:alert(1)' }
]
})
// Will safely generate
//
//
但同样的代码放在useHead中,就可以完整的被执行,会有风险。
useSeoMeta和useServerSeoMeta组合式函数可以让你将网站的SEO 元标签定义成一个平面对象,并具有完整的typescript支持。这样可以避免拼写错误和常见错误,例如使用name 而不是 property。
这样我们可以看到的效果是:当我们跳转至对应商品页面时,就会展示对应的title和description。
, ,
此时在about页面上,我们可以看到对应标签生效后的全部内容。例如:网页title变为了我们设置的’About 自定义title’,页面的整体背景颜色变为了绿色。
在业务场景中的应用,我们可以全局设置整个应用的meta数据,形成一个整体的风格,但是在一些活动页面/介绍页面,可以有所不同,此时就可以在活动/介绍组件中,通过上述方式,对meta元数据进行自定义设置。
下面是用于useHead、app.head和组件的非响应式类型。
interface MetaObject {
title?: string
titleTemplate?: string | ((title?: string) => string)
templateParams?: Record>
base?: Base
link?: Link[]
meta?: Meta[]
style?: Style[]
script?: Script[]
noscript?: Noscript[];
htmlAttrs?: HtmlAttributes;
bodyAttrs?: BodyAttributes;
}
app.vue中对于整个项目title的设置
如果在页面中设置过title,那么会在这个后面拼接上 Ably App, 否则直接展示 Ably App
可以在标签上使用tagPosition: 'bodyClose'
选项,将他们附加到标签的末尾
在下面的例子中,titleTemplate要么被设置为带有%s占位符的字符串,要么被设置为一个函数,这样可以更灵活地为nuxt应用的每个路由动态设置页面标题
下面的例子展示了如何使用useHead的link属性或使用< link >组件来启用Google Fonts:
- 方式一:Components方式
- 方式二:useHead 方式
nuxt利用Vue的transition组件在页面和布局之间应用过渡动画
可以启用页面转换对所有页面应用自动进行过渡
export default defineNuxtConfig({
app: {
pageTransition: { name: 'page', mode: 'out-in' }
},
})
效果视频审核中
此时在app.vue中定义rotate动画效果
.rotate-enter-active,
.rotate-leave-active {
transition: all 0.4s;
}
.rotate-enter-from,
.rotate-leave-to {
opacity: 0;
transform: rotate3d(1, 1, 1, 15deg);
}
这样去about页面,我们就可以看到最新的效果啦
我们在定义动画时可以看到,无论是在nuxt.config.ts中定义pageTransition,还是在definePageMeta中定义pageTransition,都有一个name,是这个动画的名称。在定义动画时,与vue一样
default layout
orange layout
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
app: {
head: {
title: '默认标题',
charset: 'utf-8',
viewport: 'width=device-width, initial-scale=1'
},
pageTransition: { // page动画效果
name: 'page',
mode: 'out-in'
},
layoutTransition: { // layout动画效果
name: 'layout',
mode: 'out-in'
}
}
})
definePageMeta({
layout: 'orange'
})
这样,在切换页面时,使用不同布局的页面,就会有不同的动画效果,可以通过这种方式设置切换整体app风格。
对于高级用例,可以使用JavaScript hooks钩子为nuxt页面创建高度动态和自定义的过渡动画。这种方式为JavaScript动画库(GSAP或Tween.js)提供了完美的用例。
⬅️ |
➡️
点击按钮,切换到前一个page 或 后一个page
#{{ $route.params.id }}
加上动画效果后,与轮播组件一样流畅完整。
中增加transition动画当
在app.vue中使用时,transition-props可以直接作为组件props传递来激活全局转换。
总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~
官方文档