77919
# 現状

Google Search Console のカバレッジの項に、「robots.txt
によりブロックされましたが、インデックスに登録しました」という警告が表示されました。

[![画像の説明をここに入力](https://i.stack.imgur.com/jGkZe.jpg)](https://i.stack.imgur.com/jGkZe.jpg)

当画面下部の詳細を押し遷移したページ例の項に、下記のように該当しているページのURLと思われるものが表示されていました。

```

    https://example.com/bar/baz.php
    
```

この `baz.php` は、呼び出し元のphpファイルにデータを吐き出したHTMLを挿入するファイルです。  
使途は、記事の概要の一覧を表示するページで「記事をもっと表示する」ボタンを押して、さらに記事の概要を表示する、という機能です。  
「記事をもっと表示する」ボタンを押下時に `baz.php` を実行します。  
下記のような内容になっています。

```

    // 省略
    white($data = mysql_fetch_array($rst)) {
      $output = '
        <li>'.$data["name"]'</li>
      '
    // 省略
    }
    
```

呼び出し元

```

    <? /* 省略 */ ?>
    
    <script>
    function readmore() {
      $.get("<? echo $articleurl; ?>bar/baz.php",
        { st: st, article: <? echo $article["articleid"] ?> },
        function(article) {
          $("#articles").append(article);
        }
    }
    </script>
    
    </body>
    
```

また、警告文にもありますが、`robots.txt` で /bar 以下のディレクトリはブロックするように記述しています。

```

    User-agent: *
    Disallow: /bar/
    
    Sitemap : https://example.com/sitemap.xml
    
```

# 目標

  * `https://example.com/bar/baz.php` をインデックスしないようにしたい
  * Google Search Console で表示される警告「robots.txt によりブロックされましたが、インデックスに登録しました」が表示されないようにしたい

# 調べた解決策

ググると、noindexを追加するか、認証を導入する方法を見つけられました。

  * [「robots.txtによりブロックされましたが、インデックスに登録しました」の原因と対処法 | 株式会社クリエル creal](https://www.creal.co.jp/column/1730/)
  * [「robots.txt によりブロックされましたが、インデックスに登録しました」とSearch Consoleに表示された時の対処方法 - アイオイクスの社員ブログ](https://clm.seojapan.com/946#index_id3)

ただ、警告対象のファイルは、ページに挿入するファイルであるため、上記解決策を実施するにあたり、下記の問題点が考えられます。

  * 呼び出し元のページが `noindex` になる
  * headタグの外でmetaタグを書いても有効にならない可能性がある
  * headタグの外でmetaタグを書いて有効になっても、SEOに悪影響がでる可能性がある
  * 呼び出すたびに認証を求められる
  * 呼び出し元のページにアクセスした際に認証を求められる
CC BY-SA 4.0
2021-07-02T01:40:10.577
77915
2021-07-02T02:34:57.663
2021-07-02T02:20:30.240
32275
32275
question
php google-search
DOMを挿入するPHPファイルに対して警告された「robots.txt によりブロックされましたが、インデックスに登録しました」を解決したい
noindexをつけたり、robotで排除するのではなく  
HTMLを返さずに、JSONを返してしまってはいかがですか？

HTMLを生成しているファイルで

```

    header("Content-Type: application/json; charset=utf-8");
    echo json_encode($output);
    
```

とJSONに書き換えて出力します。

また呼び出し先では、`$.get`ではなく`$.getJSON`に書き換えればJSONファイルとして取得できます。

そもそもHTMLの形式ではなくてJSON配列としてデータだけを渡してJavascriptでDOMの生成をしてもいいとは思いますが、それは改修の手間等を考えてみたほうがいいかも、呼び出し元が結構あるとコストの面で現実的ではないかもしれないです。
CC BY-SA 4.0
2021-07-02T02:34:57.663
77919
2021-07-02T02:34:57.663
22665
77915
answer