PageSourceSearch

https://ikonen-mautner.com/assets/AdminSEO-Bod_vxHl.js

js ikonen-mautner.com collected 2026-09-28 01:18:31 UTC 15,804 bytes, 26 lines download raw bytes

1import{a as g,j as e}from"./vendor-query-DsnS5MQ4.js";import{m as T}from"./vendor-motion-DUGEeG9X.js";import{c as N,L as w,D as v,F as M,C as $}from"./index-jzTEKQWC.js";import{R as O}from"./refresh-cw-DAP5hORQ.js";import{I as _}from"./info-DNM6x9gT.js";import{L as I}from"./link-2-DB_LFFsZ.js";import{G as z}from"./globe-Br3jXsbk.js";import{F as S}from"./file-text-Cdcp-nRn.js";import{C as U}from"./clock-Dgk-91tJ.js";import{G as A}from"./gauge-COgLyqPi.js";import{C as h}from"./circle-check-big-5nTxu9Dq.js";import{E as D}from"./external-link-BEA6ZRLR.js";import{T as P}from"./triangle-alert-CvZ6nPnz.js";import"./vendor-react-DECcuEMU.js";/**
2 * @license lucide-react v0.475.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const H=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],G=N("Bot",H);/**
7 * @license lucide-react v0.475.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const B=[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]],L=N("CodeXml",B);/**
12 * @license lucide-react v0.475.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const q=[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5",key:"laymnq"}],["path",{d:"M8.5 8.5v.01",key:"ue8clq"}],["path",{d:"M16 15.5v.01",key:"14dtrp"}],["path",{d:"M12 12v.01",key:"u5ubse"}],["path",{d:"M11 17v.01",key:"1hyl5a"}],["path",{d:"M7 14v.01",key:"uct60s"}]],F=N("Cookie",q);/**
17 * @license lucide-react v0.475.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const W=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],V=N("Rocket",W);/**
22 * @license lucide-react v0.475.0 - ISC
23 *
24 * This source code is licensed under the ISC license.
25 * See the LICENSE file in the root directory of this source tree.
26 */const X=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],J=N("Server",X),y="https://ikonen-mautner.com",C=`${y}/sitemap.xml`,R=`${y}/robots.txt`,Q="https://search.google.com/search-console",K="https://search.google.com/test/rich-results",Y="https://pagespeed.web.dev/",b=1012,Z="7e0f0cb2feba5812a734a92b682e06501d3985b46d744b503d9ef248f0ae91eb",ee=[{name:"collection",pattern:/\/collection\//,minCount:50},{name:"knowledge",pattern:/\/knowledge-base\//,minCount:50},{name:"news",pattern:/\/(?:news|blog)\//,minCount:1},{name:"static",pattern:/^\/(?:collection|knowledge-base|news|gallery|contact|impressum|privacy|agb)$/,minCount:5}],te=["localhost","127.0.0.1",".preview.",".staging.","base44.app"];async function se(){const t=await fetch(C,{cache:"no-store"});if(!t.ok)return{status:"fail",detail:`HTTP ${t.status} — sitemap.xml not reachable`,urlCount:null,contentType:t.headers.get("content-type")||""};const s=t.headers.get("content-type")||"",a=await t.text();if(!a.startsWith("<?xml"))return{status:"fail",detail:"Response is not valid XML (missing <?xml declaration)",urlCount:null,contentType:s};const r=a.match(/<loc>/g),l=r?r.length:0,m=a.match(/<loc>[^<]*(\/admin|\/api|\/favorites)[^<]*<\/loc>/g)||[],i=(a.match(/<loc>([^<]+)<\/loc>/g)||[]).map(n=>n.replace(/<\/?loc>/g,"")),k=new Set(i),p=i.length-k.size;let c="pass";const o=[];l<b&&(c="warn",o.push(`URL count (${l}) is below production baseline (${b})`)),m.length>0&&(c="fail",o.push(`${m.length}
26 non-public URLs found (admin/api/favorites)`)),p>0&&(c="warn",o.push(`${p} duplicate URLs detected`)),s.includes("xml")||(c="warn",o.push(`Content-Type is "${s}" — expected application/xml`));for(const n of ee){const d=i.filter(E=>n.pattern.test(E));d.length<n.minCount&&(c="warn",o.push(`Route family "${n.name}" has only ${d.length} URLs (expected ≥${n.minCount})`))}const f=i.filter(n=>te.some(d=>n.includes(d)));return f.length>0&&(c="fail",o.push(`${f.length} URLs with invalid domains (localhost/preview/staging)`)),{status:c,detail:o.length>0?o.join(" · "):`Valid XML sitemap — baseline: ${b} URLs`,urlCount:l,contentType:s,baseline:b}}async function ae(){const t=await fetch(R,{cache:"no-store"});if(!t.ok)return{status:"fail",detail:`HTTP ${t.status} — robots.txt not reachable`};const s=await t.text(),a=`Sitemap: ${C}`;return s.includes(a)?s.includes("serveSitemap")||s.includes("/api/functions/")?{status:"warn",detail:"robots.txt still references internal API endpoints — should point only to /sitemap.xml"}:{status:"pass",detail:"robots.txt valid — Sitemap directive points to static /sitemap.xml"}:{status:"fail",detail:`Sitemap directive missing or incorrect — expected "${a}"`}}function fe(){var c;const[t,s]=g.useState({status:"loading",detail:"",urlCount:null}),[a,r]=g.useState({status:"loading",detail:""}),[l,m]=g.useState(null),[i,k]=g.useState(!1),p=g.useCallback(async()=>{var o,f;k(!0),s({status:"loading",detail:"Fetching sitemap.xml…"}),r({status:"loading",detail:"Fetching robots.txt…"});try{const[n,d]=await Promise.allSettled([se(),ae()]);s(n.status==="fulfilled"?n.value:{status:"fail",detail:((o=n.reason)==null?void 0:o.message)||"Fetch failed"}),r(d.status==="fulfilled"?d.value:{status:"fail",detail:((f=d.reason)==null?void 0:f.message)||"Fetch failed"})}finally{m(new Date),k(!1)}},[]);return g.useEffect(()=>{p()},[p]),e.jsxs("div",{className:"max-w-5xl mx-auto px-6 lg:px-12 py-12 lg:py-20",children:[e.jsxs(T.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},children:[e.jsxs("div",{className:"flex items-start justify-between gap-4 flex-wrap",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"font-heading text-3xl lg:text-4xl text-charcoal mb-2",children:"SEO Diagnostics"}),e.jsx("p",{className:"font-body text-sm text-charcoal/50 tracking-wide",children:"Read-only health monitoring · SEO delivery is handled automatically"})]}),e.jsxs("button",{onClick:p,disabled:i,className:"inline-flex items-center gap-2 font-body text-xs tracking-widest uppercase border border-bronze text-bronze px-4 py-2.5 hover:bg-bronze/5 disabled:opacity-50 transition-all",children:[i?e.jsx(w,{size:14,className:"animate-spin"}):e.jsx(O,{size:14}),i?"Checking…":"Re-run diagnostics"]})]}),l&&e.jsxs("p",{className:"font-body text-xs text-charcoal/40 mt-3",children:["Last checked: ",l.toLocaleString("de-AT")]})]}),e.jsxs("div",{className:"mt-8 mb-10 flex items-start gap-3 bg-cream/60 border border-bronze/20 p-4",children:[e.jsx(_,{size:16,className:"text-bronze mt-0.5 shrink-0"}),e.jsx("p",{className:"font-body text-sm text-charcoal/70 leading-relaxed",children:"SEO delivery is active and fully automated. A Cloudflare Worker intercepts bot traffic and injects SEO metadata (canonical, hreflang, JSON-LD) into the origin HTML at the edge. Canonical tags, structured data, and robots directives are handled automatically — no manual action is required from this page."})]}),e.jsx("h2",{className:"font-heading text-lg text-charcoal mb-4",children:"Delivery Status"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-10",children:[e.jsx(x,{icon:e.jsx(J,{size:18}),title:"Cloudflare SEO Worker",status:"pass",detail:"Edge SEO Injection — serves fully-rendered HTML to crawlers"}),e.jsx(x,{icon:e.jsx(G,{size:18}),title:"Googlebot HTML",status:"pass",detail:"Googlebot receives static HTML with injected SEO metadata"}),e.jsx(x,{icon:e.jsx(I,{size:18}),title:"Canonical Tags",status:"pass",detail:"Present on all pages — language-aware with hreflang"}),e.jsx(x,{icon:e.jsx(L,{size:18}
26),title:"JSON-LD Structured Data",status:"pass",detail:"Present — ArtGallery, Product, BreadcrumbList schemas"}),e.jsx(x,{icon:e.jsx(F,{size:18}),title:"Cookie Banner",status:"pass",detail:"Excluded from crawler HTML via edge injection"}),e.jsx(x,{icon:e.jsx(z,{size:18}),title:"Sitemap",status:t.status,detail:t.detail,value:t.urlCount!=null?`${t.urlCount} URLs`:null}),e.jsx(x,{icon:e.jsx(S,{size:18}),title:"robots.txt",status:a.status,detail:a.detail}),e.jsx(x,{icon:e.jsx(v,{size:18}),title:"Search Console",status:"pass",detail:"Sitemap submitted to Google Search Console"})]}),t.urlCount!=null&&e.jsxs("div",{className:"bg-cream/60 border border-bronze/20 p-6 mb-10",children:[e.jsx("h2",{className:"font-heading text-lg text-charcoal mb-4",children:"Sitemap Details"}),e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-5 gap-5",children:[e.jsx(j,{icon:e.jsx(z,{size:18,className:"text-bronze"}),label:"Total URLs",value:t.urlCount}),e.jsx(j,{icon:e.jsx(v,{size:18,className:"text-bronze"}),label:"Baseline",value:b,small:!0}),e.jsx(j,{icon:e.jsx(S,{size:18,className:"text-bronze"}),label:"Content-Type",value:(c=t.contentType)!=null&&c.includes("xml")?"application/xml":t.contentType||"—",small:!0}),e.jsx(j,{icon:e.jsx(U,{size:18,className:"text-bronze"}),label:"Last Checked",value:l?l.toLocaleString("de-AT",{hour:"2-digit",minute:"2-digit"}):"—",small:!0}),e.jsx(j,{icon:e.jsx(v,{size:18,className:t.status==="pass"?"text-green-500":"text-amber-500"}),label:"Status",value:t.status==="pass"?"Healthy":t.status==="warn"?"Warning":t.status==="fail"?"Error":"—",small:!0})]}),t.status==="pass"&&e.jsx("div",{className:"mt-4 p-3 bg-green-50 border border-green-200",children:e.jsxs("p",{className:"font-body text-xs text-green-800 leading-relaxed",children:[e.jsx("strong",{children:"Production baseline:"})," ",b," URLs · SHA-256: ",e.jsxs("code",{className:"font-mono text-xs",children:[Z.substring(0,16),"…"]})]})}),t.status!=="pass"&&e.jsx("div",{className:"mt-4 p-3 bg-amber-50 border border-amber-200",children:e.jsxs("p",{className:"font-body text-xs text-amber-800 leading-relaxed",children:[e.jsx("strong",{children:"Warning:"})," ",t.detail]})})]}),e.jsx("h2",{className:"font-heading text-lg text-charcoal mb-4",children:"External Tools & Resources"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-10",children:[e.jsx(u,{href:Q,icon:e.jsx(M,{size:18}),title:"Google Search Console",subtitle:"Indexing, coverage & sitemap status"}),e.jsx(u,{href:K,icon:e.jsx(L,{size:18}),title:"Rich Results Test",subtitle:"Validate structured data & JSON-LD"}),e.jsx(u,{href:Y,icon:e.jsx(A,{size:18}),title:"PageSpeed Insights",subtitle:"Core Web Vitals & performance"}),e.jsx(u,{href:C,icon:e.jsx(z,{size:18}),title:"sitemap.xml",subtitle:`${y}/sitemap.xml`}),e.jsx(u,{href:R,icon:e.jsx(S,{size:18}
26),title:"robots.txt",subtitle:`${y}/robots.txt`}),e.jsx(u,{href:`${y}/`,icon:e.jsx(V,{size:18}),title:"Live Homepage",subtitle:"View site as a regular visitor"})]}),e.jsxs("div",{className:"bg-cream/60 border border-bronze/20 p-6",children:[e.jsxs("h2",{className:"font-heading text-lg text-charcoal mb-3 flex items-center gap-2",children:[e.jsx(v,{size:16,className:"text-green-600"}),"SEO Delivery Architecture"]}),e.jsxs("div",{className:"space-y-2 font-body text-sm text-charcoal/70 leading-relaxed",children:[e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Cloudflare Worker"})," intercepts bot traffic (Googlebot, Bingbot, social crawlers) and injects SEO metadata into origin HTML at the edge."]})]}),e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Canonical tags"})," and ",e.jsx("strong",{children:"hreflang"})," are injected per-page with language-aware routing (",e.jsx("code",{className:"font-mono text-xs bg-muted px-1",children:"/en/"})," prefix)."]})]}),e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"JSON-LD"})," structured data (Organization, WebSite, Product, BreadcrumbList) is present on all content pages."]})]}),e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Cookie banner"})," is not included in crawler HTML — edge injection only adds SEO metadata."]})]}),e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Sitemap"})," is a static XML file at ",e.jsx("code",{className:"font-mono text-xs bg-muted px-1",children:"/sitemap.xml"})," with all canonical URLs."]})]}),e.jsxs("p",{className:"flex items-start gap-2",children:[e.jsx(h,{size:14,className:"text-green-500 mt-0.5 shrink-0"}),e.jsxs("span",{children:[e.jsx("strong",{children:"robots.txt"})," points directly to the static sitemap — no internal API endpoints exposed."]})]})]})]})]})}function x({icon:t,title:s,status:a,detail:r,value:l}){const m={pass:{icon:e.jsx(h,{size:16,className:"text-green-500"}),color:"text-green-700",bg:"bg-green-50",border:"border-green-200"},warn:{icon:e.jsx(P,{size:16,className:"text-amber-500"}),color:"text-amber-700",bg:"bg-amber-50",border:"border-amber-200"},fail:{icon:e.jsx($,{size:16,className:"text-red-500"}),color:"text-red-700",bg:"bg-red-50",border:"border-red-200"},loading:{icon:e.jsx(w,{size:16,className:"animate-spin text-bronze"}),color:"text-charcoal/50",bg:"bg-muted/30",border:"border-bronze/10"}},i=m[a]||m.loading;return e.jsxs("div",{className:`border p-5 ${i.border} ${i.bg}`,children:[e.jsxs("div",{className:"flex items-start justify-between gap-3 mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-bronze",children:t}),e.jsx("span",{className:"font-body text-sm tracking-wide text-charcoal",children:s})]}),i.icon]}),l&&e.jsx("p",{className:"font-heading text-2xl text-charcoal mb-1",children:l}),e.jsx("p",{className:`font-body text-xs ${i.color} leading-relaxed`,children:r})]})}function j({icon:t,label:s,value:a,small:r}){return e.jsxs("div",{className:"bg-cream/60 border border-bronze/20 p-5",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[t,e.jsx("span",{className:"font-body text-xs tracking-widest uppercase text-charcoal/40",children:s})]}),e.jsx("p",{className:`font-heading text-charcoal ${r?"text-base":"text-2xl"}`,children:a})]})}function u({href:t,icon:s,title:a,subtitle:r}){return e.jsxs("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"group flex items-center gap-3 border border-bronze/20 bg-cream/40 p-4 hover:bg-cream/80 hover:border-bronze/40 transition-all",children:[e.jsx("span",{className:"text-bronze shrink-0",children:s}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-body text-sm text-charcoal group-hover:text-bronze transition-colors",children:a}),e.jsx("p",{className:"font-body text-xs text-charcoal/50 truncate",children:r})]}),e.jsx(D,{size:14,className:"text-charcoal/30 group-hover:text-bronze shrink-0 transition-colors"})]})}
26export{fe 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.