fix: improve SEO
This commit is contained in:
@@ -12,7 +12,10 @@ import { z } from 'zod';
|
||||
export const Route = createFileRoute('/_login/login')({
|
||||
component: LoginPage,
|
||||
head: () => ({
|
||||
meta: [{ title: createTitle(PAGE_TITLES.LOGIN) }],
|
||||
meta: [
|
||||
{ title: createTitle(PAGE_TITLES.LOGIN) },
|
||||
{ name: 'robots', content: 'noindex, follow' },
|
||||
],
|
||||
}),
|
||||
validateSearch: z.object({
|
||||
error: z.string().optional(),
|
||||
@@ -26,11 +29,13 @@ function LoginPage() {
|
||||
return (
|
||||
<div className="col gap-8 w-full text-left">
|
||||
<div>
|
||||
<LogoSquare className="size-12 mb-8 md:hidden" />
|
||||
<h1 className="text-3xl font-bold text-foreground mb-2">Sign in</h1>
|
||||
<p className="text-muted-foreground">
|
||||
Don't have an account?{' '}
|
||||
<a href="/onboarding" className="underline">
|
||||
<a
|
||||
href="/onboarding"
|
||||
className="underline font-medium text-foreground"
|
||||
>
|
||||
Create one today
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -6,7 +6,10 @@ import { z } from 'zod';
|
||||
|
||||
export const Route = createFileRoute('/_login/reset-password')({
|
||||
head: () => ({
|
||||
meta: [{ title: createTitle(PAGE_TITLES.RESET_PASSWORD) }],
|
||||
meta: [
|
||||
{ title: createTitle(PAGE_TITLES.RESET_PASSWORD) },
|
||||
{ name: 'robots', content: 'noindex, follow' },
|
||||
],
|
||||
}),
|
||||
component: Component,
|
||||
validateSearch: z.object({
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { LoginLeftPanel } from '@/components/login-left-panel';
|
||||
import { LoginNavbar } from '@/components/login-navbar';
|
||||
import { SkeletonDashboard } from '@/components/skeleton-dashboard';
|
||||
import { Outlet, createFileRoute, redirect } from '@tanstack/react-router';
|
||||
|
||||
@@ -14,6 +15,7 @@ export const Route = createFileRoute('/_login')({
|
||||
function AuthLayout() {
|
||||
return (
|
||||
<div className="relative min-h-screen grid md:grid-cols-2">
|
||||
<LoginNavbar />
|
||||
<div className="hidden md:block">
|
||||
<LoginLeftPanel />
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,7 @@ export const Route = createFileRoute('/_public/onboarding')({
|
||||
head: () => ({
|
||||
meta: [
|
||||
{ title: createEntityTitle('Create an account', PAGE_TITLES.ONBOARDING) },
|
||||
{ name: 'robots', content: 'noindex, follow' },
|
||||
],
|
||||
}),
|
||||
beforeLoad: async ({ context }) => {
|
||||
@@ -56,7 +57,6 @@ function Component() {
|
||||
return (
|
||||
<div className="col gap-8 w-full text-left">
|
||||
<div>
|
||||
<LogoSquare className="size-12 mb-8 md:hidden" />
|
||||
<h1 className="text-3xl font-bold text-foreground mb-2">
|
||||
Create an account
|
||||
</h1>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { LoginNavbar } from '@/components/login-navbar';
|
||||
import { OnboardingLeftPanel } from '@/components/onboarding-left-panel';
|
||||
import { Outlet, createFileRoute, redirect } from '@tanstack/react-router';
|
||||
|
||||
@@ -8,6 +9,7 @@ export const Route = createFileRoute('/_public')({
|
||||
function OnboardingLayout() {
|
||||
return (
|
||||
<div className="relative min-h-screen grid md:grid-cols-2">
|
||||
<LoginNavbar />
|
||||
<div className="hidden md:block">
|
||||
<OnboardingLeftPanel />
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ShareEnterPassword } from '@/components/auth/share-enter-password';
|
||||
import { FullPageEmptyState } from '@/components/full-page-empty-state';
|
||||
import FullPageLoadingState from '@/components/full-page-loading-state';
|
||||
import { LoginNavbar } from '@/components/login-navbar';
|
||||
import { OverviewFiltersButtons } from '@/components/overview/filters/overview-filters-buttons';
|
||||
import { LiveCounter } from '@/components/overview/live-counter';
|
||||
import OverviewMetrics from '@/components/overview/overview-metrics';
|
||||
@@ -24,11 +25,32 @@ export const Route = createFileRoute('/share/overview/$shareId')({
|
||||
component: RouteComponent,
|
||||
validateSearch: shareSearchSchema,
|
||||
loader: async ({ context, params }) => {
|
||||
await context.queryClient.prefetchQuery(
|
||||
const share = await context.queryClient.ensureQueryData(
|
||||
context.trpc.share.overview.queryOptions({
|
||||
shareId: params.shareId,
|
||||
}),
|
||||
);
|
||||
|
||||
return { share };
|
||||
},
|
||||
head: ({ loaderData }) => {
|
||||
if (!loaderData || !loaderData.share) {
|
||||
return {
|
||||
meta: [
|
||||
{
|
||||
title: 'Share not found - OpenPanel.dev',
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
meta: [
|
||||
{
|
||||
title: `${loaderData.share.project?.name} - ${loaderData.share.organization?.name} - OpenPanel.dev`,
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
pendingComponent: FullPageLoadingState,
|
||||
errorComponent: () => (
|
||||
@@ -78,19 +100,8 @@ function RouteComponent() {
|
||||
return (
|
||||
<div>
|
||||
{isHeaderVisible && (
|
||||
<div className="mx-auto max-w-7xl justify-between row gap-4 p-4 pb-0">
|
||||
<div className="col gap-1">
|
||||
<span className="text-sm">{share.organization?.name}</span>
|
||||
<h1 className="text-xl font-medium">{share.project?.name}</h1>
|
||||
</div>
|
||||
<a
|
||||
href="https://openpanel.dev?utm_source=openpanel.dev&utm_medium=share"
|
||||
className="col gap-1 items-end"
|
||||
title="OpenPanel"
|
||||
>
|
||||
<span className="text-xs">POWERED BY</span>
|
||||
<span className="text-xl font-medium">openpanel.dev</span>
|
||||
</a>
|
||||
<div className="mx-auto max-w-7xl">
|
||||
<LoginNavbar className="relative p-4" />
|
||||
</div>
|
||||
)}
|
||||
<div className="">
|
||||
|
||||
Reference in New Issue
Block a user