How do I get tags to only display on posts that have that tag?
The code you're using at the moment is trying to output the tags that are in use on any/all entries:

{% set entries = craft.entries.section('news').limit(null) %}


If I understand you correctly, you want to output the tags only for the current entry, right? 

This is explained with very useful examples in the documentation.

Solution

Assuming you already have the entry variable set, you could do the following:

&lt;ul&gt;
    {% for tag in craft.tags.relatedTo(entry) %}
        &lt;li&gt;{{ tag.title }}&lt;/li&gt;
    {% endfor %}
&lt;/ul&gt;


Another example adapted from the docs:

{% set tags = entry.tagsFieldHandle %}

{% if tags | length %}

    &lt;ul&gt;
        {% for tag in tags %}
            &lt;li&gt;{{ tag.title }}&lt;/li&gt;
        {% endfor %}
    &lt;ul&gt;

{% endif %}


You first set the variable tags to the tags related to your entry. Then, you check if there are tags related to the entry. If there are, you iterate over them.