• 締切済み

ajaxで生成したコンテンツ

google botなどはjavascriptで生成したhtmlも収集しますよね? javascriptでタイムラグなしに生成したhtmlならば収集するのはわかるのですが、私のサイトはメインコンテンツがajaxで生成しています。 生成するのに1~3秒かかりますがそれでもgoogle botなどの検索エンジンはそれらも取得してくれるのでしょうか? よろしくお願いします。

  • suffre
  • お礼率76% (2013/2633)
  • SEO
  • 回答数5
  • ありがとう数10

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.5

回答4に訂正を入れます 読み込み時に同期的にJSから書いた分はきちんとインデックスされるようです 非同期の場合はわかりませんが、テストしてみるのはそう難しくないのではないかと思います

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.4

google botはある程度JSを実行できて、JSで動的に生成されるリンク先をクロールする程度の能力があることはよく知られていますが、 ajaxに限らずそもそも動的にページを書き換えた分の内容は拾ってくれないんじゃないかと思います。 botの詳細は公開されていませんし、日々進化しているので確かなことは分かりませんし、 仮に今はダメでも来月には取ってくれるようになってもおかしくありません。

suffre
質問者

お礼

ありがとうございます。 最近googleがAjaxクロールについての解説をされたみたいです。 そちらを参考にしてみようと思います。

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.3

またNo.1です。 言い足りませんでした。 たとえばOK Waveでされた質問が検索エンジンに引っかかるのはなぜか? それは静的ページが存在しているからです。 たとえばこの質問ですけど、 http://okwave.jp/qa/q8525242.html という、明らかに1ファイルで参照できます。だったら検索エンジンはなめてくれます。 DBに内容は入っているとは思いますが、表示ページはDBに書き込まれた直後にそこで作られています。 静的ページでなければ、質問や回答で別の質問内容を簡単に引用するのは大変です。 一方、「ビジネスキャリア」というクリックをすると最新から順番にリスト表示がされますが、さすがにここにリスト表示される形で検索エンジンでひきあてていないでしょう。

suffre
質問者

お礼

何度もご回答頂きましてありがとうございます。 トップページの場合はAjaxで取得しないでPHPでトップページを生成するときにPHP内部でDBから取得してhtmlを生成したほうが良さそうですね。 あと、最近googleがAjaxページに対するクロールについて解説している情報がたくさんありました。 それに動的ページが生成されたらそのコピーを静的ページとして作ってサイトマップに書き込む、というのも方法の一つみたいですね。

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.2

No.1です。回答へのお礼コメントに対してお答えします。 トップページを表示するとすぐにデータを引っ張ってくるから、PHPのソースコードには書かれているという意味ですね。 この動きは、ページのcreateイベントが走って、それがDBを読むプログラムを起動して表示ページを生成する、というものです。 ページのcreateイベントはいつ発生するか。 ブラウザからURLに対してオープンを発行するからですね。   ブラウザクリック → ページオープン → ページ生成ソフト起動 → 新ページ生成 → ブラウザ表示 検索エンジンのクローラはそういうオープンをかけるでしょうか。 もしそれをやったら、上の右矢印を4ステップまたなければなりません。 そして生成された画面の情報を読み取らなければなりません。 ひとつのサイトでそんなことはやっていられません。 読んでくれるわけはありませんよ。

suffre
質問者

お礼

ありがとうございます。 トップページを開いたらすぐにjavascriptが起動してajaxでDBに情報を取得してトップページに表示されます。 検索エンジンのクローラーはjavascriptで生成したhtmlを拾ってくれますが、ajaxで生成したhtmlは拾ってくれないのでしょうか? ajaxも一応javascriptですし、違いがイマイチわかりません。 >検索エンジンのクローラはそういうオープンをかけるでしょうか。 オープンをかけるというのは「オープンするためのjavascriptを実行する」という意味でしょうか?

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.1

動的コンテンツはキャッシュできません。 もちろん、PHPの中でechoやprintで出そうと書き込んである文字列はみえます。 が、DBからキーで引っ張って読み込んできたものを編集して表示するようなものが見えるわけがありません。 ちょっと考えてください。 たとえば図書館の蔵書検索システムで、キーに「漱石」とやって検索したときのリストは1ページに収まらず次頁前頁ボタンで切り替えます。 仮に10ページ分あるとして、8ページの3行目にある書名を検索エンジンのクローラがキャッシュすると思いますか。 そもそも「漱石」で検索するという何百万の1ぐらいしかないような事象を検索エンジンが発生させると想像しますか。

suffre
質問者

お礼

ありがとうございます。 少し説明不足だったのですみません。 トップページで検索フォームがあってDBから情報を引っ張ってくるというのは仰る通りでその部分が検索エンジンで見えないですよね。 ですが私のサイトのトップページを表示したらすぐにDBにアクセスしてランダムにコンテンツを表示するようになっているのです。 つまり検索フォームに何も入力しなくてもトップページを開いたらDBのデータを数十件表示するようにしています。 この表示をAjaxで呼び出しているのですが、トップページを表示してからAjaxでコンテンツを表示するまで2~3秒かかっているのが現状です。 しかも1日置きにDBから取得するコンテンツを変えています。 この教えてgooやOK WAVEでもトップページではDBからコンテンツを拾ってきて表示していますよね? このような構造でも検索エンジンはトップページのコンテンツを拾ってくれるのでしょうか?

