web-dev-qa-db-ja.com

完全なノード表示とURLを非表示にする

これは と非常によく似ています。ユーザーや検索エンジンから直接アクセスしてはならないノードを非表示にするにはどうすればよいですか?

私はしたいと思います:

  • 特定のノードはビューで使用されているため、完全なURL(つまり、node/1234またはそのエイリアス)で直接アクセスできない
  • 検索エンジンでインデックスに登録されていないことを確認してください

私の質問は:

  • ノードを「非公開」としてマークすると副作用がありますか? (管理者であると仮定して)ノードを表示し、非公開としてノードを表示する以外
  • ノードを公開済みとしてマークすると、匿名ユーザーが(完全なURLで)表示したときに401が生成されます。ページはまだクロールされますか? 401をリダイレクトし、SEOの観点から怪我をしない方法はありますか?

編集:Drupal 7.を使用します。

ありがとう!

3
mmilo

ノードを公開しないと、進行中の作業ができないか、Webサイトの準備ができていないものとしてマークする別の方法が必要になります。これは間違いなく不利だと思います。

401ではなく403または404を意味しますか?ページの結果が404の場合、そのページはクロールまたはインデックスされません。 Googleには、「見えないノード」のケースを、従来の不正なURLと区別する方法がありません。 401は承認の場合にのみ発生します。 403を指定すると、後でページが改訂される可能性があります。これらのいずれかからリダイレクトする必要はありません。これには、301または302が必要です。

レガシープロジェクトでこれを行う別の方法として、パスエイリアスを次のように設定できます。

no-view/[nid]

次に使用します

function MYMODULE_init ()
{
    $path = drupal_get_path_alias(request_uri());

    if (strpos($path, "no-view/") !== false) {
        drupal_not_found();
        exit;
    }
}

カスタムモジュールで。 hook_init()の追加を避けたい場合は、Node APIを介して同様の機能を配線できます。

今後は、@ nicozの提案に従ってエンティティを使用するのが最善の方法です。

1
mpdonadio

Drupal 7のアーキテクチャレベルでの最大の変更の1つは、コンテンツの抽象化としてのエンティティの導入です。ノード内のすべてを詰め込もうとする昔は終わりました。要するに、オーバーヘッドと不要なコードなしのノードのすべての便利さ(そして、あなたの場合、ユーザー、クローラーからノードを「隠す」というアーキテクチャ上の課題)。

Drupal Commerceはそれらを製品に使用します。これにより、エンドユーザーは製品自体にアクセスできなくなりますが、エンドユーザーが表示および購入できるように製品のディスプレイおよびビューに接続できます。

エンティティを利用する 建設キット(ECK) 。これは、エンティティを作成するための素晴らしいUIを提供し、ビューを使用してエンドユーザーにエンティティを表示します。

3
user842

Internal Nodes モジュールは、私が自分でテストしたわけではありませんが、望みどおりの動作をするはずです。

私の唯一の問題は、非表示にしたノードを編集できないことですが、現在作業中です( ユーザーが表示できないノードを編集/削除できるようにする

1
exstral

Rabbit Hole モジュールはこれに最適です。アクセス可能なノードを非表示にしたり、別のランディングページに一度リダイレクトしたりできます。 「管理者」の役割を選択して、それらに通常アクセスし、他のすべてのユーザーはコンテンツタイプごとにその一般的なルールに従う必要がありますが、ノードごとにこれを変更することもできます。

0
Chandeep Khosa

サイトのどこにもこれらのノードにリンクしていない場合、検索エンジンはそれらを見つけることすらできません。

より堅牢なアプローチは、フックバーノードアクセスを使用する Berdirの提案 です。

0
uwe