ホームGatsby【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その7)GatsbyブログにGoogle検索ボックスをつけました。
2020年5月31日

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その7)GatsbyブログにGoogle検索ボックスをつけました。

google search

10月28日追記
Gatsbyブログについて、初noteを書きました。
【完全版】爆速GatsbyでWordPressちっくなブログを作る全手順

こんにちは、筋肉めがねです。

開設して5ヶ月経ったこのブログですが、少しずつ読者の方が増えてきております。そこで、読者の方がブログ内の必要な情報へアクセスしやすいように、サイドバーへ検索ボックスをつけました。ツールは、Googleのカスタム検索を使用しています。

検索ボックスを実装するにあたり、以下の記事がとても参考になりました。本当に感謝です。

Gatsby.jsにGoogleカスタム検索エンジンを設置する方法

また、タイトルの通り、この記事は「【連載】Gatsbyブログのデザインをワードプレスちっくにする手順」の、その7です。

これまでの記事はこちらです。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その1)記事のテンプレートを作り込む。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その2)「この記事書いた人」っていうComponent作成とサイドバーの一部をスマホで非表示、そして背景色を変更しました。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その3)ヘッダーとフッターを追加しました。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その4)twitterシェアボタンとtwitter cardを導入しました。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その5)Gatsbyブログにページネーションを実装しました。

【連載】Gatsbyブログのデザインをワードプレスちっくにする手順(その6)Gatsbyブログの好きな位置に目次をつける方法。

こちらが目次です。

Googleカスタム検索ボックスの作成

先ずは、以下のリンクからカスタム検索ボックスを作成します。

カスタム検索 新しい検索エンジン

create custom search

必要事項を入力し、「作成」ボタンを押せば、カスタム検索エンジンが作成されます。

search is created

Google AdSenseとの紐付け

カスタム検索エンジンを作成したら、Google AdSenseと紐付けましょう。
上の画像にて、「コントロールパネル」ボタンを押して、「広告」タブをクリックします。

Ad tab

「検索エンジンの収益化」をオンにすれば、同じgoogle accountで既に作成しているAdSenseのidと自動で関連付けされます。

AdSense related

検索ボックスのデザインを変更する

続いて、検索ボックスのデザインを変更します。「レイアウト」と「テーマ」を変更すれば、それで十分です。

layout of google search

theme of google search

設定が終わったら、「保存してコードを取得」ボタンを押しましょう。

コードが表示されたら、cx=以下のコードをコピーしておきましょう。

code of google search

これで、カスタム検索ボックスの設定は完了です。

検索ボックスをGatsbyブログへ実装する

Search componentを作成する

先ずはSearch componentを作成します。

src/components/Search/index.jsx
import React from "react"

const Search = () => {
  
  const cx = 'xxxxx:xxxxx'; //数字の羅列:アルファベットの羅列
  let gcse = document.createElement('script');
  gcse.type = 'text/javascript';
  gcse.async = true;
  gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
  let s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(gcse, s);
  return (
    <div>
      <div className="gcse-search"></div>
    </div>
  )
}

export default Search

cxには、先ほど取得したコードを貼り付けます。

フックの設定

続いて、src直下にhookフォルダを作り、以下を記述します。

フックとは何ぞや、という事ですが、こちらの記事にとても分かりやすく書かれております。

5分でわかるReact Hooks

src/hook/ClientOnly.js
import React, { useState, useEffect } from 'react'

function ClientOnly({ children, ...delegated }) {
  const [hasMounted, setHasMounted] = useState(false);

  useEffect(() => {
    setHasMounted(true);
  }, []);
  if (!hasMounted) {
    return null;
  }
  return (
    <div {...delegated}>
      {children}
    </div>
  );
}

export default ClientOnly

Sidebarに検索ボックスを実装する

最後に、Sidebar componentに検索ボックスを実装します。

src/components/Sidebar/index.jsx
class Sidebar extends React.Component {

  render() {
    const { location } = this.props
    const {
      author,
      subtitle,
      copyright,
      menu,
    } = this.props.data.site.siteMetadata
    const isHomePage = get(location, 'pathname', '/') === '/'

    ...

    return (
      <div className="sidebar">
        <div className="sidebar__inner">
          <div className="sidebar__author">{authorBlock}</div>
          <div>
            <Menu data={menu} />
            
            {/* following is google search box */}
            <ClientOnly>
              <Search />
            </ClientOnly>

            <Links data={author} />
            
            <Adsense />
          </div>
        </div>
        ...

<Search /><ClientOnly>で囲みます。

これで、検索ボックスがサイドバーに表示されました。

search box in sidebar

まとめ

これで、サイト内の気になる情報へサクッとアクセスできます。

シェアする