Open3

Preactでnext/imageを使用すると、noscript内の画像が読み込まれてしまう

でぃーすけでぃーすけ

_app.tsx(_app.js,jsx)に書いていく。

_app.tsx
import { AppProps } from 'next/app'
import { options } from 'preact'

const CLIENT = typeof document !== 'undefined'
const old = options.vnode
options.vnode = (vnode) => {
  if (vnode.type === 'noscript' && CLIENT) {
    vnode.props.children = null
  }
  if (old) old(vnode)
}

function MyApp({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />
}

export default MyApp

JavaScriptありでの動作を確認する。

無事にnoscript内で画像が読み込まれないようになる。
(SSRで文字列としてレンダリングされ、ブラウザでHTMLとして読み込まれてしまう前に削除している模様)

JavaScriptなしでの動作を確認する。

noscript内の画像が読み込まれるようになる。

めでたし。