Vue.js js搜索引擎优化实践

Vue.js js搜索引擎优化实践,vue.js,seo,nuxt.js,Vue.js,Seo,Nuxt.js,我正在寻找重构的方法: numxt.config.js const headConfig = require('./config/head') const modulesConfig = require('./config/modules') const config = { head: headConfig, (...) } module.exports = Object.assign({}, config, modulesConfig) module.exports = {

我正在寻找重构的方法:

numxt.config.js

const headConfig = require('./config/head')
const modulesConfig = require('./config/modules')

const config = {
  head: headConfig,

(...)
}

module.exports = Object.assign({}, config, modulesConfig)
module.exports = {
  meta: [
    {charset: 'utf-8'},
    {name: 'viewport', content: 'width=device-width, initial-scale=1'},
    {name: 'fb:app_id', content: 'xxxx'},
    {hid: 'og:url', name: 'og:url', content: 'xxxx'},
    {hid: 'og:type', name: 'og:type', content: 'website'},
    {hid: 'og:image', name: 'og:image', content: 'xxxx'},
    {hid: 'og:site_name', name: 'og:site_name', content: 'xxxx'},
    {hid: 'keywords', name: 'keywords', content: 'xxxx'}
]
}
import Vue from 'vue'

export default ({ route }) => {
  Vue.mixin({
    head() {
      return {
        meta: [
          {
            hid: `og:url`,
            property: 'og:url',
            content: 'https://www.yoursite.com' + route.fullPath
          }
        ]
      }
    }
  })
}
routes: [      
{
  path: '/page',
  name: 'some',
  meta: {            
    title: 'Best seo title',
    description: 'Best seo description'
  },
  component: someComponent,
},
config/head.js

const headConfig = require('./config/head')
const modulesConfig = require('./config/modules')

const config = {
  head: headConfig,

(...)
}

module.exports = Object.assign({}, config, modulesConfig)
module.exports = {
  meta: [
    {charset: 'utf-8'},
    {name: 'viewport', content: 'width=device-width, initial-scale=1'},
    {name: 'fb:app_id', content: 'xxxx'},
    {hid: 'og:url', name: 'og:url', content: 'xxxx'},
    {hid: 'og:type', name: 'og:type', content: 'website'},
    {hid: 'og:image', name: 'og:image', content: 'xxxx'},
    {hid: 'og:site_name', name: 'og:site_name', content: 'xxxx'},
    {hid: 'keywords', name: 'keywords', content: 'xxxx'}
]
}
import Vue from 'vue'

export default ({ route }) => {
  Vue.mixin({
    head() {
      return {
        meta: [
          {
            hid: `og:url`,
            property: 'og:url',
            content: 'https://www.yoursite.com' + route.fullPath
          }
        ]
      }
    }
  })
}
routes: [      
{
  path: '/page',
  name: 'some',
  meta: {            
    title: 'Best seo title',
    description: 'Best seo description'
  },
  component: someComponent,
},
我希望能够做的一个例子是自动将“og:url”设置为页面的url。没有必要每次都重复这一点

目前,我在我的Nuxt.js应用程序的每个页面中都包含以下内容:

    {
      hid: 'og:url',
      property: 'og:url',
      content: 'https://website.com' + this.$route.fullPath
    },

我相信有一种更好的方法可以自动将其设置在某个位置://

您最好的选择可能是创建一个全局:

这应该允许您创建一个head mixin,该mixin将自动导入到每个组件中,这样您就可以定义一次
og:url
,并将其自动注入到任何地方

以下是如何将其注册为Nuxt插件的示例:

/plugins/headMixin.js

const headConfig = require('./config/head')
const modulesConfig = require('./config/modules')

const config = {
  head: headConfig,

(...)
}

module.exports = Object.assign({}, config, modulesConfig)
module.exports = {
  meta: [
    {charset: 'utf-8'},
    {name: 'viewport', content: 'width=device-width, initial-scale=1'},
    {name: 'fb:app_id', content: 'xxxx'},
    {hid: 'og:url', name: 'og:url', content: 'xxxx'},
    {hid: 'og:type', name: 'og:type', content: 'website'},
    {hid: 'og:image', name: 'og:image', content: 'xxxx'},
    {hid: 'og:site_name', name: 'og:site_name', content: 'xxxx'},
    {hid: 'keywords', name: 'keywords', content: 'xxxx'}
]
}
import Vue from 'vue'

export default ({ route }) => {
  Vue.mixin({
    head() {
      return {
        meta: [
          {
            hid: `og:url`,
            property: 'og:url',
            content: 'https://www.yoursite.com' + route.fullPath
          }
        ]
      }
    }
  })
}
routes: [      
{
  path: '/page',
  name: 'some',
  meta: {            
    title: 'Best seo title',
    description: 'Best seo description'
  },
  component: someComponent,
},
numxt.config.js中:

plugins: [
    '~/plugins/headMixin.js'
]
这是我的方式

在numxt.config.js中:

head: {
title: 'default title',
meta: [
  { charset: 'utf-8' },
  { name: 'viewport', content: 'width=device-width, initial-scale=1' },
  {
    hid: 'description',
    name: 'description',
    content: 'default description'
  }
],
link: [
  { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
},

默认情况下.vue中的

export default {
head() {
  return {
    title: `Company - ${this.$route.meta.title}`,
    meta: [
      {
        hid: 'description',
        name: 'description',
        content: this.$route.meta.description
      }
    ],
  }
},
如果您在router.js中使用@nuxtjs/router

const headConfig = require('./config/head')
const modulesConfig = require('./config/modules')

const config = {
  head: headConfig,

(...)
}

module.exports = Object.assign({}, config, modulesConfig)
module.exports = {
  meta: [
    {charset: 'utf-8'},
    {name: 'viewport', content: 'width=device-width, initial-scale=1'},
    {name: 'fb:app_id', content: 'xxxx'},
    {hid: 'og:url', name: 'og:url', content: 'xxxx'},
    {hid: 'og:type', name: 'og:type', content: 'website'},
    {hid: 'og:image', name: 'og:image', content: 'xxxx'},
    {hid: 'og:site_name', name: 'og:site_name', content: 'xxxx'},
    {hid: 'keywords', name: 'keywords', content: 'xxxx'}
]
}
import Vue from 'vue'

export default ({ route }) => {
  Vue.mixin({
    head() {
      return {
        meta: [
          {
            hid: `og:url`,
            property: 'og:url',
            content: 'https://www.yoursite.com' + route.fullPath
          }
        ]
      }
    }
  })
}
routes: [      
{
  path: '/page',
  name: 'some',
  meta: {            
    title: 'Best seo title',
    description: 'Best seo description'
  },
  component: someComponent,
},

您在路由中写入的所有数据。一切正常。

此解决方案仅在初始页面加载时运行。如果用户导航到另一个页面,则head()不会更新。