- ベストアンサー
AJAXとSEO。同期通信とPHP送信の違い
- AJAX通信とSEOの関係について説明してください。また、CSVファイルの読み込みにおいて、異なる実装方法の影響についても教えてください。
- AJAX通信で検索ボタンを押したページ結果がクローラーに反映されるかどうかについて教えてください。それとも非同期通信の影響を受けるのでしょうか?
- AJAX通信における同期処理の意味と、同期処理とPHPでのPOST送信の違いについて教えてください。SEOを重視する場合、どちらの実装方法がよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
横やりですいません。何か変な回答があるので口を出します。 #1さんの回答が正解です。で、ちょっと追加。 ■AJAX通信すると、SEO的に不利か? 内部的なデータの読み込みは、SEO的には無関係です。 関係するのは、Ajaxによるページ遷移です。 クローラは<a>タグによる静的なURLリンクだけをクロールします。 Javascriptはいっさい解釈できません。単純なonClickだけでなく、関数呼び出しや外部リンクまで含んだJavascriptの構文を理解できるはずがありません(笑 Ajaxでも通常のフォーム遷移も同じです。 <a>タグからAjaxを呼び出す場合には、xxx.html#param=valueなどとして、hashChangeイベントを起こし、それを捕捉してAjax処理を行うようになっていれば、クロールされます。 ■質問1項目に違いはあるか? 上記の理由どおり、違いはありません。 ■質問2 Ajax通信で検索ボタンを押したページ結果は、クロールされるか 固定的に存在する検索リンクは対象になります。 (よくある質問などで、決め打ちの回答項目をAjax表示する場合など) ■質問3 Ajax通信の非同期 Ajaxの「Async」と、ここでいう「非同期」はニュアンスが違います。 Ajaxの「A」は、「ページ遷移に同期せずに」という意味です。 jQueryではデフォルトがAsync「非同期」のため、サーバからの戻りを待たずに処理が続行されます。 そのため、通信結果を処理するために、通信完了イベントを待つ必要があり、必ず「コールバック・メソッド」が必要です。 「同期」処理の場合は、サーバからの返答を待つ間、停止することになりますので、「コールバック」は不要で、リニアにメソッドを書けばいいです。(質問主さまの前のトピはこの状態) なので、「同期」「非同期」どちらで書いても、後処理が変化するだけでやれることは同じです。 一般的なフォーム送信や、リンクは、ページ遷移をともなう「同期」処理です。Ajaxとは利用法が全く異なります。 ちなみに、POST/GETというのは単なるクエリの形式で、一般的なフォーム送信にも、Ajaxにもあります。 (参考) AJAXサイトをクローラブルにする http://www.sem-r.com/seo/20100305195304.html
その他の回答 (2)
まず、前提としてですが。日本に限定した場合、検索エンジンに対するSEOというのは、イコール「Google」を意味します(厳密にはBiingなどありますが、日本ではごく少数派です)。Googleを対象として考えた場合で回答します。 ・AJAX通信すると、SEO的に不利なのでしょうか? いいえ、現在はそれはありません。現在、GoogleのクローラーであるGooglebotは、JavaScriptを解析するようになっており、Ajax通信およびクリックイベント処理に対応しています。つまり、ボタンやリンクをクリックするとAjax通信する、といった処理も、Googlebotによって解析され、Ajaxによるデータの取得結果までクロールされるようになっている、というわけです。したがって、フォーム送信であろうとAjaxであろうと同じようにクロールされていると見るべきです。 ・AJAX通信で検索ボタンを押したページ結果は、クローラーされることはあるのでしょうか? 上のように、現在はクロールされます。 ・AJAX通信の同期処理の意味が分かりません 実際にAjax処理のコードを書いたことがありますか? あれば、同期通信でアクセスするオプションを知っているはずです。これを使うと、通信を開始してから終了するまでの間、クライアント側では何も受け付けなくなります。同期処理とは、「ある処理が完全に終了してから次の処理を開始する」というやり方のことです。従って、通信を開始したら、それが終わってから次の処理をスる、つまり終わるまで次の処理は待ち続けることになります。 まぁ、通常は使うことはないと思いますが、例えばAjax通信を開始したら、ページにあるその他のものを一切変更してはならない、というようにしたい場合などには有効でしょう。
お礼
回答ありがとうございましたー
- notnot
- ベストアンサー率47% (4900/10359)
>■質問1 >・AJAX通信すると、SEO的に不利なのでしょうか? いいえ。 クローラーはJavaScriptを解析できませんので、Ajax通信してもしなくても同じです。有利不利はありません。 > 例えば、AJAXでCSVファイルを読み込む場合はどうなるでしょうか? もしかして、実装方法による? 下記例で、何か違いはあるでしょうか? ここの例でいう、同期・非同期とはどういう意味? 「ページ読み込み前」とは?「ページが全部解析されて表示される前」という意味ですか? >■質問2 >・AJAX通信で検索ボタンを押したページ結果は、クローラーされることはあるのでしょうか? サーバからデータを取得しているから反映される? 非同期だったら、反映されない? 同期だったらされる? いいえ。 ボタンなど、formでのget/post実行の結果はクロールされません。 formでなくJavaScript実行もされません。クローラーはJavaScriptを解析できません。 >■質問3 >・AJAX通信の同期処理の意味が分かりません(jQueryのasyncをfalseなど)。非同期通信がAJAXだと思うのですが、AJAX通信の同期処理というのは、何なのでしょうか? AjaxのAの意味は、「ブラウザのページ遷移と非同期(無関係に)」という意味です。 >(jQueryのasyncをfalseなど) これは、JavaScriptの制御がリクエスト結果が変えるまで待つのか、待たずに次に進むのかという意味で、AjaxのAのAsycの話とは全く無関係です。 > 例えば、「PHPでPOST送信」するのと、原理的には全く同じということになるのでしょうか?(PHPで実装するか、js実装するかの違いだけ?) 最終的に、SEOを重視する場合は(非同期の操作性を捨て)同期処理で実装した方が良い、ということになるのでしょうか? 意味不明です。PHPはサーバサイドなので、POST送信するのは不可能です。 (まあ、そのサーバーから別のサーバーへPOST送信するのは可能ですが) クライアントからPOST送信するのは、人間がボタンをクリックするか、JavaScriptの機能で送信するのかしかありません。 PHPにできるのは、POST受信後の処理です。
補足
回答ありがとうございました。 >ここの例でいう、同期・非同期とはどういう意味? リクエストの結果を待つかどうかという意味です >「ページ読み込み前」とは?「ページが全部解析されて表示される前」という意味ですか? 「ページが全部解析されて表示される前」という意味です。ボタンクリックではなく、ページ読込時にデフォルトで表示された状態ならクローラーはどう判断するのだろうか? と思い質問してみました >AjaxのAの意味は、「ブラウザのページ遷移と非同期(無関係に)」という意味です >これは、JavaScriptの制御がリクエスト結果が変えるまで待つのか、待たずに次に進むのかという意味で、AjaxのAのAsycの話とは全く無関係です 勘違いしていました。「リクエスト結果を待つ同期」が、なんで非同期Ajaxになるのだろうか? と疑問に思っていました > 意味不明です。PHPはサーバサイドなので、POST送信するのは不可能です 「POST送信」との比較の件ですが、「リクエスト結果を待つ同期」かどうかの観点で考えると、結果を得るまで処理できない、という意味では、同じと考えて良いのでしょうか? それとも、Ajaxの同期はまた何か違うのでしょうか?(クライアントから送信するか、サーバから送信するか、の違い以外で)
お礼
回答ありがとうございました。 参考になりましたー