Apps Www
SEO review: apps/www
Date: 2026-07-01
Scope: apps/www Next.js App Router metadata, canonical/Open Graph/Twitter tags, robots/sitemap behavior, structured data, headings/content semantics, public assets, and deployment headers. Existing user-changed files were not modified.
High severity#
1. robots.txt advertises a sitemap URL that the app does not publish#
Evidence
apps/www/public/robots.txt:5declaresSitemap: https://www.assistance.bg/sitemap.xml.apps/www/public/sitemap_www.xml:2is the only sitemap-like file inpublic/(urlsetbegins there); there is noapps/www/public/sitemap.xmland no App Routerapp/sitemap.ts.apps/www/next.config.mjs:75setsoutput: 'export', so only static files/routes generated at build time will be available.
Impact
Search engines requesting the advertised https://www.assistance.bg/sitemap.xml are likely to receive a 404, reducing crawl discovery for static marketing, service, pricing, runner, training, and case-study pages.
Recommended fix
Publish a real /sitemap.xml for apps/www and point robots.txt at it. Prefer a generated sitemap that covers current App Router routes and static content, or rename/copy sitemap_www.xml to sitemap.xml if it is intentionally complete.
2. Organization JSON-LD points at a missing logo asset#
Evidence
apps/www/lib/constants.ts:46definesORGANIZATION_LOGO_PATH = '/images/og/assistance-logo.png'.apps/www/components/JsonLd.tsx:36uses that path as theOrganization.logo;apps/www/components/JsonLd.tsx:140uses it forBlogPosting.publisher.logo.- File check found
apps/www/public/images/og/assistance-og.png, but notapps/www/public/images/og/assistance-logo.png.
Impact
Structured-data consumers receive a broken logo URL, which can invalidate or downgrade rich-result eligibility for organization and article-like entities.
Recommended fix
Add the referenced logo asset at public/images/og/assistance-logo.png or update ORGANIZATION_LOGO_PATH to an existing crawlable logo image.
Medium severity#
3. Several metadata blocks hard-code the apex domain instead of the canonical www origin#
Evidence
- Global metadata uses
SITE_ORIGINandmetadataBase(apps/www/app/layout.tsx:42,apps/www/app/layout.tsx:54), andSITE_ORIGINresolves production tohttps://www.assistance.bg(apps/www/lib/constants.ts:36-42). - Some pages bypass that shared helper and hard-code
https://assistance.bg, includingapps/www/app/about/page.tsx:12-14,apps/www/app/saas/page.tsx:31-33,apps/www/app/(pages)/company/page.tsx:11-13,apps/www/app/(pages)/customers/page.tsx:16-18,apps/www/app/(pages)/events/page.tsx:16-18,apps/www/app/(pages)/support/page.tsx:24-26,apps/www/app/(pages)/compare/[slug]/page.tsx:31-33, andapps/www/app/runners/[slug]/page.tsx:119-121.
Impact
Open Graph URLs/images and some per-page metadata disagree with the declared production origin. If the apex and www both resolve, crawlers may see mixed canonical signals and social previews may cache separate URL identities.
Recommended fix
Use pageMetadata() or SITE_ORIGIN consistently for page-level metadata. If the apex should be canonical, update SITE_ORIGIN, robots.txt, and headers together; otherwise migrate hard-coded https://assistance.bg metadata to https://www.assistance.bg.
4. Some indexable pages define Open Graph metadata without explicit canonical alternates#
Evidence
apps/www/app/about/page.tsx:5-14defines title/description/Open Graph, but noalternates.canonical.- The shared helper does set a canonical (
apps/www/lib/metadata.ts:23-26), and many newer pages use it, for exampleapps/www/app/page.tsx:21-27.
Impact
Pages without explicit canonical alternates rely on inherited/root behavior instead of asserting their own URL. This weakens duplicate handling for routes that may also be reachable through redirects, apex-vs-www variants, or campaign links.
Recommended fix
Convert hand-written metadata blocks for public marketing pages to pageMetadata() or add explicit alternates.canonical values.
Low severity#
5. Web app manifest copy still describes an old Postgres platform positioning#
Evidence
apps/www/public/favicon/manifest.json:2-4names the appAssistancebut describes it asThe Postgres development platform.- Current site metadata positions the product as DevOps/SRE/cloud infrastructure services (
apps/www/lib/constants.ts:43-45,apps/www/app/page.tsx:14-17).
Impact
This does not affect normal ranking directly, but installed-app metadata and some crawler previews can surface stale product positioning.
Recommended fix
Update the manifest description to match the current DevOps/SRE/Kubernetes consulting positioning.
Positive findings#
- Root metadata includes
metadataBase, default title/description, Open Graph image dimensions, Twitter card fields, and favicon/apple icon declarations (apps/www/app/layout.tsx:42-72). - The shared
pageMetadata()helper emits absolute canonical, Open Graph, and Twitter image URLs from the same origin (apps/www/lib/metadata.ts:12-48). - The homepage includes both site-wide
OrganizationJSON-LD via root layout andWebSiteJSON-LD (apps/www/app/layout.tsx:97,apps/www/app/page.tsx:47). - Key service/resource pages add domain-relevant
Service,BreadcrumbList, andFAQPageJSON-LD (apps/www/app/consulting/page.tsx:120-130,apps/www/app/infrastructure/page.tsx:157-167,apps/www/app/runners/page.tsx:127-140,apps/www/app/pricing/page.tsx:17-31). - Sensitive auth/dashboard entry points are explicitly noindexed where expected (
apps/www/app/dashboard/sign-in/page.tsx:7), and deployment headers block indexing on preview hosts (apps/www/public/_headers:28-34). - Primary marketing and commercial pages use real
<h1>headings in the rendered components, for example homepage hero (apps/www/components/Hero/HeroStatic.tsx:76), pricing (apps/www/app/pricing/PricingContent.tsx:33), services (apps/www/app/(pages)/services/ServicesContent.tsx:350), and case studies (apps/www/app/case-studies/CaseStudiesListClient.tsx:142).