diff --git a/boards/models/post/__init__.py b/boards/models/post/__init__.py
--- a/boards/models/post/__init__.py
+++ b/boards/models/post/__init__.py
@@ -152,9 +152,10 @@ class Post(models.Model, Viewable):
                 url = self.url
 
         if url is None:
-            opening_id = thread.get_opening_post_id()
+            opening = self.is_opening()
+            opening_id = self.id if opening else thread.get_opening_post_id()
             url = reverse('thread', kwargs={'post_id': opening_id})
-            if self.id != opening_id:
+            if not opening:
                 url += '#' + str(self.id)
 
         return url
@@ -292,8 +293,7 @@ class Post(models.Model, Viewable):
 
         super().save(force_insert, force_update, using, update_fields)
 
-        # Post save triggers
-        if new_post:
+        if self.url is None:
             self.build_url()
 
         self._connect_replies()
diff --git a/boards/utils.py b/boards/utils.py
--- a/boards/utils.py
+++ b/boards/utils.py
@@ -100,7 +100,8 @@ def cached_result(key_method=None):
                 result = persisted_result
             else:
                 result = function(obj, *args, **kwargs)
-                cache.set(cache_key, result)
+                if result is not None:
+                    cache.set(cache_key, result)
 
             return result