SEO としていますが、ここでの内容は URL に関しての話のみです。
以下は極論で、ここまで酷くはありませんが、検索エンジンは概ね次のように判断しています。
それぞれの、Paraselene での対策方法を考えます。
まず、Paraselene で問題となるのは1番です。Paraselene は以下のルールで URL を生成します。
lu.リクエストID.mo.遷移元ページ.on.遷移先ページ.na
遷移元と遷移先は毎回固定となりますが、リクエストIDはアクセスの度に別のものが発行されます。
このリクエストIDの付与 or 抑制を制御するために、Page クラスに isCheckRepeatSameRequest を持っています。
遷移先ページ(output が呼ばれる事になるページ)の isCheckRepeatSameRequest が true を返す場合に限り、その URL にリクエストIDが付与されます。
このメソッドの戻り値を true とすべきか false とすべきかは、以下のポリシーで考えると良いでしょう。
例えば、auからのアクセスに限りリクエストIDを付与したい場合は、以下のようにします。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
public abstract class SuperPage extends Page { RequestParameter.Mobile agent; /** * 出力情報の設定を行う。 * @param from 遷移元ページ。直接呼ばれている場合はnullです。 * @param req リクエスト内容。 * @return 出力ページ。 * nullを返すとthisをリターンしたのと同じ扱いにされます。 * @exception PageException 処理の継続が不可能(ブラウザには500を返す)。 */ public final Page output( Page from, RequestParameter req ) throws PageException { // 共通処理等あれば記述して下さい。 agent = req.judgMobile(); return outputMain( from, req ); } /** * 処理済みリクエストの再呼び出しを検出するか? * このページに遷移するためのURIを生成する際のリクエストID付与をコントロール * します。trueを返すとリクエストIDが付与されます。 * @return true:検出する、false:検出しない。 */ public boolean isCheckRepeatSameRequest() { // 各ページで、処理済みリクエストの再呼び出しを検出したい場合には // オーバーライドしてtrueを返して下さい。 return agent == RequestParameter.Mobile.AU; }
続いて2番についてです。
ページレイアウトが同じで内容が切り替わるようなページであれば、 CGI 等(同一 URL パス)にクエリでパラメータ指定する事で、表示を切り替えるのが通常の手法です。
これに対し、以下のようなサイトが存在します。
Paraselene では、このような URL 生成方法として、 Page の getAliasURI を使用します。
例えば通販サイトを構築するとし、商品ページ(Shop.java)の表示パラメータが商品IDだとします。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
/** * 別名URI設定。nullを返すと別名は設定しません。 * 最低4文字指定して下さい。 * ".na"で終えると完全一致となりますが、".na"で無ければ先頭一致となります。 * @return URI。 */ public String getAliasURI() { return "shop"; } /** * 出力情報の設定を行う。 * @param from 遷移元ページ。直接呼ばれている場合はnullです。 * @param req リクエスト内容。 * @return 出力ページ。 * nullを返すとthisをリターンしたのと同じ扱いにされます。 * @exception PageException 処理の継続が不可能(ブラウザには500を返す)。 */ public Page outputMain( Page from, RequestParameter req ) throws PageException { // 出力内容を設定します。 // 初期化したい場合は、init()をコールして下さい。 String id = pickAliasURI( req ); return this; }
このページを呼び出すためのリンクの生成は、以下のようになります。
1:
getUrlA().setAttribute( createAliasToURI( "href", PageType.SHOP_HTML, "123", null ) );
getUrlAが、商品ページへの<A>タグです。
createAliasToURIに"123"を渡す事により、shop123.na というURLを生成します。
getAliasURIなので、遷移元が存在しないURLとなります。遷移元のinputMainはコールされませんので注意して下さい。