Files
k 3cf7de7144 feat(seo/geo): WebSite+SearchAction, HowTo, DefinedTermSet, TechArticle, 20+ AI crawlers
SEO structured data (layout.tsx):
- WebSite schema with potentialAction/SearchAction → enables sitelinks
  search box in Google results
- SoftwareApplication: added alternateName array, applicationSubCategory,
  isAccessibleForFree, availability, screenshot, aggregateRating, expanded
  featureList with specifics
- Organization: added logo, contactPoint
- HowTo schema (6 steps, estimatedCost $0, tools list) for "how to set up
  Trump Alpha auto-trader" — gets HowTo rich result + cited by AI assistants
- DefinedTermSet in root layout (AHR999, Pi Cycle, Talks-vs-Trades, Funding
  Reversal) — LLMs use this for entity definitions
- FAQPage: added 6 search-intent questions ("how do I auto trade trump tweets",
  "bot that trades based on Trump posts", "how to know if KOL is dumping",
  "best time to buy Bitcoin in bear market", "what is AHR999", "funding rate")
- All uses of siteUrl + today refactored to _base/_today constants

Per-page structured data:
- methodology/page.tsx: TechArticle JSON-LD (headline, about[], author, dateModified)
- glossary/page.tsx: DefinedTermSet with all terms + URL anchors per term;
  buildGlossaryJsonLd() generates one DefinedTerm per entry; canonical fixed
  to /en/ (was /${locale}/)

Missing metadata added:
- contact: metadata with robots noindex (no SEO value in contact form)
- privacy: metadata + canonical /en/privacy
- terms: metadata + canonical /en/terms

robots.ts — 20+ AI crawler rules:
Added: OAI-SearchBot, Google-Extended, Googlebot-Extended,
meta-externalagent, FacebookBot, Applebot, Applebot-Extended,
cohere-ai, MistralAI-User, YouBot, Brave, CCBot, Slurp, DuckDuckBot,
YandexBot. Now covers Gemini/Google AI Overviews, Meta AI, Apple Siri,
Cohere, Mistral, Brave Leo, and Common Crawl training datasets.

tsc + next build clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 17:04:40 +08:00

62 lines
2.7 KiB
TypeScript

import type { Metadata } from 'next'
import { getLocale } from 'next-intl/server'
export const metadata: Metadata = {
title: 'Contact Us',
description: 'Get in touch with Trump Alpha for questions, feedback, or support. We respond within 24 hours.',
alternates: {
canonical: `${process.env.NEXT_PUBLIC_SITE_URL || 'https://trumpsignal.com'}/en/contact`,
},
robots: { index: false, follow: true }, // no SEO value in indexing a contact form
}
export default async function ContactPage() {
const locale = await getLocale()
const isZh = false // i18n shelved — Chinese branches kept as dead code for future revival; see messages/zh.json
return (
<div className="page" style={{ maxWidth: 560 }}>
<div className="page-head">
<div>
<h1 className="page-title">{isZh ? '联系我们' : 'Contact Us'}</h1>
<p className="page-sub">{isZh ? '问题、反馈或支持请求都可以从这里发来。' : 'Questions, feedback, or support requests.'}</p>
</div>
</div>
<div className="card" style={{ padding: 32 }}>
<form
action="mailto:support@bitnews.day"
method="get"
encType="text/plain"
>
<div className="field" style={{ marginBottom: 16 }}>
<label htmlFor="subject">{isZh ? '主题' : 'Subject'}</label>
<input id="subject" name="subject" type="text" placeholder={isZh ? '例如:机器人没有执行交易' : 'e.g. Bot not executing trades'} />
</div>
<div className="field" style={{ marginBottom: 24 }}>
<label htmlFor="body">{isZh ? '内容' : 'Message'}</label>
<textarea
id="body"
name="body"
rows={6}
placeholder={isZh ? '尽量详细描述你的问题或需求…' : 'Describe your issue or question in detail…'}
style={{ width: '100%', resize: 'vertical' }}
/>
</div>
<button type="submit" className="btn amber lg">
{isZh ? '用邮件客户端打开 →' : 'Open in mail client →'}
</button>
</form>
<div style={{ marginTop: 28, paddingTop: 20, borderTop: '1px solid var(--line)', fontSize: 13, color: 'var(--ink-3)', lineHeight: 1.6 }}>
<div style={{ marginBottom: 6 }}>{isZh ? '也可以直接发邮件给我们:' : 'You can also reach us directly:'}</div>
<div>
<a href="mailto:support@bitnews.day" style={{ color: 'var(--amber)' }}>support@bitnews.day</a>
</div>
<div style={{ marginTop: 8 }}>{isZh ? '通常会在 24 小时内回复。' : 'Response time: typically within 24 hours.'}</div>
</div>
</div>
</div>
)
}