diff --git a/_includes/trending-tags.html b/_includes/trending-tags.html
index 2d9c971..41351e4 100644
--- a/_includes/trending-tags.html
+++ b/_includes/trending-tags.html
@@ -8,24 +8,33 @@
{% assign MAX = 10 %}
-{% capture tags_array %}
- {% for tag in site.tags %}
- {{ tag[1] | size }}::{{ tag[0] | replace: ' ', '-' }}
- {% endfor %}
-{% endcapture %}
+{% assign size_list = "" | split: "" %}
+{% assign tag_list = "" | split: "" %}
-{% assign all_tags = tags_array | split: " " | sort | reverse %}
-{% assign count = 0 %}
+{% for tag in site.tags %}
+ {% assign size = tag | last | size %}
+ {% assign size_list = size_list | push: size %}
+
+ {% assign tag_str = tag | first | replace: " ", "-" | append: "::" | append: size %}
+ {% assign tag_list = tag_list | push: tag_str %}
+{% endfor %}
+
+{% assign size_list = size_list | sort | reverse %}
+
+{% assign tag_list = tag_list | sort_natural %}
{% assign trending_tags = "" | split: "" %}
-{% for iter in all_tags %}
- {% assign count = count | plus: 1 %}
- {% assign tag = iter | split: "::" | last %}
-
- {% assign trending_tags = trending_tags | push: tag %}
-
- {% if count >= MAX %}
- {% break %}
- {% endif %}
+{% for size in size_list limit: MAX %}
+ {% for tag_str in tag_list %}
+ {% assign tag = tag_str | split: "::" %}
+ {% assign tag_name = tag | first %}
+ {% assign tag_size = tag | last | plus: 0 %}
+ {% if tag_size == size %}
+ {% unless trending_tags contains tag_name %}
+ {% assign trending_tags = trending_tags | push: tag_name %}
+ {% break %}
+ {% endunless %}
+ {% endif %}
+ {% endfor %}
{% endfor %}