I set the path-alias for these content types to be
no-view/[nid]
and then use
function MYMODULE_init ()
{
$path = drupal_get_path_alias(request_uri());
if (strpos($path, "no-view/") !== false) {
drupal_not_found();
exit;
}
}
This way, you intercept things earlier in the process. You can also avoid having lots of node templates that all do the same thing.
As for the reason for making certain content types unavailable, there are several legitimate reasons for doing so. One is that it is often a better option to store complex data on a node w/ a custom content type rather than a CCK field in a node, and share this with other nodes. You may never want this data node to be viewed on its own. Another is using nodes to display groups of things in a view on a page, but that don't make sense to be viewed on their own.
robots.txtto prevent search engines from even trying to index pages ofcontent_type- Sid Kshatriya