vuex结合vue-meta实现router动态设置meta标签

网站的访问流量中,有相当一部分都是来自于搜索引擎,而来自于搜索引擎的流量又全部是免费的,所以网站的SEO(Search Engine Optimization 搜索引擎优化)是实现自我营销的一种最直接且最有效的手段。而SEO往往又都是从优化meta标签开始的!

一、meta标签介绍

meta标签提供关于HTML文档的元数据(元数据指用于描述数据的数据)。元数据不会显示在页面上,但是对于机器是可读的。它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

二、meta标签的特点

1、meta 标签只能位于 head 元素内部。
2、在HTML中,meta 标签没有结束标签。在 XHTML 中,meta 标签必须被正确地关闭。
3、meta标签共有两个属性,分别是http-equiv属性和name属性。

三、SEO 优化部分

关于meta标签的用法实现太多了,在此就不在一一赘述了。现将SEO优化部分列举下:

<!-- 页面标题<title>标签(head 头部必须) -->
<title>张培跃</title>
<!-- 页面关键词 keywords -->
<meta name="keywords" content="玉树临风,风流倜傥,英俊潇洒,才高八斗,貌似番安">
<!-- 页面描述内容 description -->
<meta name="description" content="这么神奇吗?都已经很难用言语来描述了">

四、Vue SPA 应用中设置title与meta

在 Vue SPA 应用中,如果想要修改HTML的头部标签,或许,你会在代码里,直接这么做:

new Vue({
    router,
    data:{
        title:"张培跃",
        keywords:"玉树临风,风流倜傥,英俊潇洒,才高八斗,貌似番安",
        description:"这么神奇吗?都已经很难用言语来描述了"
    },
    beforeMount(){
        console.log(1212)
        document.title = this.title;
        const keywordsEl = document.createElement('meta')
        keywordsEl.content = this.keywords;
        keywordsEl.name = "keywords"

        const descriptionEl = document.createElement('meta')
        descriptionEl.content = this.description;
        descriptionEl.name = "description"

        document.head.appendChild(keywordsEl)
        document.head.appendChild(descriptionEl)
    },
    render: function (h) { return h(App) }
}).$mount('#app')

但是这样的代码,是不是感觉怪怪的!怎么看也不够优雅!没关系,咱们继续往下看!

五、优雅设置title与meta

可以通过引入vue-meta模块,实现以优雅的方式设置title与meta。

1、安装
npm install vue-meta -S
2、在main.js中引入
import Meta from 'vue-meta';
Vue.use(Meta);
3、使用
new Vue({
    router,
    data:{
        title:"张培跃",
        keywords:"玉树临风,风流倜傥,英俊潇洒,才高八斗,貌似番安",
        description:"这么神奇吗?都已经很难用言语来描述了"
    },
    metaInfo(){
        return {
            title: this.title,
            meta: [
                {
                    name:"keywords",
                    content: this.keywords
                },{
                    name:"description",
                    content: this.description
                }
            ]
        }
    },
    render: function (h) { return h(App) }
}).$mount('#app')

六、vue路由中动态设置title与meta

1、在router.js中创建路由:
routes: [
    {
        path: "/qq",
        name: "Qq",
        component: Qq,
        meta: {
            metaInfo: {
                title: "腾讯首页",
                keywords: "资讯,新闻,财经,房产,视频,NBA,科技,腾讯网,腾讯,QQ,Tencent",
                description: "腾讯网从2003年创立至今,已经成为集新闻信息……"

            }
        }
    },
    {
        path: "/jd",
        name: "Jd",
        component: Jd,
        meta: {
            metaInfo: {
                title: "京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!",
                keywords: "网上购物,网上商城,家电,手机,电脑,服装,居家,母婴,美妆,个护,食品,生鲜,京东",
                description: "京东JD.COM-专业的综合网上购物商城,……"
            }
        }
    }
]
2、在store.js中创建状态:
import Vue from "vue";
import vuex from "vuex";
Vue.use(vuex);
const state = {
    metaInfo: {
        title: "张培跃",
        keywords: "玉树临风,风流倜傥,英俊潇洒,才高八斗,貌似番安",
        description: "这么神奇吗?都已经很难用言语来描述了"
    }
};
const mutations = {
    CAHNGE_META_INFO(state, metaInfo) {
        state.metaInfo = metaInfo;
    }
};
export default new vuex.Store({
    state,
    mutations,
})
3、main.js如下:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import Meta from 'vue-meta'
import store from './store'

Vue.use(Meta)

Vue.config.productionTip = false;

router.beforeEach((to, from, next) => {
    if (to.meta.metaInfo)
        store.commit("CAHNGE_META_INFO", to.meta.metaInfo)
    next()
});

new Vue({
    router,
    store,
    metaInfo(){
        return {
            title: this.$store.state.metaInfo.title,
            meta: [
                {
                    name: "keywords",
                    content: this.$store.state.metaInfo.keywords
                }, {
                    name: "description",
                    content: this.$store.state.metaInfo.description
                }
            ]
        }
    },
    render: function (h) {
        return h(App)
    }
}).$mount('#app')

自此功能完美完成,希望对小伙伴们能够有所帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335