多言語対応していると気づくと思いますが、 サイトコアはアイテムの仕様上、 数値バージョンを持たないアイテムがパブリッシュターゲットにパブリッシュされることがあります。

例えば、英語、日本語の言語バージョンが存在する場合、日本語バージョンの数値バージョンのアイテムしか存在しない状態でパブリッシュすると、パブリッシュ先のコンテンツツリーにアイテムが作成されます。そして、 数値バージョンがなくても 英語バージョンのアイテムを Database.GetItem メソッドで取得できます。ただし数値バージョンがないのでフィール値を参照できません(値がブランクになる)。バージョン管理しないフィールド値は取得できます(バージョン管理しないフィールドですから)。数値バージョンの有無までコードでチェックしないと表示言語によってコンテンツの一部が表示されないおかしなページが表示されたり$nameなどのスタンダードヴァリューのトークン文字列がページに表示される場合もあります。

カスタムコードによるカスタマイズが必要ですが、下記リンクのように GetItemメソッドの挙動を変更し、数値バージョンが存在しない場合、nullを返したり、フォールバック言語で指定した言語の数値バージョンのフィールド値を取得する方法もあります。

Approaching Language Fallback with Sitecore
http://sitecoreblog.alexshyba.com/2010/11/approaching-language-fallback-with.html

上記リンク先では Web.config の databases タグの Engines.DataEngine.Commands.GetItemPrototype にカスタムプロバイダを設定し GetItem メソッドの動作を変更して、フォールバック言語の数値バージョンのフィールド値を取得したり、数値バージョンが存在しないばあは null を返すようにカスタマイズしているみたいです。

時間があったらGetItemメソッドの挙動を変えるプロバイダ作ってみるのもいいですが、そんな時間がない場合は Database.GetItem メソッドで取得したアイテムがnullか否かをチェックしかつ数値バージョンの有無をチェックするようなコードを記述するコーディングルールにします。

というわえで 数値バージョンをチェックする拡張メソッドを次のように定義してみました。数値バージョンが存在するかのチェックは Item.Versions.Count の値が 0 以上か否かで判断しています。 Iterm.Version プロパティは 数値バージョンがない場合 1 を返してきますので判定するプロパティとしては使用できません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Sample.Extensions
{
    public static class ItemExtensions
    {
        /// <summary>
        /// 数値バージョンが存在するかをチェックする拡張メソッド
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public static bool HasVersions(this Sitecore.Data.Items.Item item)
        {
            return item.Versions.Count > 0;
        }
    }
}

ちなみに 数値バージョンの有無をチェックする方法は(特定のスタンダードフィールドの値の有無をチェックするなど)他にあるかもしれません。今回はチェック処理をItemクラス用の 拡張メソッドとして定義しました。メソッドとして定義しておけば後から数値バージョンチェックロジックを変更するのも容易なので。

ご紹介したコードはプログラム上で数値バージョンの有無をチェックするための拡張メソッドです。ビジターがリクエストしたページに対応したコンテンツアイテムの数値バージョンが存在しない場合にページを表示させたくない場合は下記リンク先で表示されている方法が参考になるかもしれません。下記リンクでは httpRequestBegin パイブラインにカスタムプロセッサを追加し、数値バージョンの存在しないアイテムのページがリクエストされたら404エラーの画面が表示されるようにしています。

Avoid displaying pages without a language version
http://www.cognifide.com/blogs/sitecore/sitecore-displaying-pages-without-a-language-version/