関連するQ&A

  • ajaxを使ったページがSEOで不利にならない方法

    検索エンジンは、ajaxが使われたコンテンツを動的に取得できないためSEOで不利になってしまいます。その対策についてアドバイスをいただきたいです。 http://support.google.com/webmasters/bin/answer.py?hl=ja&answer=174992 では、ajaxが使われたページ限定でそのURLに#!を入れるか、<head>内に<meta name="fragment" content="!">を入れるだけで解決します、と書いてあります。 mein.htmlがあって、メインのコンテンツはcontents.phpにまとまっています。 contents.phpを検索エンジンによくみてもらいたいです。 urlに#!という文字を入れたくないので、後者の方を使おうと思っていますが、 mein.htmlの<head>に<meta name="fragment" content="!">を入れて、 contents.phpには入れない。↓のような感じでいいということですか? <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta name="fragment" content="!" />←「 /をつける」 <title></title> </head> <body> <p onclick="send()">コンテンツの取得</p> <div id="ajaxcontents"></div> <script type="text/javascript"> function send(){ xmlhttpreq = ~~~; xmlhttpreq.onreadystatechange = function (){ if (change.readyState == 4 && change.status == 200) { var con = xmlhttpreq.responseText; document.getElementById("ajaxcontents").innerHTML = con; } }; xmlhttpreq.open("GET", "contents.php?get=", true); xmlhttpreq.send(null); } </script> </body> </html>

    • ベストアンサー
    • AJAX
  • Ajaxでのページングについてなのですが...

    現在AjaxにてWebアプリを作成しております。 Webサービスからデータを取得して ブラウザに表示させることはできたのですが、 ページングで悩んでおります。 Webサービスで返ってくるデータは1ページ10件です。 検索フォームからある商品を検索して、返ってきたXMLタグにトータル件数、ページ数があります。 <TotalResults>249</TotalResults> //トータル件数 <TotalPages>25</TotalPages> //ページ数 データ取得の際にpageというパラメーターにページ番号を渡してやれば、 表示できることは分かるのですが、この先に進めません。(恥) Ajaxといいますか、javascriptでのページングはどのようにすればよろしいのでしょうか? 「Google」または、こちらの「教えて!goo」様のようなページングが理想なのですが、 何卒ご指導よろしくお願いいたします。 「追記」 また、上記の25ページ分のデータを一度に取得して表示させることはできるのでしょうか?

  • どこまでがAjaxなの?

    現在、Ajaxを勉強中の初心者です。 質問のタイトル通りなのですが、どこまでがAjaxなのかイマイチわかりません。 AjaxはJavaScript + XMLで非同期通信をする技術ですが 1.画像やプログラムファイルをサーバPC側に入れておいてクライアントPC側でラジオボタンの選択によって画像表示を変えるのはAjaxですか、それともただのJavaScriptですか? 2.サーバを使って以下のような入力可能文字カウンタを表示させるのはAjaxですか、それともただのJavaScriptですか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>文字のカウント</title> </head> <body> <form>   <textarea cols="46" rows="5" id="title1" name="title1" size="50"></textarea><br />   あと<span id="inputlength1">20</span>文字入力できます<br /> </form>   <script type="text/javascript"><!--     function lengthCounter (node, max, cut) {       max = max || Number (node.maxLength) || 20;       return function () {         var rest = max - node.value.length;           if (rest < 0) {             if (cut) {               alert ('20文字以内にしてください');               rest = max;               node.value = node.value.substring (0, max);             }           }           return rest;       };     }     function dispValue (node, cbFunc) {       return function () {         node.firstChild.nodeValue = cbFunc ();   };     }     setInterval (dispValue ( document.getElementById ('inputlength1'),     lengthCounter (document.getElementById ('title1'), 20, true)), 100);   // --></script> </body> </html> 3.「googleサジェストのインクリメンタル検索にはAjaxの技術が利用されている」←ここでのAjaxにはPHPも含まれますか? 私はPHPをAjaxの枠には入れないような気がします。正確にはPHPとAjaxでインクリメンタル検索機能がつくられていると思うのですが。 4.PHPのみでAjaxと同じ非同期通信ができればそれはAjaxと呼ぶのか? よろしくお願いします。

    • ベストアンサー
    • AJAX
  • Javascriptで生成されたページの情報取得方法

    Javascript初心者です。 ある画面で検索条件を指定して、送信ボタンを押下すると、検索結果をJavascriptで生成したページで表示するサイトがあります。結果はテーブルで表形式に表示されます。 この検索結果をJavascriptかVBscriptで取得したいと考えています。 HTML情報とテキスト情報両方とも取得できたらうれしいです。 document.all(1).innerHTML で取得しても、実際の画面に表示されているHTMLとは異なる情報しか取得できません。 生成後のHTML情報の取得方法をご教授ください。

  • ajaxを使用したページ移動における検索エンジン対策

    『 2ページ目に移動 → 』 等のリンクをajaxで処理してしまうと、検索エンジンはjascriptを解析しないので、検索エンジンに2ページ目が反映されませんよね。 回避策の基本的な概念としては、以下のソースでよろしいのでしょうか。 <script type="text/javascript"><!-- document.write("<a href='javascript:ajax_link(2);return false'>2ページ目に移動 →</a>"); --></script> <noscript> <a href="http://sample.php?page=2">2ページ目に移動 →</a> </noscript> ※1 検索エンジンに2ページ目が反映されることを目的としています。 ※2 ajaxリンク・通常リンク共に、移動後のページ表示処理は完成しているものとします。 ※3 ajax_linkのjavascriptは完成しているものとします。 大丈夫だとは思うのですが、心配なので質問させていただきました。 また、他の解決策を知っている方は教えてほしいです。 よろしくお願いします。

  • コンテンツアドバイザを設定すると「戻る」ボタンがおかしくなるのです。

    コンテンツアドバイザを設定すると「戻る」ボタンがおかしくなるのです。  コンテンツアドバイザを設定することにより、javascriptで機能している「戻る」ボタンの動作がおかしくなるのですが、解決策はありますでしょうか。  コンテンツアドバイザでは主要な検索サイト(GoogleやMSN、Yahooなど)を非承認としているだけで、当該サイトは一切規制対象としていません。戻るボタンとはブラウザの戻るではなく、webシステム上の、javascriptで処理されたボタンです。 webシステム上で一つ前の画面に戻るべきボタンが、コンテンツアドバイザを有効にすると、システム上のTOPメニューに戻ってしまうのです。 コンテンツアドバイザを無効にすると解決するので、悪さをしているのはそれのようなのですが。。。 どなたか知恵をお貸しいただけないでしょうか。

  • Ajax+JavaScriptにて外部データの取得について教えて下さい。

    お世話になります。 現在、JavaScriptとAjaxを勉強中なのですが、Ajaxを使ったデータ取得において、外部サーバデータ(例えばYahooホームページのソース)等を取得するには、PHPにて作成した簡易ブラウザが必要と記してありました。 つきましては、PHPでの簡易ブラウザのコードが記述されている書籍・サイトをご紹介頂けます様お願いします。 また、AjaxにてPrototype.jsなどを使っているのですが、具体的で実用的なAjaxの使い方をご教示頂けます様お願いします。 上記質問がカテ違いの場合はご指摘頂けます様お願いします。

    • ベストアンサー
    • AJAX
  • Google AJAX Feed API keyつ

    サイトに、ブログなどのRSSフィードを表示させるときに、 Google AJAX Feed APIのkeyを取得して表示させるのですが、 取得するためのグーグルのページが移動してしまって、 どこにいったのやら全く分かりません。 以前は、以下のアドレスから取得していたのですが。。。 ・http://code.google.com/apis/ajaxfeeds/signup.html どなたかお教え下さい><

  • PHPで動的に生成されるcsvの、追加部分のみJavascriptで読み込む方法をご教示下さい。

    PHPとJavaScriptでチャットのようなものを作成しようと思っています。 フォームに入力されsubmitされた文言は、PHPでcsvに書き加えられます。そのcsvをJavaScriptで数秒ごとに読み込み、追加された部分のみを非同期的に表示させるようにしたいです。 全体をリロードするのではなく、動的に生成されていくcsvの追加部分のみを表示させるようなカタチにしたいのですが、どこから手をつければ良いか検討がつきません。 PHPでcsvを生成する部分の作成は独力で可能ですので、JavaScript(Ajax)の部分に関してご教示いただければと思います。 何卒よろしくお願いいたします。

  • JavaScriptによる目次の自動生成について

    現在、私はiswebにサイトをもっており、そのページで目次が自動生成されるようにしたいと考えています。 phpなどは利用できないのでjavascriptで何とかしたく、googleで検索したところ次のようなページを見つけました。 "Table of Contents script" http://www.quirksmode.org/dom/toc.html この方法を試してみたいのですが、解説が英語であり、何よりも私がjavascriptについてほとんど分かっていないため、どうしてもうまくいきません。 とりあえず、このページで紹介されているスクリプトと、これを機能させるために必要だという "getElementsByTagNames" http://www.quirksmode.org/dom/getElementsByTagNames.html のスクリプトを一つにして"toc.js"を作り、目次を自動生成させたいページの<head>部分に <script type="text/javascript" src="toc.js"></script> と記述してみました。 以上のやり方が正しいのかどうかも自信がありませんが、肝腎の、目次の表示のさせ方(目次を表示させたい箇所に何をすればいいのか)がよく分かりません。 <div id="innertoc">や<span>が鍵らしいのですが、どうもよく分かりません。 紹介ページのソースも覗き視ましたが、どうも肝腎の箇所が見当たりません。 分からないことだらけで申し訳ありませんが、解決法をご存知の方はぜひお教えください。 よろしくお願いします。

専門家に質問してみよう