PageSourceSearch

https://eduportal-bvluawlx.manus.space/assets/AdminSeo-BDqjhro5.js

js eduportal-bvluawlx.manus.space collected 2026-10-03 05:01:40 UTC 28,916 bytes, 1 lines download raw bytes

1import{a as O,j as e,r as p,t as o,h as A,e as N,o as R,b as T,L as h,F as E,G as y,T as j,i as C,v as w}from"./index-TdxVxAlO.js";import{A as S,a as l,d as L,S as g,b as I}from"./AdminLayout-DGuzapTB.js";import{S as $}from"./save-dvZqdlZY.js";import{C as z}from"./check-Db4ngzmJ.js";function K(){const[a]=O();return a.includes("/titles")?e.jsx(B,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:11"}):a.includes("/sitemap")?e.jsx(D,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:12"}):a.includes("/redirections")?e.jsx(M,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:13"}):a.includes("/links")?e.jsx(F,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:14"}):e.jsx(U,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:15"})}function U(){const{data:a,isLoading:t,error:d}=o.seo.audit.useQuery();if(t)return e.jsx(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:20",title:"SEO Dashboard",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:20",className:"admin-route-loading",children:[e.jsx(w,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:20",size:18})," Running the live SEO audit…"]})});if(d||!a)return e.jsx(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:21",title:"SEO Dashboard",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:21",className:"admin-empty",children:["Unable to run the SEO audit. ",d?.message]})});const{summary:c}=a;return e.jsxs(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:23",title:"SEO Dashboard",description:"A database-backed audit of individual posts and Base Pages across metadata, content quality, relationships, indexing and schema readiness.",actions:e.jsxs(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:23",href:"/admin/seo/titles",className:"admin-primary-button",children:[e.jsx(N,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:23",size:14})," Bulk editor"]}),children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:24",className:"admin-stat-grid",children:[e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:25",label:"Average score",value:`${c.avgScore}/100`,delta:`${c.total} records · ${c.basePages} Base Pages`,icon:N,tone:"blue"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:26",label:"SEO issues",value:String(a.issues.length),delta:`${c.poor} poor-scoring items`,icon:j,tone:"saffron"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:27",label:"Orphan pages",value:String(c.orphans),delta:`${c.totalInternalLinks} internal links`,icon:C,tone:"lilac"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:28",label:"Indexing",value:c.indexingAllowed?"Enabled":"Disabled",delta:`${c.noindex} page(s) intentionally noindex`,icon:z,tone:"mint"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:30",className:"admin-grid-2",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:31",title:"Overall SEO health",description:"Scores are weighted across technical, on-page, content, keyword, link, media and schema categories.",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",className:"seo-health",children:[e.jsx(I,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",score:c.avgScore,size:120}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",className:"seo-health-meta",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:c.good}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:"Good or excellent"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:c.fair}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:"Fair"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:c.poor}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:"Poor"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:c.brokenInternal}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:32",children:"Broken internal links"})]})]})]})}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",title:"Priority audit queue",description:"Start with critical issues, then address warning-level improvements.",children:e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",className:"admin-list",children:[a.issues.slice(0,7).map(i=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",className:`score-chip ${i.severity==="critical"?"poor":"fair"}`,children:i.seoScore}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",children:[e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",href:i.editUrl,children:e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",children:i.title})}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",children:[i.entity==="base_page"?"Base Page · ":"Post · ",i.problems.slice(0,2).join(" · ")]})]})]},`${i.entity}-${i.id}`)),!a.issues.length&&e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:34",className:"admin-muted",children:"No metadata or content-quality issues were detected."})]})})]}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",title:"Base Page SEO",description:"Each authoritative section Base Page is independently scored from its persisted landing-page content, SEO metadata, indexability, internal relationships, schema and real assignment count. Edit these records in Base Pages & Sections.",children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",className:"admin-table-wrap",children:e.jsxs("table",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",className:"admin-table",children:[e.jsx("thead",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:[e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"Base Page"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"URL"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"Published posts"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"SEO score"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"Index"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:"Status"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36"})]})}),e.jsxs("tbody",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:[a.basePages.map(i=>e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:[e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:i.name})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:i.url})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:i.publishedContentCount}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",className:`score-chip ${i.seoScore>=70?"good":i.seoScore>=45?"fair":"poor"}`,children:[i.seoScore,"/100"]})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:i.robotsIndex?"Index":"Noindex"}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:i.status}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",href:i.editUrl,className:"admin-ghost-button",children:"Edit Base Page"})})]},i.id)),!a.basePages.length&&e.jsx("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",children:e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",colSpan:7,children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:36",className:"admin-empty",children:"No active Base Pages are available for audit."})})})]})]})})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",className:"admin-grid-2",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",title:"Keyword cannibalization",description:"Focus keywords used by more than one published page.",children:e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",className:"admin-list",children:[a.cannibalization.map(i=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:[e.jsx(j,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",size:14}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:i.keyword}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:i.items.map(r=>r.title).join(" · ")})]})]}
1,i.keyword)),!a.cannibalization.length&&e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",className:"admin-muted",children:"No keyword conflicts found."})]})}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",title:"Duplicate title warnings",description:"Search titles duplicated between multiple pieces of content.",children:e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",className:"admin-list",children:[a.duplicateTitles.map(i=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:[e.jsx(E,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",size:14}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:i.title}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",children:[i.items.length," items use this title"]})]})]},i.title)),!a.duplicateTitles.length&&e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:37",className:"admin-muted",children:"No duplicate SEO titles found."})]})})]})]})}function B(){const[a,t]=p.useState(""),[d,c]=p.useState(""),i=p.useMemo(()=>({type:a||void 0,search:d||void 0}),[a,d]),r=o.seo.bulkRows.useQuery(i),[x,b]=p.useState({}),u=o.useUtils();p.useEffect(()=>{r.data&&b(Object.fromEntries(r.data.map(s=>[s.id,{metaTitle:s.metaTitle,metaDescription:s.metaDescription,focusKeyword:s.focusKeyword,robotsIndex:s.robotsIndex,canonical:s.canonical}])))},[r.data]);const v=o.seo.bulkSave.useMutation({onSuccess:({updated:s})=>{A.success(`${s} SEO rows saved.`),u.seo.bulkRows.invalidate(),u.seo.audit.invalidate()},onError:s=>A.error(s.message)}),n=r.data??[],f=(s,m,P)=>b(k=>({...k,[s]:{...k[s],[m]:P}}));return e.jsx(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:55",title:"Titles & Meta",description:"Bulk edit search snippets, focus keywords, canonicals and indexing controls without leaving the panel.",actions:e.jsxs("button",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:55",className:"admin-primary-button",disabled:!n.length||v.isPending,onClick:()=>v.mutate({rows:n.map(s=>({id:s.id,...x[s.id]}))}),children:[e.jsx($,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:55",size:14})," Save ",n.length," rows"]}),children:e.jsxs(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-toolbar",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-field",children:[e.jsx(N,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",size:14}),e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:d,onChange:s=>c(s.target.value),placeholder:"Filter by title"})]}),e.jsxs("select",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:a,onChange:s=>t(s.target.value),children:[e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:"",children:"All types"}),R.map(s=>e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:s,children:T[s].labelPlural},s))]}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-muted",children:[n.length," editable items"]})]}),e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-table-wrap",children:e.jsxs("table",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-table admin-bulk-table",children:[e.jsx("thead",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:[e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:"Content"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:"Focus keyword"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:"SEO title"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:"Meta description"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:"Index"})]})}),e.jsxs("tbody",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:[n.map(s=>e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:[e.jsxs("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:[e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",href:`/admin/content/${s.id}`,children:e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:s.title})}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-table-sub",children:[s.url," · ",s.seoScore,"/100"]})]}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:x[s.id]?.focu
1sKeyword??"",onChange:m=>f(s.id,"focusKeyword",m.target.value)})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",value:x[s.id]?.metaTitle??"",onChange:m=>f(s.id,"metaTitle",m.target.value)})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsx("textarea",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",rows:2,value:x[s.id]?.metaDescription??"",onChange:m=>f(s.id,"metaDescription",m.target.value)})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsxs("label",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-check",children:[e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",type:"checkbox",checked:x[s.id]?.robotsIndex??!1,onChange:m=>f(s.id,"robotsIndex",m.target.checked)})," Index"]})})]},s.id)),!n.length&&e.jsx("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",children:e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",colSpan:5,children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:56",className:"admin-empty",children:"No content found for the chosen filters."})})})]})]})})]})})}function D(){const a=o.seo.sitemapPreview.useQuery(),t=o.seo.robotsPreview.useQuery();return e.jsx(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",title:"Sitemap & Robots",description:"Review crawler directives and every URL set exposed to search engines.",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-grid-2",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",title:"XML sitemap",description:"Generated from published, indexable CMS content.",children:a.data?e.jsxs(e.Fragment,{children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-notice",children:[e.jsx(E,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",size:14}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:a.data.totalUrls})," URLs prepared for discovery."]}),e.jsxs("a",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",href:a.data.indexUrl,target:"_blank",rel:"noreferrer",children:["Open sitemap ",e.jsx(y,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",size:12})]})]}),e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-list",children:[a.data.byType.map(d=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:`score-chip ${d.included?"good":"fair"}`,children:d.count}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:d.label}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[d.included?"Included":"Excluded"," · ",d.url]}
1)]})]},d.type)),e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:`score-chip ${a.data.taxonomies.included?"good":"fair"}`,children:a.data.taxonomies.count}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:"Categories"}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",children:[a.data.taxonomies.included?"Included":"Excluded"," taxonomy URLs"]})]})]})]})]}):e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-route-loading",children:"Loading sitemap preview…"})}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",title:"robots.txt",description:"Controlled by the global indexing setting and custom rules.",children:t.data?e.jsxs(e.Fragment,{children:[e.jsxs("a",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-ghost-button",href:"/robots.txt",target:"_blank",rel:"noreferrer",children:["Open robots.txt ",e.jsx(y,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",size:12})]}),e.jsx("pre",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-code",children:t.data.content}),t.data.warnings.map(d=>e.jsx("p",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-muted",children:d},d))]}):e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:63",className:"admin-route-loading",children:"Loading robots preview…"})})]})})}function F(){const a=o.seo.linkGraph.useQuery();return e.jsxs(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",title:"Internal Link Manager",description:"Find orphan pages, link imbalance and broken references across the published content graph.",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-stat-grid",children:[e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",label:"Internal links",value:String(a.data?.totalInternalLinks??0),delta:"Links detected inside content bodies",tone:"blue",icon:C}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",label:"Orphan content",value:String(a.data?.orphans.length??0),delta:"Published pages with no inbound links",tone:"saffron",icon:j}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",label:"Broken links",value:String(a.data?.brokenInternal.length??0),delta:"References that do not resolve",tone:"lilac",icon:L})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-grid-2",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",title:"Orphan content",description:"Open each item in the editor and use the internal-link suggestions tab.",children:e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-list",children:[a.data?.orphans.map(t=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:[e.jsx(j,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",size:14}),e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",href:`/admin/content/${t.id}`,children:t.title})]},t.id))||e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-muted",children:"Loading…"}),a.data?.orphans.length===0&&e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-muted",children:"No orphan content found."})]})}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",title:"Broken internal references",description:"Update or remove links that point at missing pages.",children:e.jsxs("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-list",children:[a.data?.brokenInternal.map((t,d)=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:[e.jsx(j,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",size:14}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:[e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",href:`/admin/content/${t.id}`,children:t.title}),e.jsx("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:t.href})]})]},`${t.id}-${d}`))||e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-muted",children:"Loading…"}),a.data?.brokenInternal.length===0&&e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-muted",children:"No broken internal links foun
1d."})]})})]}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",title:"Link balance",description:"Pages with the fewest inbound links are listed first.",children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-table-wrap",children:e.jsxs("table",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"admin-table",children:[e.jsx("thead",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:[e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:"Content"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:"Inbound"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:"Outbound"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:"SEO score"})]})}),e.jsx("tbody",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:a.data?.pages.slice(0,50).map(t=>e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:[e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:e.jsx(h,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",href:`/admin/content/${t.id}`,children:t.title})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:t.inbound}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:t.outbound}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",children:e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:68",className:"score-chip fair",children:t.seoScore})})]},t.id))})]})})})]})}function M(){const a=o.seo.redirects.useQuery(),t=o.useUtils(),[d,c]=p.useState(""),[i,r]=p.useState(""),[x,b]=p.useState("301"),u=o.seo.createRedirect.useMutation({onSuccess:({warning:n})=>{A.success(n||"Redirect created."),c(""),r(""),t.seo.redirects.invalidate()},onError:n=>A.error(n.message)}),v=o.seo.deleteRedirect.useMutation({onSuccess:()=>{A.success("Redirect removed."),t.seo.redirects.invalidate()},onError:n=>A.error(n.message)});return e.jsxs(S,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",title:"Redirections",description:"Create safe redirects, resolve 404s, and prevent search engines from encountering dead paths.",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-grid-2",children:[e.jsxs(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",title:"Create redirect",description:"Source must start with /; target can be an internal path or a full URL.",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-form-grid",children:[e.jsxs("label",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"span-2",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Source URL"}),e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:d,onChange:n=>c(n.target.value),placeholder:"/old-recruitment-page"})]}),e.jsxs("label",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"span-2",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Target URL"}),e.jsx("input",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:i,onChange:n=>r(n.target.value),placeholder:"/jobs/new-recruitment"})]}),e.jsxs("label",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Status"}),e.jsxs("select",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:x,onChange:n=>b(n.target.value),children:[e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:"301",children:"301 Permanent"}),e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:"302",children:"302 Temporary"}),e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:"307",children:"307 Temporary"}),e.jsx("option",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",value:"410",children:"410 Gone"})]})]})]}),e.jsxs("button",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-primary-button",disabled:u.isPending,onClick:()=>u.mutate({source:d,target:i,statusCode:x,active:!0,note:""}),children:[e.jsx(L,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",size:14})," Create redirect"]})]}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",title:"404 monitor",description:"Unresolved paths collected from live traffic.",children:e.jsx("ul",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-list",children:a.data?.notFound.filter(n=>!n.resolved).slice(0,8).map(n=>e.jsxs("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[e.jsx(j,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",size:14}),e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[e.jsx("strong",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:n.path}),e.jsxs("small",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[n.hits," hits · last seen ",new Date(n.lastSeenAt).toLocaleDateString("en-IN")]})]})]},n.id))||e.jsx("li",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-muted",children:"No unresolved 404 paths recorded."})})})]}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",title:"Redirect rules",description:"Every rule is validated server-side for duplicate sources and simple loops.",children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-table-wrap",children:e.jsxs("table",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-table",children:[e.jsx("thead",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Source"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Target"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Status"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:"Hits"}),e.jsx("th",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79"})]})}),e.jsxs("tbody",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[a.data?.rows.map(n=>e.jsxs("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:[e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:n.source}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:n.target}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:e.jsx("span",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"status-pill published",children:n.statusCode})}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:n.hits}),e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:e.jsx("button",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-ghost-button danger",onClick:()=>{confirm("Remove this redirect?")&&v.mutate({id:n.id})},children:"Remove"})})]},n.id)),!a.data?.rows.length&&e.jsx("tr",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",children:e.jsx("td",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",colSpan:5,children:e.jsx("div",{"data-loc":"client/src/pages/admin/AdminSeo.tsx:79",className:"admin-empty",children:"No redirect rules configured."})})})]})]})})})]})}export{K as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.