diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## Modern URI 0.3.4.0
+
+* URIs with authority component and without path are now rendered without
+  trailing slashes.
+
 ## Modern URI 0.3.3.1
 
 * Works with `bytestring-0.11`.
diff --git a/Text/URI/Render.hs b/Text/URI/Render.hs
--- a/Text/URI/Render.hs
+++ b/Text/URI/Render.hs
@@ -138,11 +138,12 @@
   Tagged s b
 
 genericRender :: Render URI b
-genericRender uri@URI {..} =
+genericRender URI {..} =
   mconcat
     [ rJust rScheme uriScheme,
       rJust rAuthority (either (const Nothing) Just uriAuthority),
-      rPath (isPathAbsolute uri) uriPath,
+      rAbsPathSlash uriAuthority uriPath,
+      rPath uriPath,
       rQuery uriQuery,
       rJust rFragment uriFragment
     ]
@@ -174,16 +175,21 @@
     ]
 {-# INLINE rUserInfo #-}
 
-rPath :: Bool -> Render (Maybe (Bool, NonEmpty (RText 'PathPiece))) b
-rPath isAbsolute path = leading <> other
-  where
-    leading = if isAbsolute then "/" else mempty
-    other =
-      case path of
-        Nothing -> mempty
-        Just (trailingSlash, ps) ->
-          (mconcat . intersperse "/" . fmap renderText . NE.toList) ps
-            <> if trailingSlash then "/" else mempty
+rAbsPathSlash ::
+  Either Bool a ->
+  Render (Maybe (Bool, NonEmpty (RText 'PathPiece))) b
+rAbsPathSlash (Left isAbsolute) _ = if isAbsolute then "/" else mempty
+rAbsPathSlash (Right _) Nothing = mempty
+rAbsPathSlash (Right _) (Just _) = "/"
+{-# INLINE rAbsPathSlash #-}
+
+rPath :: Render (Maybe (Bool, NonEmpty (RText 'PathPiece))) b
+rPath path =
+  case path of
+    Nothing -> mempty
+    Just (trailingSlash, ps) ->
+      (mconcat . intersperse "/" . fmap renderText . NE.toList) ps
+        <> if trailingSlash then "/" else mempty
 {-# INLINE rPath #-}
 
 rQuery :: Render [QueryParam] b
diff --git a/Text/URI/Types.hs b/Text/URI/Types.hs
--- a/Text/URI/Types.hs
+++ b/Text/URI/Types.hs
@@ -57,6 +57,7 @@
 import Data.ByteString (ByteString)
 import Data.Char
 import Data.Data (Data)
+import Data.Either (fromLeft)
 import Data.List (intercalate)
 import Data.List.NonEmpty (NonEmpty (..))
 import qualified Data.List.NonEmpty as NE
@@ -142,7 +143,7 @@
 --
 -- @since 0.1.0.0
 isPathAbsolute :: URI -> Bool
-isPathAbsolute = either id (const True) . uriAuthority
+isPathAbsolute = fromLeft True . uriAuthority
 
 -- | Authority component of 'URI'.
 data Authority = Authority
diff --git a/modern-uri.cabal b/modern-uri.cabal
--- a/modern-uri.cabal
+++ b/modern-uri.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            modern-uri
-version:         0.3.3.1
+version:         0.3.4.0
 license:         BSD3
 license-file:    LICENSE.md
 maintainer:      Mark Karpov <markkarpov92@gmail.com>
diff --git a/tests/Text/URISpec.hs b/tests/Text/URISpec.hs
--- a/tests/Text/URISpec.hs
+++ b/tests/Text/URISpec.hs
@@ -265,15 +265,19 @@
         (URI.render <$> URI.mkURI "//host/fir:st/se:cond")
           `shouldReturn` "//host/fir%3ast/se%3acond"
     context "when URI is a relative-path reference" $
-      it "escapes colon but only in the first path segment" $
-        do
-          firstSeg <- URI.mkPathPiece "fir:st"
-          secondSeg <- URI.mkPathPiece "se:cond"
-          let uri =
-                URI.emptyURI
-                  { uriPath = Just (False, firstSeg :| [secondSeg])
-                  }
-          URI.render uri `shouldBe` "fir%3ast/se%3acond"
+      it "escapes colon but only in the first path segment" $ do
+        firstSeg <- URI.mkPathPiece "fir:st"
+        secondSeg <- URI.mkPathPiece "se:cond"
+        let uri =
+              URI.emptyURI
+                { uriPath = Just (False, firstSeg :| [secondSeg])
+                }
+        URI.render uri `shouldBe` "fir%3ast/se%3acond"
+    context "when URI has no path" $
+      it "is rendered without trailing slash" $ do
+        let uriWithoutSlash = "https://example.com"
+        uri <- URI.mkURI uriWithoutSlash
+        URI.render uri `shouldBe` uriWithoutSlash
   describe "renderBs" $
     it "sort of works" $
       fmap URI.renderBs mkTestURI `shouldReturn` testURI
