電子書籍の厳選無料作品が豊富!

■/(ルートディレクトリ)
├─□index.php
├─■actionディレクトリ(各ページ共通に使用するファイルを格納)
│  ├─□contents.php
│  ├─□header.php(contents.phpのheader部)
│  ├─□left.php(contents.phpのleft部)
│  ├─□right.php(contents.phpのright部)
│  ├─□footer.php(contents.phpのfooter部)
│  ├─□class-teisuu.php(定数を格納)
│  ├─□class-kannsuu.php(関数を格納)
│  └─□class-mysql.php(mysqlの接続とクエリ)
├─■contentsディレクトリ(各コンテンツの情報を格納)
│  ├─■0001
│  │  └─■imageディレクトリ(そのコンテンツの写真を格納)
│  │     └─□001~n.jpg
  --------------------------
  1266コンテンツまで繰り返し
  --------------------------
└─└─■1266
     └─■imageディレクトリ(そのコンテンツの写真を格納)
         └─□001~n.jpg

contents.php
------------
<?php
require_once("header.php");
require_once("right.php");
require_once("left.php");
require_once("footer.php");
require_once("class-teisuu.php");
require_once("class-kannsuu.php");
require_once("class-mysql.php");
?>

PHPとMYSQLで作った動的ページがあります。
index.phpで見たいコンテンツの絞込をやり、
0001~1266コンテンツのどれか1ページを見れるようにします。
そのときにindex.phpからcontents.phpに$_GET['n']='1211'というように
コンテンツを判別する値を渡すことで1211のページを開くことができます。
そして、ヤフーなどの検索から直接そのcontents.phpに来た時にちゃんと開くように
(isset($_GET['n'])) ? $pegenumber=$_GET['n'] : $pegenumber='0777';
のようにして$pegenumberが空にならないようにしています。

そこまではいいのですが、SEOを考えたときに問題があるのでは?と疑問に思いました。
せっかく情報が1266分もあるのに、そのやり方だと0777以外は検索されないですよね?

外部から来たものへ全てのコンテンツを検索対象にするためには、
contents.phpをactionディレクトリに置くのではなく、
contentsディレクトリの各ディレクトリの中に置きます。
そして、$_GET['n']をなくして、各contents.phpに$pegenumber='コンテンツ番号'
を直接指定したほうがそれぞれ検索されるようになり、ちゃんと中身も表示されるようになる。

この考えは正しいですか?


■/(ルートディレクトリ)
├─□index.php
├─■actionディレクトリ(各ページ共通に使用するファイルを格納)
│  ├─□header.php(各ページのheader部)
│  ├─□left.php(各ページのleft部)
│  ├─□right.php(各ページのright部)
│  ├─□footer.php(各ページのfooter部)
│  ├─□class-teisuu.php(定数を格納)
│  ├─□class-kannsuu.php(関数を格納)
│  └─□class-mysql.php(mysqlの接続とクエリ)
├─■contentsディレクトリ(各ページの情報を格納)
│  ├─■0001
│  │  ├─□contents.php($pegenumber='001'を格納)
│  │  └─■imageディレクトリ(そのページの写真を格納)
│  │     └─□001~n.jpg
  ----------------
  1266まで繰り返し
  ----------------
└─└─■1266
    ├─□contents.php($pegenumber='1266'を格納)
    └─■imageディレクトリ(そのページの写真を格納)
       └─□001~n.jpg

0777ディレクトリのcontents.php
------------------------------
<?php
$pegenumber='0777'
require_once("../../action/header.php");
require_once("../../action/right.php");
require_once("../../action/left.php");
require_once("../../action/footer.php");
require_once("../../action/class-teisuu.php");
require_once("../../action/class-kannsuu.php");
require_once("../../action/class-mysql.php");
?>

A 回答 (9件)

>検索エンジンはクエリストリングを判断できません。


できますよ。 ~/xxxx.php?str=AAA と ~/xxxx.php?str=BBB は別のページとしてちゃんとインデックスされます。ただし極端に長いクエリ、あるいはクエリに「id」その他あまり意味のないパラメータを含むと無視されますが。

ご参考までに
http://support.google.com/webmasters/bin/answer. …

▼URLの構造を改善しようのあたり
http://static.googleusercontent.com/external_con …

>rewriteruleでURLの形を変えて
そうだと思います。
    • good
    • 0
この回答へのお礼

>~/xxxx.php?str=AAA と ~/xxxx.php?str=BBB は別のページとしてちゃんとインデックスされます。
疑問が解決した気がします。有難うございます。
アマゾンを参考にしていたのですが、他のサイトを見てみるとクエリストリング付きのままで検索されていました。アマゾンは特殊な手法でやっているようですね。

JaneDueさんの意見は「ディレクトリの構造を後者にするのは管理の効率が悪くなるだけで、前者の構造でSEOも管理効率も充分で妥当」という意味も含んでいますか?

教えて頂いた参考サイトを見たことありますが、改めてみると理解の仕方が違うのでもう一度一通り読んでみます。

お礼日時:2012/06/22 00:24

>JaneDueさんの意見は~


内部構成は、どちらが良いというよりも管理のしやすさ・メンテナンス性重視で「自分自身で分かりやすい」のが一番だと思います。(個人的には actionディレクトリ にheaderやfooterがあるのは違和感がありますが)
URLの方は、クエリの1つ2つは気にする程ではないと考えますが、ご心配であれば念のためmodrewriteで静的にすればよいかと。

