#seo

Question

If I have 3 websites, Is there a problem to cross link websites?

Answer by Google Webmaster Central

</param></param></param></embed>

要はサイト間の”関連性”が一番大事です。 関連性があればOKで、なければ無意味って感じです。

「海外SEO情報ブログ」からの訳文

サイト同士に何らかの関連性があるかが問題だね。

1つがドライクリーニングのサイト、もう1つが古美術のサイト、もう1つが携帯レビューのサイトだとしたら、ページの下にリンクがあるのは奇妙だ。 漫画のサイトを見ていたのに、ページの最後に行ったら自動車保険やコーヒーテーブルのサイトへのリンクが突然出てくるのは、何にも関係がない。

「どのくらい関連性があるのか」をまず先に考えてほしい。

3つのサイトで相互リンクしてもたいした数じゃないから、大きな問題にはならないと思う。 でも、30サイト、300サイトでクロスリンクしていたら、「何の関係があるんだろうか」と一般のユーザーも競合も不思議に思うだろう。

紳士洋服・婦人洋服・子供洋服がクロスリンクしあうのは、関連があるから完全に理由がある。 同じ企業傘下にある会社同士も、正当な理由があるから問題があるとは思えない。 少ない数だったらまだいいかもしれないけど、サイトの規模が大きくなるに連れてページの下に大量のリンクが出現するのは良くないね。

#javascript

JavaをやってからJavascriptを触ったので、 Javascript変数にブロックレベルのスコープがないことにビックリしました。 if文ブロックか、forループブロックか関係なく、 function内に定義された変数は全て同じスコープ:functionのスコープになります。

例えば

function test(o) {
    var i = 0;                      // i is defined throughout function
    if (typeof o == "object") {
        var j = 0;                  // j is defined everywhere, not just block
        for(var k=0; k < 10; k++) { // k is defined everywhere, not just loop
            document.write(k);
        }
        document.write(k);          // k is still defined: prints 10
    }
    document.write(j);              // j is defined, but may not be initialized
}

変数kとjはそれぞれif文のブロック、forループのブロック内に定義されたが、 実はfunctionのスコープとなりfunction内ならどこでも参照できます。

これをしっかり理解しないと以下のようなミスが起こしやすいです。

var scope = "global";
function test() {
    alert(scope);         // Displays "undefined", not "global"
    var scope = "local";  // Variable initialized here, but defined everywhere
    alert(scope);         // Displays "local"
}

test();

一番目のalertは”global”だと思ったらこの記事を読む価値はあるでしょう。 一番目のalertは”undefined”を表示します。 なぜならさっき言ったように変数のスコープはfunction内に跨るのです。 varで宣言する位置、順番と関係ありません。

ここではfunction内で同じ名前でscopeという変数が宣言され、 “global”の値を持つグローバル変数は上書きされました。 そして一番目のalert時のscopeは初期化されていないため、undefinedとなってしまいます。

上記のコードを書き換えると以下と同じです。

function test() {
    var scope;       // Local variable is declared at the start of the function
    alert(scope);    // It exists here, but still has "undefined" value
    scope = "local"; // Now we initialize it and give it a value
    alert(scope);    // And here it has a value
}

誤解を招かないように変数の宣言はfunctionの先頭に置くのが大事ですね。

#ruby

Rubyでは変数の型を宣言しないです。 そのため、オブジェクトは実際に何型かがわからない時が多いです。 オブジェクトのクラスを調べるには以下の三つの方法があります。

class

オブジェクトのクラスを調べられます。 返された結果はクラス名です。 例:

"文字列です。".class

出力結果:string

kind_of?

オブジェクトは特定のクラス又はそのサブクラスのインスタンスかどうかを調べられます。 モジュールに関しても、調べられます。 返された結果はtrue又はflaseです。 例:

"文字列です。".kind_of?(String)

出力結果:true

