diff --git a/internal/frontend/unit.go b/internal/frontend/unit.go
index e03150a..ae6e87e 100644
--- a/internal/frontend/unit.go
+++ b/internal/frontend/unit.go
@@ -7,6 +7,7 @@
 import (
 	"context"
 	"net/http"
+	"path"
 	"sort"
 	"strconv"
 	"strings"
@@ -345,7 +346,10 @@
 	if unit.IsPackage() {
 		return unit.Name, pageTypePackage
 	}
-	return unit.Path, pageTypeDirectory
+	if unit.IsModule() {
+		return path.Base(unit.Path), pageTypeModule
+	}
+	return path.Base(unit.Path) + "/", pageTypeDirectory
 }
 
 // displayBreadcrumbs appends additional breadcrumb links for display
diff --git a/internal/frontend/unit_test.go b/internal/frontend/unit_test.go
index 72a744a..68c616b 100644
--- a/internal/frontend/unit_test.go
+++ b/internal/frontend/unit_test.go
@@ -11,9 +11,50 @@
 	"github.com/google/go-cmp/cmp"
 	"golang.org/x/pkgsite/internal"
 	"golang.org/x/pkgsite/internal/postgres"
+	"golang.org/x/pkgsite/internal/stdlib"
 	"golang.org/x/pkgsite/internal/testing/sample"
 )
 
+func TestPageInfo(t *testing.T) {
+	m := sample.LegacyModule("golang.org/x/tools", "v1.0.0", "go/packages", "cmd/godoc")
+
+	type test struct {
+		name      string
+		unit      *internal.Unit
+		wantTitle string
+		wantType  string
+	}
+	var tests []*test
+	for _, u := range m.Units {
+		switch u.Path {
+		case "golang.org/x/tools":
+			tests = append(tests, &test{"module golang.org/x/tools", u, "tools", pageTypeModule})
+		case "golang.org/x/tools/go/packages":
+			tests = append(tests, &test{"package golang.org/x/tools/go/packages", u, "packages", pageTypePackage})
+		case "golang.org/x/tools/go":
+			tests = append(tests, &test{"directory golang.org/x/tools/go", u, "go/", pageTypeDirectory})
+		case "golang.org/x/tools/cmd/godoc":
+			u.Name = "main"
+			tests = append(tests, &test{"package golang.org/x/tools/cmd/godoc", u, "godoc", pageTypeCommand})
+		case "golang.org/x/tools/cmd":
+			tests = append(tests, &test{"directory golang.org/x/tools/cmd", u, "cmd/", pageTypeDirectory})
+		default:
+			t.Fatalf("Unexpected path: %q", u.Path)
+		}
+	}
+	std := sample.LegacyModule(stdlib.ModulePath, "v1.0.0", "")
+	tests = append(tests, &test{"module std", std.Units[0], "Standard library", pageTypeStdLib})
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			gotTitle, gotType := pageInfo(test.unit)
+			if gotTitle != test.wantTitle || gotType != test.wantType {
+				t.Errorf("pageInfo(%q): %q, %q; want = %q, %q", test.unit.Path, gotTitle, gotType, test.wantTitle, test.wantType)
+			}
+		})
+	}
+}
+
 func TestGetNestedModules(t *testing.T) {
 	ctx, cancel := context.WithTimeout(context.Background(), testTimeout)
 	defer cancel()
