1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

meta description にREADME のテキストがセットされてしまう現象

Last updated at Posted at 2020-08-04

先日仕事で Web ページの不具合修正しデプロイ、その日は問題なく終了。そして数日が経ちました。
ある日マーケティングチームから Slack から一報が。

meta description に変な値が設定されているのですが、確認していただけますか?

さすがに驚いて確認したところ、コンフルエンスの URL が設定されていた…

これは完全に凡ミスで、いくつかの条件が重なって発生した問題です。後述しますが、普通に create-nuxt-app を使ってプロジェクトを立ち上げた場合は大丈夫だと思います。

状況および事象

まずは各ファイルの設定です。

nuxt.config.js(一部抜粋)
...

  head: {
    title: process.env.npm_package_name || '',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      {
         hid: 'description',
         name: 'description',
         content: process.env.npm_package_description  || ''  // ←ここが今回のポイント
     }
    ],
    link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }]
  },

...
package.json(一部抜粋)
{
  "name": "project-name",
  "version": "1.0.0",
  "author": "kkeeth",
  "private": true,

  ...

  (description の設定無し)
README.md
# project name

hogehoge

この場合、meta description がどうなるかと言うと、タイトル通り README のテキストが設定されます。実際のブラウザのキャプチャがこちら↓↓↓

check-meta-project.png

これの修正方法は簡単で、

  1. nuxt.config.js に description のデフォルト値を設定する
  2. package.json の description を設定する

README は他の値を設定することもありますので、あまりおすすめしません。

原因究明

ではこの事象の根本的原因はなんだったのか?

▼仮説1
「これは Nuxt がデフォルトでこの値を設定している?」

ということで、Nuxtソースコードを読むも原因が分からず…

▼仮説2
「いや、確か Nuxtmeta 情報を vue-meta というライブラリで扱ってなかったか?」

ということで、vue-metaソースコードを読むも原因が分からず…

ここでハッと気付く…

正解

process.env.npm_package_description だから、npm がデフォルトの値を設定していないか?

ということで、npm 公式サイト を見ますと、しっかり書いてありました。。。

description: info from the README, or an empty string ""

はい。package.json に description がない場合は README から設定する1、なければ空文字列をセットします(実際に動作確認してみました)。2 要は、npm の仕様だったわけです。

余談

現在は create-nuxt-app でプロジェクトを作成しますと、nuxt.config.js の記述は以下のように npm ではなく package.json の設定を利用するようになっております。

nuxt.config.js
+ import pkg from './package'

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

したがって、今回の問題はかなりのエッジケースになりますのでご安心ください。

まとめ

  • 公式の CLI のボイラープレートを信じよう
  • package.json の description はちゃんと書こう

ではでは(=゚ω゚)ノ

  1. 厳密には、heading 1 の次の行が設定されます

  2. README ファイルが存在しない場合も同様です

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?