ちなみに、is_a?メソッドもあります。kind_of?の使い方と同じです。

instance_of?

オブジェクトは特定のクラスのインスタンスかどうかを調べられます。 kind_of?との区別は、サブクラスを含まらないことです。 つまり、kind_of?はサブクラスまで調べられますが、 instance_of?は特定のクラスだけ、サブクラスを調べられないです。 返された結果はtrue又はflaseです。 例:

"文字列です。".instance_of?(String)

出力結果:true

#javascript

window.open()で新規開いた小窓ウィンドウで親ウィンドウのdocumentを取得するには 下記のプロパティを使います。

window.opener.document

これで親ウィンドウの値を取得するだけではなく、 値を編集することもできます。

例えば下記のコードは親ウィンドwのフォーム内のテキストをAAAに変更します。 新規開いたページに記述します。

window.opener.document.FORM1.TEXT1.value = "AAA";

参考サイト

とほほのJavascriptレファレンス:ウィンドウオブジェクト

#seo

HTMLのheadセクションにはタイトルといろんなMetaタグが記述されているが、 その記述順番に気になったことはありますか? そしてそれがどのような影響があるかぐぐってみました。

headセクション内のタグの記述順に特に決まりはないが、”charset”で示す文字コード指定のタグは、titleタグやmeta description/keywordsタグよりも先に記述することが推奨される。の中身がまさに、文字で書かれ、文字コード判定が必要だからです。

そういえばWordpressを使ってからこの辺全然気にしてないので 早速自分のサイトのheadセクションを確認しました。 下記のようなものです。

<!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" dir="ltr" lang="en-US">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Kinopyo Blog</title>

なるほど、、metaタグでcharsetがUTF-8になってるから titleのところのシングルクォーテーションがUTF-8の#039になったわけですね。 考えてみれば当たり前のことだけれど。。。

参考サイト

MetaタグとTitleタグの位置関係について ブラックなSEOで人生を失った悲惨な男の物語 など10記事(海外&国内SEO情報)

#rails

RAILS_ENV

現在動作している環境。開発終わって、テスト環境でテストしたい場合、この変数を修正すればOKです。 ‘development’,’test’または’production’があります。  

RAILS_ROOT

ルートフォルダのパスです。

#rails

Railsのvalidateチェックはすばらしいです。 使いかた非常便利だし、機能が強いです。 それでは、一緒に見てみましょう。

validate

validateを使って、カスタマイズのvadidationチェックを定義できます。 例:

def validate
  errors.add(:content, "を入力してください") if content =~ /^(ここに感想を書いてください。|ここに感想を書いてください)$/
end

validates_acceptance_of

チェックボックスがチェックされたかを確認。 チェックされていない場合、エラーが起こリます。

validates_confirmation_of

再入力を確認します。 詳細の使い方は、「validates_confirmation_of の使い方」を参照してください。

validates_exclusion_of

指定した値に含まれていないかをチェックします。 例:

validates_exclusion_of :sex,:in => ['female','male']

validates_inclusion_of

指定した値に含まれているかをチェックします。 validates_exclusion_ofの逆です。 例:

validates_inclusion_of:sex, :in => ['female','male']

validates_format_of

正規表現を使って、値をチェックします。 例:

validates_format_of :code,:with => /^[0-9A-Za-z]/, :message =>"は半角英数字で入力してください。"

validates_length_of

値の長さをチェックします。 例:

validates_length_of :name, :maximum => 30

validates_numericality_of

値は数字かどうかをチェックします。数字ではない場合、エラーを表示します。 例:

validates_numericality_of :code

validates_presence_of

必須値のチェック。値が入力されていない場合、エラーを表示します。 例:

validates_presence_of :code

validates_uniqueness_of

値の重複チェック。DBに既に同じ値が存在した場合、エラーを表示します。 例:

validates_uniqueness_of :id

validates_size_of

validates_length_ofと同じ。