- ベストアンサー
動的ページで全ての情報を検索対象にする正しいやり方
- 動的ページで全ての情報を検索対象にする正しいやり方は、contents.phpをactionディレクトリではなく、各contentsディレクトリの中に置くことです。
- そして、$_GET['n']をなくし、各contents.phpに直接$pegenumberを指定します。
- これにより、検索エンジンからのアクセスでも正しくコンテンツが表示されるようになります。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>検索エンジンはクエリストリングを判断できません。 できますよ。 ~/xxxx.php?str=AAA と ~/xxxx.php?str=BBB は別のページとしてちゃんとインデックスされます。ただし極端に長いクエリ、あるいはクエリに「id」その他あまり意味のないパラメータを含むと無視されますが。 ご参考までに http://support.google.com/webmasters/bin/answer.py?hl=ja&answer=76329 ▼URLの構造を改善しようのあたり http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/ja//webmasters/docs/search-engine-optimization-starter-guide-ja.pdf >rewriteruleでURLの形を変えて そうだと思います。
その他の回答 (8)
- JaneDue
- ベストアンサー率75% (263/350)
>JaneDueさんの意見は~ 内部構成は、どちらが良いというよりも管理のしやすさ・メンテナンス性重視で「自分自身で分かりやすい」のが一番だと思います。(個人的には actionディレクトリ にheaderやfooterがあるのは違和感がありますが) URLの方は、クエリの1つ2つは気にする程ではないと考えますが、ご心配であれば念のためmodrewriteで静的にすればよいかと。 >SEOも管理効率も充分で妥当 ・ご自身にとって管理しやすいならOK ・ちゃんとインデックスされるURLかどうか、という意味ではOK ・1266の全ページにリンクでたどれるマップがある(または検索エンジン指定のサイトマップ)があるならOK でしょう。あとはコンテンツの内容自体です。
お礼
有難うございました。よく考えてみます。
- singlecat
- ベストアンサー率33% (139/418)
ごめんなさい、良く解りません。
お礼
すいません。めちゃくちゃな書き方しないで、きちんともう少し見やすく書くべきでした。 教えて頂いた考え方をまだ理解できていないので、ジェネレートについて勉強してみます。 多くのアドバイス有難うございました。
- singlecat
- ベストアンサー率33% (139/418)
>「ページの概念を持ったコンテンツ」の意味を理解できなかったですけど、 >並び替え・検索・ページ数の制御とかするページは、htmlでなくphpとDBを連携させたphpファイルで動的ページを作ります。ということですか? 逆に質問ですが、どうやてって並び替えや検索を行うつもりですか? 現在200画像あったとして、1ページに10枚表示できるとすと、 20ページの動的ページを遷移させる事が可能になります。 で、並び替えを行うと元々あったページのとは関係なく新たな並びで、 20ページの動的ページを遷移させる事が可能になります。 つまり、検索結果や並び替えの条件次第でどの画像が何ページに表示されるかが変わりますよね?
お礼
例えばこんなDBテーブルがあります。 id / title / search1 / search2 / search3 1028 / タイトルです。 / 3 / 1 / 2 1029 / たいとる / 2 / 2 / 3 1030 / タイトル1030 / 1 / 2 / 1 mysql_connectとmysql_select_dbで接続し、 /*ページング*/ $s1 = "select count(*) as cnt from DBテーブル where search1=".$_GET['search1']." and search2=".$_GET['search2']." and search3=".$_GET['search3']; $q1 = mysql_query($s1,$xxx); $p = ceil($allrows['CNT']/20); for($i=1; $i<=$p; $i++){ $page = $page."<span><a href="$_SERVER['PHP_SELF']?page=$i">$i</a></span>"; } /*検索*/ if(!isset($_GET['page'])){ $start = 0; }else{ $start = ($_GET['page']-1)*20+1; } $sort=$_GET['sort']; $s2 = "select * from DBテーブル where search1=".$_GET['search1']." and search2=".$_GET['search2']." and search3=".$_GET['search3']."ORDER BY $sort LIMIT $start,$start+20"; $q2 = mysql_query($s2,$xxx); for($i=0; $i<$q2; $i++){ $r = mysql_fetch_array($q1) $id = $r['id']; $title = $r['title']; $h = ' <div> <h2>$title</h2> <p><img src="contents/$id/image/sumuneiru.jpg" /></p> <p>$id</p> <p><a href="contents/$id/contents.php">詳細ページへ</a></p> </div> '.PHP_EOL; } <form action="<?=$_SERVER['PHP_SELF'];?>" method="GET"> <select name="search1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="search2"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="search3"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="sort"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <input type="submit" name="submit" value="実行" /> </form> <div><?=$page;?></div> <div><?=$h;?></div> phpの書き方がずさんですが、自分が何を考えているのかは伝わると思います。
補足
かき忘れてしまったことがありますので追記します。 前者のディレクトリ構成の場合は、$hのところの<p><a href="contents/$id/contents.php">詳細ページへ</a></p>を<p><a href="contents/$id/contents.php?id=$id">詳細ページへ</a></p>にします。でも検索エンジンはクエリストリングは判断できないので、contents.phpに検索エンジンが見たとき「$_GET['id']は空だ……何も表示されない。内容がないページ」クエリストリングを付けずにやってcontents.phpで$id='0777'などとつけてやってます。そうすればそれぞれのディレクトリにあるcontents.phpに検索エンジンが来たとき「$id='0777'だからそれを使って……こんな内容か」と検索されるのではないかと思っています。
- yambejp
- ベストアンサー率51% (3827/7415)
>本当に効果があるのですか??? あるともいえないし、ないともいえない。 仮に今日効果があっても、明日効果がなくなっているかもしれない むしろフィルタする技術の方が進んでいるから、マイナス効果の方が 強く出る可能性もある 結局のところSEOの効果は、やったことへの本人の満足感でしかない あとは、ネットゴロが金儲けするためのせおせお詐欺じゃないの?
お礼
rewriteruleはSEOに効果があるかは不明なのですね。有難うございます。
- singlecat
- ベストアンサー率33% (139/418)
>ジェネレートするとはどんな意味ですか? ジェネレートとは自の如く、生成(せいせい)する事です。 データや画像の情報からは頻繁に変わるような情報ではありませんし 静的ページ(html)を生成してしまえば良いと言うことです。 >並び替え、検索、ページ数の数に関わる動作 おや、設計が破綻しています。 並び替えや検索を行い、ページ数を制御するなら 最初からページの概念を持ったコンテンツ(画像)の考えは間違っています。 並び替えや検索の結果、ページが生成されるのですから.....
お礼
>静的ページ(html)を生成してしまえば良いと言うことです。 質問集:http://c.oshiete.goo.ne.jp/goo_search.php3 ↓ その中の1つの質問:http://oshiete.goo.ne.jp/qa/7543448.html 7543448.htmlと拡張子がhtmlなのは、.htaccessで拡張子htmlのままPHPを実行していて、 ファイル1つだけで動的に中身だけを変えていると思っていました。 そうでなくて、phpを含まないhtmlファイルを質問の数だけ作っているということですか? >並び替えや検索を行い、ページ数を制御するなら >最初からページの概念を持ったコンテンツ(画像)の考えは間違っています。 「ページの概念を持ったコンテンツ」の意味を理解できなかったですけど、 並び替え・検索・ページ数の制御とかするページは、htmlでなくphpとDBを連携させたphpファイルで動的ページを作ります。ということですか? それか、ページ(=今までコンテンツと同義語でした)ごとに画像用のディレクトリを作るのがおかしい、ということですか?
- JaneDue
- ベストアンサー率75% (263/350)
>この考えは正しいですか? 間違っています。検索エンジンは、どのようにしてページを生成するかという内部構造、ディレクトリ構成については感知しません。(できません) また、クエリ付きURLを追いかけないというのも昔の話です。/?n=1234 でも /1234/ でも /1234.php でも大差ないでしょう。メンテナンス面から変更前の方がよいかと。 いづれにしても全ページを検索対象としたいのであれば、全ページへリンクした「サイトマップ」を作成すべきでは?
お礼
質問文をそのまま見るとディレクトリ構成によってSEOが変わる、 のように読めてしまうかもしれないですけど、 前者でそれぞれのコンテンツを開くには、 -------------------------- index.php -------------------------- <a href="http:// www.ドメイン/actionディレクトリ/contents.php?a='0001'">0001へ</a> <a href="http:// www.ドメイン/actionディレクトリ/contents.php?a='0002'">0002へ</a> <a href="http:// www.ドメイン/actionディレクトリ/contents.php?a='0003'">0003へ</a> -------------------------- とクエリストリングで判断させて各コンテンツを開きます。 検索エンジンはクエリストリングを判断できません。 http:// www.ドメイン/actionディレクトリ/contents.phpとして判断します。 もしも$_GET['a']が空の状態でcontents.phpを開けば何も情報のないコンテンツが開きます。 コンテンツが何もないので、検索エンジンも情報がないものとして扱います。 それを避けるために、contents.phpで (isset($_GET['n'])) ? $pegenumber=$_GET['n'] : $pegenumber='0777'; として空の状態にならないようにしています。 この場合検索エンジンは0777のコンテンツしか検索しません。 後者の場合は、 -------------------------- index.php -------------------------- <a href="http:// www.ドメイン/contentsディレクトリ/0001/contents.php">0001へ</a> <a href="http:// www.ドメイン/contentsディレクトリ/0002/contents.php">0002へ</a> <a href="http:// www.ドメイン/contentsディレクトリ/0003/contents.php">0003へ</a> -------------------------- 検索エンジンはそれぞれのコンテンツを検索します。 そして各contents.phpには、$pegenumber='コンテンツ番号'があるので、 それによって検索エンジンは各コンテンツを検索します。 と予想していました。 「置かれた場所で咲きなさい」で検索すると、その本の紹介コンテンツが1番に来て直に開きます。そのURLを見てみると http://www.amazon.co.jp/置かれた場所で咲きなさい-渡辺-和子/dp/4344021746 のようになっています。 後者の場合に当てはめると、 http://www.amazon.co.jp/置かれた場所で咲きなさい-渡辺-和子ディレクトリ/dpディレクトリ/4344021746.php になります。これではとても効率が悪くよくないです。 もしかしたら、 http://www.amazon.co.jp/index.php? a='置かれた場所で咲きなさい-渡辺-和子ディレクトリ'&b='dp'&c='4344021746' rewriteruleでURLの形を変えて http://www.amazon.co.jp/置かれた場所で咲きなさい-渡辺-和子/dp/4344021746 にしているのではないかと思いました。 これは前者の考え方です。 でも、検索エンジンはクエリストリングを判断できないので違いますよね。 なにがなんだか分からなく混乱しています。
- singlecat
- ベストアンサー率33% (139/418)
動的ページにする意味はなんですか? 別スレの質問と合わせて考えると 単純に掲載内容に変更があった場合に静的ページをジェネレートするための仕組みにすれば SEOとしても良くなるし、サーバの負荷も減るしスッキリもしますね
お礼
>動的ページにする意味はなんですか? 並び替え、検索、ページ数の数に関わる動作、効率のために同じファイルを動的に変更、アクセスするたびにおすすめ情報が変わる、とかをしたいためです。 >単純に掲載内容に変更があった場合に静的ページをジェネレートするための仕組みにすれば SEOとしても良くなるし、サーバの負荷も減るしスッキリもしますね 説明しているサイトがみつからなかったんですが、ジェネレートするとはどんな意味ですか?
- yambejp
- ベストアンサー率51% (3827/7415)
SEO自体がどれほどのものかと甚だ疑問ですが どうしてもというのならhttpd側のrewriteruleで静的ページに 見せかけるというのがよくトライされるやり方です
お礼
rewriterule=URLを変える http:// www.ドメイン/ディレクトリ/ファイル名 ? クエリストリング 昔はクエリストリングを含むURLはSEOに不利でしたが、 現在は含んでも不利になりませんよね。 そのrewriteruleはクエリストリングを含むURLを不利にならない形に変えるために使うのであって、昔は重宝した対策でしたが、不利にならなくなった現在ではそれによるSEO効果はなく、ただ単に見栄えをよくするためだけに使われます。 とこんな感じで理解しています。本当に効果があるのですか???
お礼
>~/xxxx.php?str=AAA と ~/xxxx.php?str=BBB は別のページとしてちゃんとインデックスされます。 疑問が解決した気がします。有難うございます。 アマゾンを参考にしていたのですが、他のサイトを見てみるとクエリストリング付きのままで検索されていました。アマゾンは特殊な手法でやっているようですね。 JaneDueさんの意見は「ディレクトリの構造を後者にするのは管理の効率が悪くなるだけで、前者の構造でSEOも管理効率も充分で妥当」という意味も含んでいますか? 教えて頂いた参考サイトを見たことありますが、改めてみると理解の仕方が違うのでもう一度一通り読んでみます。