feat: SEO altyapısı — pre-render, meta tags, blog posts, robots/sitemap
- vite-plugin-prerender yerine Playwright tabanlı post-build pre-render scripti (apps/web/scripts/prerender.mjs): 10 public route statik HTML'e dönüştürülüyor - usePageMeta hook: her public route'da özgün title/description/canonical/OG tags - index.html: favicon.svg, canonical, OG/Twitter Card, geliştirilmiş title+desc - apps/web/public/: robots.txt, sitemap.xml (10 URL), favicon.svg - nginx HSTS header eklendi (Strict-Transport-Security) - Blog post sayfaları: blog_/$slug.tsx (4 tam yazı, 600-800 kelime) - blog.tsx: post kartlarına Link eklendi - Homepage: Schema.org JSON-LD (Organization + SoftwareApplication) - Footer: placeholder href="#" sosyal linkler kaldırıldı - deploy.sh + deploy.yml: playwright install chromium + prerender adımı Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,7 @@ import { Route as DashboardSettingsRouteImport } from "./routes/dashboard/settin
|
||||
import { Route as DashboardSearchRouteImport } from "./routes/dashboard/search"
|
||||
import { Route as DashboardHistoryRouteImport } from "./routes/dashboard/history"
|
||||
import { Route as DashboardBillingRouteImport } from "./routes/dashboard/billing"
|
||||
import { Route as BlogSlugRouteImport } from "./routes/blog_/$slug"
|
||||
import { Route as AuthResetPasswordRouteImport } from "./routes/_auth/reset-password"
|
||||
import { Route as AuthRegisterRouteImport } from "./routes/_auth/register"
|
||||
import { Route as AuthLoginRouteImport } from "./routes/_auth/login"
|
||||
@@ -119,6 +120,11 @@ const DashboardBillingRoute = DashboardBillingRouteImport.update({
|
||||
path: "/billing",
|
||||
getParentRoute: () => DashboardRoute,
|
||||
} as any)
|
||||
const BlogSlugRoute = BlogSlugRouteImport.update({
|
||||
id: "/blog_/$slug",
|
||||
path: "/blog/$slug",
|
||||
getParentRoute: () => rootRouteImport,
|
||||
} as any)
|
||||
const AuthResetPasswordRoute = AuthResetPasswordRouteImport.update({
|
||||
id: "/reset-password",
|
||||
path: "/reset-password",
|
||||
@@ -209,6 +215,7 @@ export interface FileRoutesByFullPath {
|
||||
"/login": typeof AuthLoginRoute
|
||||
"/register": typeof AuthRegisterRoute
|
||||
"/reset-password": typeof AuthResetPasswordRoute
|
||||
"/blog/$slug": typeof BlogSlugRoute
|
||||
"/dashboard/billing": typeof DashboardBillingRoute
|
||||
"/dashboard/history": typeof DashboardHistoryRoute
|
||||
"/dashboard/search": typeof DashboardSearchRoute
|
||||
@@ -239,6 +246,7 @@ export interface FileRoutesByTo {
|
||||
"/login": typeof AuthLoginRoute
|
||||
"/register": typeof AuthRegisterRoute
|
||||
"/reset-password": typeof AuthResetPasswordRoute
|
||||
"/blog/$slug": typeof BlogSlugRoute
|
||||
"/dashboard/billing": typeof DashboardBillingRoute
|
||||
"/dashboard/history": typeof DashboardHistoryRoute
|
||||
"/dashboard/search": typeof DashboardSearchRoute
|
||||
@@ -272,6 +280,7 @@ export interface FileRoutesById {
|
||||
"/_auth/login": typeof AuthLoginRoute
|
||||
"/_auth/register": typeof AuthRegisterRoute
|
||||
"/_auth/reset-password": typeof AuthResetPasswordRoute
|
||||
"/blog_/$slug": typeof BlogSlugRoute
|
||||
"/dashboard/billing": typeof DashboardBillingRoute
|
||||
"/dashboard/history": typeof DashboardHistoryRoute
|
||||
"/dashboard/search": typeof DashboardSearchRoute
|
||||
@@ -305,6 +314,7 @@ export interface FileRouteTypes {
|
||||
| "/login"
|
||||
| "/register"
|
||||
| "/reset-password"
|
||||
| "/blog/$slug"
|
||||
| "/dashboard/billing"
|
||||
| "/dashboard/history"
|
||||
| "/dashboard/search"
|
||||
@@ -335,6 +345,7 @@ export interface FileRouteTypes {
|
||||
| "/login"
|
||||
| "/register"
|
||||
| "/reset-password"
|
||||
| "/blog/$slug"
|
||||
| "/dashboard/billing"
|
||||
| "/dashboard/history"
|
||||
| "/dashboard/search"
|
||||
@@ -367,6 +378,7 @@ export interface FileRouteTypes {
|
||||
| "/_auth/login"
|
||||
| "/_auth/register"
|
||||
| "/_auth/reset-password"
|
||||
| "/blog_/$slug"
|
||||
| "/dashboard/billing"
|
||||
| "/dashboard/history"
|
||||
| "/dashboard/search"
|
||||
@@ -396,6 +408,7 @@ export interface RootRouteChildren {
|
||||
PricingRoute: typeof PricingRoute
|
||||
PrivacyRoute: typeof PrivacyRoute
|
||||
TermsRoute: typeof TermsRoute
|
||||
BlogSlugRoute: typeof BlogSlugRoute
|
||||
}
|
||||
|
||||
declare module "@tanstack/react-router" {
|
||||
@@ -512,6 +525,13 @@ declare module "@tanstack/react-router" {
|
||||
preLoaderRoute: typeof DashboardBillingRouteImport
|
||||
parentRoute: typeof DashboardRoute
|
||||
}
|
||||
"/blog_/$slug": {
|
||||
id: "/blog_/$slug"
|
||||
path: "/blog/$slug"
|
||||
fullPath: "/blog/$slug"
|
||||
preLoaderRoute: typeof BlogSlugRouteImport
|
||||
parentRoute: typeof rootRouteImport
|
||||
}
|
||||
"/_auth/reset-password": {
|
||||
id: "/_auth/reset-password"
|
||||
path: "/reset-password"
|
||||
@@ -682,6 +702,7 @@ const rootRouteChildren: RootRouteChildren = {
|
||||
PricingRoute: PricingRoute,
|
||||
PrivacyRoute: PrivacyRoute,
|
||||
TermsRoute: TermsRoute,
|
||||
BlogSlugRoute: BlogSlugRoute,
|
||||
}
|
||||
export const routeTree = rootRouteImport
|
||||
._addFileChildren(rootRouteChildren)
|
||||
|
||||
Reference in New Issue
Block a user