Output tags from matrix fields related to an entry Using the code below, Craft was able to get related tags to an entry, before I decided to move TagFieldType to MatrixFieldType.

{% set entries = craft.entries %}

{% for entry in entries %}

   &lt;h3&gt;{{ entry.title }}&lt;/h3&gt;

   {% for tag in craft.tags.relatedTo(entry) %}

   &lt;li&gt;
     { tag.title }}
   &lt;/li&gt;

 {% else %}

   &lt;p&gt;No tags found&lt;/p&gt;

 {% endfor %}

 {% endfor %}


I'm quiet struggling to pull tags out so I rather share with you my Field's structure in my CP.







I took many options to consider, Why I can't get it right, even found the post, that same handles may cause a problems, so I gave them all unique handles.
To get tags defined within a matrix field, you will first want to loop through the matrix-blocks in your matrix; and then loop through the tags in your tags field defined in each block.

{% for block in entry.myMatrixFieldHandle %}
    {% for tag in block.myTagsFieldHandle %}
        {{ tag.title }}
    {% else %}
        No Tags found.
    {% endfor %}
{% endfor %}


Also, for retrieving tags defined in a tags field on an entry (as in your example), you can simply retrieve the tags through the tags field directly, rather than using relatedTo(entry).

{% for tag in entry.myTagsFieldHandle %}
    {{ tag.title }}
{% else %}
    No Tags found.
{% endfor %}


For more information please see the documentation for tags and matrix fields.

Update

If you want to output your tags as you have them displayed in your screenshots, then use this:

    {% for block in entry.technologyField %}
        {% if block.type == "tag" %}
            {% for tag in block.technologyTag %}
                {{ tag.title }}
            {% else %}
                No Tags found.
            {% endfor %}
        {% endif %}
    {% endfor %}


However, I can also see some potential problems with your naming system and how you are using matrix blocks. Here are some suggestions for improvement.


You don't need to end each Tag Group handle with 'TagGroup', as you already know that it's a Tag Group (so instead of 'technologyTagGroup', you can simply call it 'technology').
You don't need to end each field handle with 'Field', as you already know that it's a field (so instead of 'technologyField', you can simply call it 'technology').
Matrix block types support more than one field — I suspect that instead of having 3 separate block types defined, you actually only want 1 block type defined (let's call it 'technology' for example), with three fields in it: 'text', 'media', and 'tags' (or 'technologyTags' if you prefer).
When using a Tags Field Type (or Assets, Entries, Categories or anything else with more than one item), it is generally a good practice to name the field handle plural so that you always know that it contains more than one of something (so instead of 'tag' the field should be called 'tags').
If you followed #1, #2, #3, #4 above then the code to output your tags would be:

{% for block in entry.technology %}
    {% for tag in block.tags %}
        {{ tag.title }}
    {% else %}
        No Tags found.
    {% endfor %}
{% endfor %}

If you later define another Block Type then when looping through the blocks you will need to check block.type, and only include those that have a Tags Field defined with the handle your looking for ('tags' in this case). For example:

{% for block in entry.technology %}
    {% if block.type == "technology" %}
        {% for tag in block.tags %}
            {{ tag.title }}
        {% else %}
            No Tags found.
        {% endfor %}
    {% endif %}
{% endfor %}