タグ: SEO

  • React で構築した SPA のSEO対策一覧

    React で構築した SPA のSEO対策一覧

    今回WordPress Rest API とReactを用いてサイトを構築しました。
    その際に行ったSEO対策についてメモしておきます。

    URLに直接アクセスした時の対応

    React は基本的にSPAなので、サーバーが全てのリクエストをReact アプリのエントリーポイントにリダイレクトするように設定する必要があります。

    .htaccess に以下の記述をします。

    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^ /index.html [L]
    </IfModule>

    GA4 の設定

    パッケージを用いる場合は react-ga4 を使ってみましょう。

    私は Analytics.ts というファイルを作り、App.tsx に読み込ませました。

    import { useEffect } from 'react';
    import { useLocation } from 'react-router-dom';
    import ReactGA from 'react-ga4';
    
    const TRACKING_ID = 'G-yourcode'; // GoogleアナリティクスのトラッキングIDを設定
    
    ReactGA.initialize(TRACKING_ID);
    
    function Analytics() {
      const location = useLocation();
    
      useEffect(() => {
        // ページが変更されるたびにトラッキング情報を送信
        ReactGA.send({ hitType: 'pageview', page: location.pathname });
      }, [location]);
    
      return null; // UIに表示するものはない
    }
    
    export default Analytics;
    function App() {
      return (
        <RecoilRoot>
          <Router>
            <Header />
            <Analytics />
            <Routes>
              <Route path="/" element={<top />} />
            </Routes>
          </Router>
        </RecoilRoot>
      );
    }

    メタタグとOGタグの設定

    React-helmet だと現在の環境ではエラーの原因になります。react-helmet-asyncを使いましょう。

    React で動的にメタ情報を設定するには react-helmet-asyncや@tankstack/react-head を使います。

    以下はReact helmet-async を使った例です。

    import React from 'react';
    import ReactDOM from 'react-dom/client'
    import './styles/index.css';
    import App from './App';
    import reportWebVitals from './reportWebVitals';
    
    // helmet
    import { HelmetProvider } from 'react-helmet-async';
    
    const root = ReactDOM.createRoot(
      document.getElementById('root') as HTMLElement
    );
    root.render(
      <React.StrictMode>
        <HelmetProvider>
          <App />
        </HelmetProvider>
      </React.StrictMode>
    );
    
    // If you want to start measuring performance in your app, pass a function
    // to log results (for example: reportWebVitals(console.log))
    // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
    reportWebVitals();
    
    import { Helmet } from "react-helmet-async";
    
    function MyPage() {
      return (
        <div>
          <Helmet>
            <title>ページタイトル</title>
            <meta name="description" content="ページの説明文" />
            <meta property="og:title" content="ページタイトル" />
            <meta property="og:description" content="ページの説明文" />
            <meta property="og:image" content="画像URL" />
            <meta name="robots" content="index, follow" />
          </Helmet>
          <h1>コンテンツ</h1>
        </div>
      );
    }

    https://www.npmjs.com/package/react-helmet-async ←参考ドキュメント

    Sitemap, robots.txt の設定

    react-router-sitemap を使用して自動生成(node.js を使っている場合)
    または手動で追加します。

    手順を別記事にしました。

    構造化データのマークアップ

    JSON-LDを使う。

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebPage",
      "name": "ページタイトル",
      "description": "ページの説明文",
      "url": "https://example.com"
    }
    </script>

    SSR サーバーサイドレンダリングの導入

    Next.js などのフレームワークを使用して、SSRを実装する。

    動的レンダリング

    Rendertron, Prerender.io を使う。

    ↓ Google 検索セントラル公式のRedertron についての解説https://developers.google.com/search/blog/2019/01/dynamic-rendering-with-rendertron?hl=ja

    Rendertron の軽い理解

    Rendertron は、検索エンジンが JavaScript アプリケーションを正しくインデックスできるよう、静的 HTML を生成して提供するツールです。

    1. ユーザーリクエスト

    通常のユーザーリクエストは JavaScript アプリ(React アプリ)をそのまま提供します。

    2. クローラーリクエスト

    Googlebot や他のクローラーからのリクエストを検知し、Rendertron を使用して静的 HTML を生成して提供します。

    SSG 静的サイト生成

    コンテンツが更新されない場合は各ページのHTMLを事前に生成することができる。

    Gatsby などの生成ツールを使うのが一つの手です。

    もしくはreact 単体で動作させる場合は react-snap を使うという手があります。

  • React 単体のプロジェクトに sitemap を導入してSEOスコアを向上させる

    React 単体のプロジェクトに sitemap を導入してSEOスコアを向上させる

    React単体でsitemap を導入する方法について解説します。

    通常はバックエンドに他のフレームワークを使っている場合は、そちらでやるのが一般的だと思いますが、React をビルドしてシンプルに運用している場合は、自分で作るしかありません。

    やり方 手動

    public ディレクトリの下に sitemap.xml を作成します。

    そこにたとえば以下のように記述します。

    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
      <url>
        <loc>https://yourdomain.com/</loc>
        <priority>1.0</priority>
      </url>
      <url>
        <loc>https://yourdomain.com/company</loc>
        <priority>0.8</priority>
      </url>
      <url>
        <loc>https://yourdomain.com/office-treatment</loc>
        <priority>0.8</priority>
      </url>
      <!-- 他のルートをここに追加 -->
    </urlset>

    続いて robots.txt に以下のように記述します。

    Sitemap: https://your-page.com/sitemap.xml

    your-page のところはあなたのドメインに置き換えましょう。

  • WordPress にGoogle Tag Mnager を設定する方法

    WordPress にGoogle Tag Mnager を設定する方法

    Google Tag Mnagerこれは何?

    WordPress にGoogle Tagmanager (GTM)を設定する方法についてです。

    サードパーティー製のプラグインの使用やコードをいじる必要はありません!

    この記事は2024年9月現在の仕様です。

    Tag Mnager の設定手順

    WordPressの管理画面に入り、
    Google Site Kit プラグインを有効化しましょう。

    SiteKitを有効化すると、Goolgleアカウントの連携についての画面が開きますので、アカウントを設定して、指示に従って進めます。

    設定が完了すると、ダッシュボードが開きます。

    設定当日から1-2日はダッシュボードが空白だと思いますが、準備が完了するとデータが見られるようになります。

    管理画面 Site Kit のダッシュボード

    プラグインの有効化ができたら、左サイドメニューの Site Kitの下に [設定]の項目があるので、そちらをクリックします。

    Connected Services, Connect More Services, Admin Settings という3つのタブがあるので、
    [Connect More Services]を押します。

    ここで[Set up タグマネージャー]ボタンを押します。
    タグマネージャのアカウントを今まで設定したことがなければ[Create an account]を押しましょう。

    そうすると新しいタブで https://tagmanager.google.com にアクセスされるはずです。

    アカウント名、国を入力します。

    コンテナセットアップの項目は

    • コンテナ名 → 自分のサイトの名前
    • ターゲットプラットフォーム → Web

    を入力、選択しましょう。

    入力したら[Create]ボタンを押して、利用規約に同意します。

    設定が完了すると、 Install Google Tag Mnager のポップアップが表示されますが、今回はWordPressを使うので閉じて大丈夫です。

    ここまできたら、またWordPressの管理画面に戻ります。

    SiteKitの設定のページに移動すると、[Complete setup for Tag Mnager]のボタンが表示されているので押します。

    そしたら先ほど制作した、アカウント名とコンテナ名が選択できるので選択肢、[Complete setup]ボタンを押しましょう。

    これでWordPressに設定が完了しました。

    まとめ

    以上WordPressにTagMnagerを設定する方法でした。

    ここまでで設定が完了したのですが、タグマネージャーを使いこなすにはGoogleアナリティクスとの連携やボタン押下のトラッキングを設定する必要があります。

    それについては別記事で解説しているので見てみてください。

  • SEO WordPress の画像をWebPに対応させて検索パフォーマンスを上げる

    SEO WordPress の画像をWebPに対応させて検索パフォーマンスを上げる

    ❓ これは何

    まずはあなたのサイトの速度をチェックしてみましょう。

    Google公式のサイトの速度チェッカーを使ってみてください
    https://pagespeed.web.dev 

    自分のサイトのURLを入力すると、結果が出てくるはずです。

    今回はこれの改善の一つとして、画像系の最適化をするのに役たつPerformance Lab の使い方を紹介します。

    Performance Lab を導入する

    画像のファイル形式を Jpeg や PNG から WebP にするだけでも、
    ファイルサイズを削減できます。

    WebP形式はJpegよりも効率的な圧縮ができます。同じ画質でもWebPであればJpegよりも軽くなります。

    今回はWordPressに “Performance Lab” というプラグインを導入しましょう。

    プラグインの追加は左サイドバーの
    プラグイン / 新規プラグインを追加
    からPerformance Lab を検索してインストール、有効化すればOKです。

    プラグインを有効化したら、
    設定のタブにPerformanceの項目が追加されています。

    そちらを選択します。

    開くと次のような選択肢が出てくると思います。
    これらを有効化していきましょう!!

    設定方法

    Performance Lab には次の設定項目があります。
    それぞれの項目の説明をします。

    個人的には Performant Translations 以外は有効化していいかと思います。

    Image Placeholders

    WordPress 内のメディア ライブラリに新しくアップロードされた画像の主な色を決定して保存し、
    それを使用して、画像が読み込まれるまで表示される、フロントエンドにその色のプレースホルダー背景を作成します。

    Modern Image Formats

    WordPressで画像をアップロードする際にWebPやAVIF形式に対応させるものです。
    ホスティングサーバーがAVIFをサポートしている場合は自動的にAVIF形式の画像が作られ、サポートしていない場合はWebP形式になります。
    両方に対応している場合は、どちらの形式にするか「設定」>「メディア」で選べます。


    新しい画像をアップロードするときにだけ、これらの形式が適用されます
    既存の画像はRegenerate Thumbnailsプラグインも使えます。

    wp-cli でやると各自に出来るため、私はwp-cliで実行しました。

    wp media regenerate

    この記事でwp-cliの導入方法を解説しています。

    Performant Translations

    WordPress 6.5 以上では標準で組み込まれているので有効化する必要はないはずです!

    これは多言語対応用の機能です。

    Speculative Loading

    ユーザーの操作に基づいて特定のURLを動的に事前読み込み(プリフェッチ)や事前レンダリングできるようにします。

    デフォルトでは、ユーザーがリンクにマウスを重ねたときにWordPressのフロントエンドURLが事前レンダリングされるように設定されていますが、これは「設定」>「表示設定」の「Speculative Loading」セクションでカスタマイズできます。

    Embed Optimizer

    YouTube動画やTikTokなどの埋め込みコンテンツのパフォーマンスを最適化するために作られています。具体的には、埋め込みが画面に表示されたときにだけ読み込む「遅延読み込み」を行い、ページの読み込み中に他のリソースと競合しないようにすることで、パフォーマンスを向上させます。将来的には、さらに多くの最適化機能が追加される予定です。

    また、このプラグインは「Optimization Detective」プラグインのインストールと有効化を推奨します。このプラグインが有効な場合、訪問者の行動に基づいて、画面上部に表示される埋め込みが記録され、これらの埋め込みに対しては遅延読み込みが適用されません。遅延読み込みは読み込みに遅れを生じさせ、ユーザー体験やページのLCPスコアに悪影響を与える可能性があるためです。

    さらに、Optimization Detectiveが有効な場合、人気のある埋め込みコンテンツ(YouTube、Twitter、Vimeo、Spotify、VideoPressなど)に必要なネットワークリソースに対して事前接続リンクを追加することで、読み込み速度が向上します。

    このプラグインは設定やユーザーインターフェースがなく、インストールするだけで動作するように設計されています。

    Enhanced Responsive Images

    WordPressでのレスポンシブ画像機能を実験的に強化するものです。現在、次の機能を提供しています:

    1. テーマのレイアウト情報を使用して、sizes 属性の精度を向上させる。

    2. 遅延読み込み画像に sizes=”auto” を追加する新しいHTML仕様の実装。

    また、このプラグインは「Image Prioritizer」プラグインと連携します。このプラグインが有効になると、実際の訪問者のデータに基づいて、画面外(ページ下部)にある画像を学習し、それらの画像に対して loading=”lazy” を自動で追加します。そして、このプラグインはさらにその画像に sizes=”auto” を追加することで、遅延読み込みのパフォーマンスを向上させます。

    このプラグインには設定やユーザーインターフェースはなく、インストールするだけで自動的に動作するように設計されています。

    Embed Optimizer


    ページの表示速度を左右するLCP(Largest Contentful Paint)要素の画像読み込みを最適化します。LCP要素には、<img>タグの画像やCSSの背景画像が含まれます。テーマのレスポンシブデザインでは、異なる画面サイズ(ブレークポイント)で異なるLCP要素が存在する可能性があるため、各ブレークポイントごとにLCP画像を特定し、その画像の読み込みを優先するようにプリロードリンクが追加されます。

Home
About
Blog
Works
Contact