Remove link from content header
There are a lot of different methods for doing this.

The basic idea is to detect the content type using one of a few methods and calling drupal_not_found().  When doing this, I typically set the pathauto for these to no-view/[nid], and then detect the request_uri in a hook.  There are some variations, but the all do something really similar.

However, there is a newish module called Rabbit Hole that eliminates the need for custom modules and provides a lot of flexability to how you hide the content.  I had been working on a general use module that did something similar, and abandoned developing it when I found this.  From the project page:


  [It] works by providing multiple options to control what should happen when the node is being viewed at its own page. You have the
  ability to
  
  
  Deliver an access denied page.
  Deliver a page not found page.
  Issue a page redirect to any Drupal path.
  Or simply display the content (regular behavior).
  
  
  This is configurable per content type and per node. There is also a permission that lets certain roles override Rabbit Hole completely.