programing

Vue.js를 사용하여 메타 제목 및 설명 변경

prostudy 2022. 6. 17. 21:41
반응형

Vue.js를 사용하여 메타 제목 및 설명 변경

Vue에서 바디 태그보다 높은 것을 변경할 수 있습니까?Js? 이 두 요소에 대한 내용은 현재 DOM 트리 아래 요소에 첨부된 JSON 파일에 저장되어 있습니다.

Google에서 탐색할 수 있는 메타 제목과 설명을 삽입해야 합니다.DIV 하단의 App ID를 사용하여 현재 Vue JSON이 주입되기 때문에 본문 요소 및 DOM 트리 상단의 액세스에 관한 문제를 파악한 후 크롤링합니다).

이전 작업에서 정사각형 공간 템플릿에서 이 문제를 해결하기 위해 jQuery 코드를 사용한 적이 있습니다.

jQuery('meta[name=description]').attr('content', 'Enter Meta Description Here');

페이지 HTML

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="{{items[0][0].meta-desc}}">
  <meta name="author" content="">
  <title>{{items[0][0].meta-title}}</title>
  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
  <!-- Vue.js CDN -->
  <script src="https://unpkg.com/vue"></script>
</head>

<body>
  <!-- Page List -->
  <div class="container text-center mt-5" id="app">
      <h1 class="display-4">Vue Page Output:</h1>
      <h2>{{items[0][0].page1}}</h2>
  </div>
  <div class="container text-center mt-5">
    <h3>Other Pages</h3>
    <a href="products.html">Products</a>
    <a href="contactus.html">Contact Us</a>
</div>
  <!-- /.container -->

  <script type="text/javascript">
    const app = new Vue({
      el: '#app',
      data: {
        items: []
      },
      created: function () {
        fetch('test.json')
          .then(resp => resp.json())
          .then(items => {
            this.items = items
          })
      }
    });
  </script>
</body>

</html>

JSON

  [
    [
    {
        "page1": "Company Name",
        "meta-title": "Acme Corp"
        "meta-desc": "Welcome to Acme Corp"
    }
    ],
    [
    {
        "products": "Product List"
    }
    ],
    [
    {
        "contactus": "Contact Us at Acme Corp"
    }
  ]

다음은 동작 중인 코드입니다. 착신 JSON 파일은 본문 요소와 함께 메타 세부 정보와 함께 고정된 배열 형식으로 제공됩니다.좀 더 까다롭게 만들죠

https://arraydemo.netlify.com/

변경하는 것은 Vue가 제어하는 영역 밖에 있기 때문에 일반적인 DOM 조작을 사용합니다.뭐랄까...

created() {
  fetch('test.json')
    .then(resp => resp.json())
    .then(items => {
      this.items = items;
      const descEl = document.querySelector('head meta[name="description"]');
      const titleEl = document.querySelector('head title');

      descEl.setAttribute('content', items[0]['meta-desc']);
      titleEl.textContent = items[0]['meta-title'];
    })
}

Vue Router를 사용하는 경우 각 후크 전에 클리너 솔루션이 사용되고 있다고 생각합니다.

const routes = [{ path: '/list', component: List, meta: {title:'List'} }]

router.beforeEach((to, from, next) => {
    document.title = to.meta.title
    next()
})

그러나 정적 제목만 설정할 수 있습니다.

단, SEO 최적화를 원하는 경우 Nuxt가 대부분의 문제를 해결해 줄 것입니다.

Vue meta는 메타데이터 관리용 NPM 패키지입니다.https://vue-meta.nuxtjs.org/

vue 페이지 구성 요소에서 사용하는 방법의 예:

export default {
name: "Contact",
 metaInfo: function() {
   return {
     title: "My page meta title",
     meta: [
     { name: 'description', content:  "My page meta description" }
    ]
  }
 }

Vue Router 를 사용하고 있는 경우는, 여기서 Vue meta 를 설정해, 모든 페이지가 사용할 수 있도록 할 수 있습니다.

import Vue from 'vue'
import Router from 'vue-router'
import VueMeta from 'vue-meta'


Vue.use(Router)
Vue.use(VueMeta)

export default new Router({
mode: 'history',
base: '/',
routes: [
{
  path: '/',
  name: 'Home',
  component: Home
},

제목을 변경하려면 vuejs에서 쉽게 변경할 수 있습니다.

루트 작성 중 router.js 파일에서 다음과 같은 작업을 수행할 수 있습니다.

{
    path:"/productdetail",
    name:"productdetail",
    component:ProductDetail,
    meta: {
        title : localStorage.getItem("title"),
    }
    
}

router.beforeEach((toRoute,fromRoute,next) => {
   window.document.title = toRoute.meta.title;
   next();
})

localStorage를 사용하면 제목을 동적으로 변경할 수 있습니다.안타깝게도 메타 설명은 동일한 방법으로 변경되지 않습니다.

언급URL : https://stackoverflow.com/questions/53282040/change-meta-title-and-description-using-vue-js

반응형