diff --git a/district/migrations/0122_remove_districthomepage_shared_tags.py b/district/migrations/0122_remove_districthomepage_shared_tags.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c45180c73f618f34808b8a720e26e1d38629497
--- /dev/null
+++ b/district/migrations/0122_remove_districthomepage_shared_tags.py
@@ -0,0 +1,16 @@
+# Generated by Django 4.1.8 on 2023-08-16 12:30
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("district", "0121_merge_20230816_1107"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="districthomepage",
+            name="shared_tags",
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index 505d94255d0642086253c5095677643668fc9440..9963cb3609c29dd11c23935adc940c5b5d14c344 100644
--- a/district/models.py
+++ b/district/models.py
@@ -49,6 +49,7 @@ from shared.const import RICH_TEXT_DEFAULT_FEATURES
 from shared.models import (
     ArticleMixin,
     ArticlesMixin,
+    ArticlesPageMixin,
     ExtendedMetadataHomePageMixin,
     ExtendedMetadataPageMixin,
     FooterMixin,
@@ -246,7 +247,6 @@ class DistrictHomePage(
         FieldPanel("subheader"),
         FieldPanel("content"),
         FieldPanel("articles_title"),
-        FieldPanel("shared_tags"),
         FieldPanel("election_countdown_datetime"),
         FieldPanel("show_calendar_on_hp"),
     ]
@@ -507,7 +507,7 @@ class DistrictArticlesPage(
     ExtendedMetadataPageMixin,
     SubpageMixin,
     MetadataPageMixin,
-    ArticlesMixin,
+    ArticlesPageMixin,
     Page,
 ):
     ### FIELDS
@@ -519,7 +519,7 @@ class DistrictArticlesPage(
 
     ### PANELS
 
-    content_panels = ArticlesMixin.content_panels + [
+    content_panels = ArticlesPageMixin.content_panels + [
         FieldPanel("max_items"),
     ]
 
diff --git a/main/migrations/0061_remove_mainhomepage_shared_tags.py b/main/migrations/0061_remove_mainhomepage_shared_tags.py
new file mode 100644
index 0000000000000000000000000000000000000000..e5b4a6bf9dff565029e58b7e13bd6d54aa4d59ac
--- /dev/null
+++ b/main/migrations/0061_remove_mainhomepage_shared_tags.py
@@ -0,0 +1,16 @@
+# Generated by Django 4.1.8 on 2023-08-16 12:30
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("main", "0060_merge_20230816_1107"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="mainhomepage",
+            name="shared_tags",
+        ),
+    ]
diff --git a/main/models.py b/main/models.py
index 8349b2918a755902b7300482a5c02d0c11062bbb..3efb0ba13bd20a062921d3c45c59688a0c45430b 100644
--- a/main/models.py
+++ b/main/models.py
@@ -32,6 +32,7 @@ from shared.forms import SubscribeForm
 from shared.models import (  # MenuMixin,
     ArticleMixin,
     ArticlesMixin,
+    ArticlesPageMixin,
     ExtendedMetadataHomePageMixin,
     ExtendedMetadataPageMixin,
     SharedTaggedMainArticle,
@@ -143,7 +144,6 @@ class MainHomePage(
 
     content_panels = Page.content_panels + [
         FieldPanel("content"),
-        *ArticlesMixin.content_panels,
         FieldPanel("footer_other_links"),
         FieldPanel("footer_person_list"),
     ]
@@ -250,7 +250,12 @@ class MainHomePage(
 
     @cached_property
     def newsletter_subscribe_url(self):
-        return self.url + self.reverse_subpage("newsletter_subscribe")
+        newsletter_subscribe = self.reverse_subpage("newsletter_subscribe")
+        return (
+            self.url + newsletter_subscribe
+            if self.url is not None
+            else newsletter_subscribe
+        )  # preview fix
 
     @property
     def articles_page(self):
@@ -314,7 +319,7 @@ class MainArticlesPage(
     ExtendedMetadataPageMixin,
     SubpageMixin,
     MetadataPageMixin,
-    ArticlesMixin,
+    ArticlesPageMixin,
     Page,
 ):
     perex = models.TextField()
@@ -349,7 +354,10 @@ class MainArticlesPage(
     subpage_types = ["main.MainArticlePage"]
 
     ### PANELS
-    content_panels = ArticlesMixin.content_panels + [FieldPanel("perex")]
+    content_panels = Page.content_panels + [
+        FieldPanel("perex"),
+        FieldPanel("shared_tags"),
+    ]
     promote_panels = make_promote_panels()
 
     ### EDIT HANDLERS
@@ -487,7 +495,8 @@ class MainArticlesPage(
 
     @cached_property
     def search_url(self):
-        return self.url + self.reverse_subpage("search")
+        reverse_url = self.reverse_subpage("search")
+        return self.url + reverse_url if self.url is not None else reverse_url
 
     @route(r"^sdilene/$", name="shared")
     def shared(self, request):
diff --git a/shared/models.py b/shared/models.py
index 119fbf4af3c5a44505ecbca4bcfbf2a782085425..276a935bbaeeb0e34155b236682cb8fff3d69600 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -349,15 +349,16 @@ class SharedArticlesPageType(Enum):
     MAIN = "main"
 
 
-class ArticlesMixin(models.Model):
-    shared_tags = ParentalManyToManyField(
-        "shared.SharedTag",
-        verbose_name="Výběr tagů pro články sdílené mezi sítěmi",
-        help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.",
-        blank=True,
-    )
-
-    content_panels = Page.content_panels + [FieldPanel("shared_tags")]
+class ArticlesMixin:
+    def get_shared_tags(self):
+        """
+        Relies on property articles_page being present within the child page, returns shared tags field
+        """
+        return (
+            self.articles_page.shared_tags
+            if self.articles_page is not None
+            else SharedTag.objects.none()
+        )
 
     def merge_dict(self, aDict: dict, bDict: dict):
         """
@@ -417,7 +418,9 @@ class ArticlesMixin(models.Model):
         filtered_query = (
             query.filter(
                 ~Q(page_ptr_id__in=Subquery(original_query.values("page_ptr_id"))),
-                shared_tags__slug__in=self.shared_tags.values_list("slug", flat=True),
+                shared_tags__slug__in=self.get_shared_tags().values_list(
+                    "slug", flat=True
+                ),
             )
             if isinstance(original_query, models.QuerySet)
             else (
@@ -427,13 +430,13 @@ class ArticlesMixin(models.Model):
                             map(lambda article: article.pk, original_query)
                         )
                     ),
-                    shared_tags__slug__in=self.shared_tags.values_list(
+                    shared_tags__slug__in=self.get_shared_tags().values_list(
                         "slug", flat=True
                     ),
                 )
                 if original_query is not None
                 else query.filter(
-                    shared_tags__slug__in=self.shared_tags.values_list(
+                    shared_tags__slug__in=self.get_shared_tags().values_list(
                         "slug", flat=True
                     ),
                 )
@@ -568,7 +571,7 @@ class ArticlesMixin(models.Model):
         main_by_slug = create_query_by_slug(main_article_query)
 
         shared_field = Value(
-            self.page_ptr.id,
+            self.page_ptr.id if hasattr(self, "page_ptr") else None,  # preview fix
             output_field=models.ForeignKey(
                 Page, null=True, blank=True, related_name="+", on_delete=models.PROTECT
             ),
@@ -626,6 +629,10 @@ class ArticlesMixin(models.Model):
                     union_shared_from_id=empty_shared_field,
                     union_shared_type=empty_shared_type,
                 )
+
+            if self.get_shared_tags().count() == 0:
+                return prepared_query.order_by("-union_date")
+
             return (
                 prepared_query.union(main_by_values)
                 .union(uniweb_by_values)
@@ -881,3 +888,23 @@ class ArticlesMixin(models.Model):
 
     class Meta:
         abstract = True
+
+
+class ArticlesPageMixin(ArticlesMixin, models.Model):
+    def get_shared_tags(self):
+        """
+        Overrides get_shared_tags from ArticlesMixin, returns shared tags
+        """
+        return self.shared_tags
+
+    shared_tags = ParentalManyToManyField(
+        "shared.SharedTag",
+        verbose_name="Výběr tagů pro články sdílené mezi sítěmi",
+        help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.",
+        blank=True,
+    )
+
+    content_panels = Page.content_panels + [FieldPanel("shared_tags")]
+
+    class Meta:
+        abstract = True
diff --git a/uniweb/models.py b/uniweb/models.py
index de3b627f40126a8e0eaada449c5fa9813cdff461..ffdeee74e1198ce86d14fbdcf491ba446a95171e 100644
--- a/uniweb/models.py
+++ b/uniweb/models.py
@@ -31,7 +31,7 @@ from shared.blocks import ChartBlock, NewsletterSubscriptionBlock
 from shared.const import RICH_TEXT_DEFAULT_FEATURES
 from shared.models import (
     ArticleMixin,
-    ArticlesMixin,
+    ArticlesPageMixin,
     ExtendedMetadataHomePageMixin,
     ExtendedMetadataPageMixin,
     FooterMixin,
@@ -517,13 +517,13 @@ class UniwebArticlesIndexPage(
     ExtendedMetadataPageMixin,
     SubpageMixin,
     MetadataPageMixin,
-    ArticlesMixin,
+    ArticlesPageMixin,
 ):
     ### FIELDS
 
     ### PANELS
 
-    content_panels = ArticlesMixin.content_panels
+    content_panels = ArticlesPageMixin.content_panels
 
     promote_panels = make_promote_panels()