notion API + NEXT.js + netlify でブログ立ち上げ ⑥ SEO関連の設定

notion API + NEXT.js + netlify でブログ立ち上げ ⑥ SEO関連の設定
yarn build && yarn postbuild

$ yarn postbuild
yarn run v1.22.17
warning ../../../../package.json: No license field
$ next-sitemap
Loaded env from /Users/xxx/yyy/.env
[next-sitemap] Generated index sitemap and 1 sitemap(s)
○ https://blog.from-garage.com/sitemap.xml (index)
○ https://blog.from-garage.com/sitemap-0.xml
✨  Done in 0.48s.

rssについて

下記サイトを参考に実装

したんだけど... buildした後確認したら500エラーになる
内容確認したらどうやらbuild前後でメソッドが存在しなくなっているよう
調べると下記issueがあった

今のnextjsでも治ってないかも

こちらを参考にcontext.resのプロパティを確認した

const getMethods = (obj) => {
    let properties = new Set()
    let currentObj = obj
    do {
      Object.getOwnPropertyNames(currentObj).map(item => properties.add(item))
    } while ((currentObj = Object.getPrototypeOf(currentObj)))
    return properties
  }
  console.log(getMethods(context.res))


結果
yarn dev

Set(101) {
  'domain',
  '_events',
  '_eventsCount',
  '_maxListeners',
  'outputData',
  'outputSize',
  'writable',
  'destroyed',
  '_last',
  'chunkedEncoding',
  'shouldKeepAlive',
  'maxRequestsOnConnectionReached',
  '_defaultKeepAlive',
  'useChunkedEncodingByDefault',
  'sendDate',
  '_removedConnection',
  '_removedContLen',
  '_removedTE',
  '_contentLength',
  '_hasBody',
  '_trailer',
  'finished',
  '_headerSent',
  '_closed',
  'socket',
  '_header',
  '_keepAliveTimeout',
  '_onPendingData',
  'req',
  '_sent100',
  '_expect_continue',
  'statusCode',
  'constructor',
  '_finish',
  'statusMessage',
  'assignSocket',
  'detachSocket',
  'writeContinue',
  'writeProcessing',
  '_implicitHeader',
  'writeHead',
  'writeHeader',
  'writableFinished',
  'writableObjectMode',
  'writableLength',
  'writableHighWaterMark',
  'writableCorked',
  '_headers',
  'connection',
  '_headerNames',
  '_renderHeaders',
  'cork',
  'uncork',
  'setTimeout',
  'destroy',
  '_send',
  '_writeRaw',
  '_storeHeader',
  'setHeader',
  'getHeader',
  'getHeaderNames',
  'getRawHeaderNames',
  'getHeaders',
  'hasHeader',
  'removeHeader',
  'headersSent',
  'writableEnded',
  'writableNeedDrain',
  'write',
  'addTrailers',
  'end',
  '_flush',
  '_flushOutput',
  'flushHeaders',
  'pipe',
  'setMaxListeners',
  'getMaxListeners',
  'emit',
  'addListener',
  'on',
  'prependListener',
  'once',
  'prependOnceListener',
  'removeListener',
  'off',
  'removeAllListeners',
  'listeners',
  'rawListeners',
  'listenerCount',
  'eventNames',
  '__defineGetter__',
  '__defineSetter__',
  'hasOwnProperty',
  '__lookupGetter__',
  '__lookupSetter__',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toString',
  'valueOf',
  '__proto__',
  'toLocaleString'
}


yarn build && yarn start

Set(27) {
  'destination',
  '_res',
  'textBody',
  'constructor',
  'originalResponse',
  'sent',
  'statusCode',
  'statusMessage',
  'setHeader',
  'getHeaderValues',
  'hasHeader',
  'getHeader',
  'appendHeader',
  'body',
  'send',
  'redirect',
  '__defineGetter__',
  '__defineSetter__',
  'hasOwnProperty',
  '__lookupGetter__',
  '__lookupSetter__',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toString',
  'valueOf',
  '__proto__',
  'toLocaleString'
}

buildする前まであったメソッドwriteとかendがない...
代わりになりそうなbodyとかsendはtypescript時点ではないので、作れないね...

nextjsを10.0.0に下げると治ったという報告も先のissueにはあったけど、あまり下げたくないし
とりあえずgetStaticPropsで静的に生成するようにして、ブログ自体を定期的にビルドするようにしよう(だったら他のページも静的でいいのでは...要検討)

外部から取得できるようにする

rss用のページを用意しても、外部からどのurlがrss用なのか検知させられないと使用してもらえない。
調べると、linkタグにrss用のurlを記載することで認識してもらえるようになるとのこと。

next-seoを使う想定なので、next-seo.config.jsで下記内容を追加

export default {
	...,
+	additionalLinkTags: [
+	    {
+	      rel: 'alternate',
+	      type: 'application/rss+xml',
+	      title: "RSS2.0",
+	      href: 'https://blog.from-garage.com/rss/feed.xml',
+	    },
+	    {
+	      rel: 'alternate',
+	      type: 'application/atom+xml',
+	      title: "Atom",
+	      href: 'https://blog.from-garage.com/rss/atom.xml',
+	    },
+	  ],
	...
}

netlifyにpushして、preview状態でも良いので下記ツールサイトで確認

Image

うまく行った