>SEOも管理効率も充分で妥当
・ご自身にとって管理しやすいならOK
・ちゃんとインデックスされるURLかどうか、という意味ではOK
・1266の全ページにリンクでたどれるマップがある(または検索エンジン指定のサイトマップ)があるならOK
でしょう。あとはコンテンツの内容自体です。
    • good
    • 0
この回答へのお礼

有難うございました。よく考えてみます。

お礼日時:2012/07/03 10:11

ごめんなさい、良く解りません。

    • good
    • 0
この回答へのお礼

すいません。めちゃくちゃな書き方しないで、きちんともう少し見やすく書くべきでした。
教えて頂いた考え方をまだ理解できていないので、ジェネレートについて勉強してみます。
多くのアドバイス有難うございました。

お礼日時:2012/06/22 00:08

>「ページの概念を持ったコンテンツ」の意味を理解できなかったですけど、


>並び替え・検索・ページ数の制御とかするページは、htmlでなくphpとDBを連携させたphpファイルで動的ページを作ります。ということですか?

逆に質問ですが、どうやてって並び替えや検索を行うつもりですか?

現在200画像あったとして、1ページに10枚表示できるとすと、
20ページの動的ページを遷移させる事が可能になります。

で、並び替えを行うと元々あったページのとは関係なく新たな並びで、
20ページの動的ページを遷移させる事が可能になります。

つまり、検索結果や並び替えの条件次第でどの画像が何ページに表示されるかが変わりますよね?

この回答への補足

かき忘れてしまったことがありますので追記します。
前者のディレクトリ構成の場合は、$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'だからそれを使って……こんな内容か」と検索されるのではないかと思っています。

補足日時:2012/06/21 18:56
    • good
    • 0
この回答へのお礼

例えばこんな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の書き方がずさんですが、自分が何を考えているのかは伝わると思います。

お礼日時:2012/06/21 18:41

>本当に効果があるのですか???



あるともいえないし、ないともいえない。
仮に今日効果があっても、明日効果がなくなっているかもしれない
むしろフィルタする技術の方が進んでいるから、マイナス効果の方が
強く出る可能性もある

結局のところSEOの効果は、やったことへの本人の満足感でしかない
あとは、ネットゴロが金儲けするためのせおせお詐欺じゃないの?
    • good
    • 0
この回答へのお礼

rewriteruleはSEOに効果があるかは不明なのですね。有難うございます。

お礼日時:2012/06/21 18:45

>ジェネレートするとはどんな意味ですか?



ジェネレートとは自の如く、生成(せいせい)する事です。

データや画像の情報からは頻繁に変わるような情報ではありませんし
静的ページ(html)を生成してしまえば良いと言うことです。

>並び替え、検索、ページ数の数に関わる動作

おや、設計が破綻しています。
並び替えや検索を行い、ページ数を制御するなら
最初からページの概念を持ったコンテンツ(画像)の考えは間違っています。

並び替えや検索の結果、ページが生成されるのですから.....
    • good
    • 0
この回答へのお礼

>静的ページ(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ファイルで動的ページを作ります。ということですか?
それか、ページ(=今までコンテンツと同義語でした)ごとに画像用のディレクトリを作るのがおかしい、ということですか?

お礼日時:2012/06/21 01:00

>この考えは正しいですか?


間違っています。検索エンジンは、どのようにしてページを生成するかという内部構造、ディレクトリ構成については感知しません。(できません)
また、クエリ付きURLを追いかけないというのも昔の話です。/?n=1234 でも /1234/ でも /1234.php でも大差ないでしょう。メンテナンス面から変更前の方がよいかと。

いづれにしても全ページを検索対象としたいのであれば、全ページへリンクした「サイトマップ」を作成すべきでは?
    • good
    • 0
この回答へのお礼

質問文をそのまま見るとディレクトリ構成によって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
にしているのではないかと思いました。
これは前者の考え方です。

でも、検索エンジンはクエリストリングを判断できないので違いますよね。
なにがなんだか分からなく混乱しています。

お礼日時:2012/06/20 22:06

動的ページにする意味はなんですか?



別スレの質問と合わせて考えると
単純に掲載内容に変更があった場合に静的ページをジェネレートするための仕組みにすれば
SEOとしても良くなるし、サーバの負荷も減るしスッキリもしますね
    • good
    • 0
この回答へのお礼

>動的ページにする意味はなんですか?
並び替え、検索、ページ数の数に関わる動作、効率のために同じファイルを動的に変更、アクセスするたびにおすすめ情報が変わる、とかをしたいためです。

>単純に掲載内容に変更があった場合に静的ページをジェネレートするための仕組みにすれば
SEOとしても良くなるし、サーバの負荷も減るしスッキリもしますね
説明しているサイトがみつからなかったんですが、ジェネレートするとはどんな意味ですか?

お礼日時:2012/06/20 20:48

SEO自体がどれほどのものかと甚だ疑問ですが


どうしてもというのならhttpd側のrewriteruleで静的ページに
見せかけるというのがよくトライされるやり方です
    • good
    • 0
この回答へのお礼

rewriterule=URLを変える
http:// www.ドメイン/ディレクトリ/ファイル名 ? クエリストリング
昔はクエリストリングを含むURLはSEOに不利でしたが、
現在は含んでも不利になりませんよね。

そのrewriteruleはクエリストリングを含むURLを不利にならない形に変えるために使うのであって、昔は重宝した対策でしたが、不利にならなくなった現在ではそれによるSEO効果はなく、ただ単に見栄えをよくするためだけに使われます。

とこんな感じで理解しています。本当に効果があるのですか???

お礼日時:2012/06/20 20:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!