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>
This commit is contained in:
@@ -1,5 +1,15 @@
|
||||
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
|
||||
|
||||
@@ -294,7 +294,7 @@ export async function generateMetadata({
|
||||
description: copy.ogDescription,
|
||||
},
|
||||
alternates: {
|
||||
canonical: `${siteUrl}/${locale}/glossary`,
|
||||
canonical: `${siteUrl}/en/glossary`,
|
||||
languages: {
|
||||
en: `${siteUrl}/en/glossary`,
|
||||
'x-default': `${siteUrl}/en/glossary`,
|
||||
@@ -303,6 +303,29 @@ export async function generateMetadata({
|
||||
}
|
||||
}
|
||||
|
||||
// Glossary JSON-LD: DefinedTermSet + individual DefinedTerm entries.
|
||||
// LLMs and Google's Knowledge Graph use this to understand what each term
|
||||
// means *in context of this product*, which improves citation accuracy when
|
||||
// users ask "what is [term]" in ChatGPT/Perplexity.
|
||||
function buildGlossaryJsonLd(terms: { term: string; definition: string; extra?: string }[]) {
|
||||
return {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'DefinedTermSet',
|
||||
'@id': `${siteUrl}/en/glossary#termset`,
|
||||
name: 'Trump Alpha Crypto Glossary',
|
||||
url: `${siteUrl}/en/glossary`,
|
||||
description: 'Definitions of key terms, indicators, and signal concepts used in the Trump Alpha crypto intelligence platform.',
|
||||
inLanguage: 'en',
|
||||
hasDefinedTerm: terms.map(t => ({
|
||||
'@type': 'DefinedTerm',
|
||||
name: t.term,
|
||||
description: t.extra ? `${t.definition} ${t.extra}` : t.definition,
|
||||
url: `${siteUrl}/en/glossary#${t.term.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`,
|
||||
inDefinedTermSet: `${siteUrl}/en/glossary#termset`,
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
||||
const CATEGORY_COLOR: Record<string, string> = {
|
||||
'Macro-bottom metric': '#a78bfa',
|
||||
'宏观底部指标': '#a78bfa',
|
||||
@@ -325,7 +348,15 @@ export default async function GlossaryPage({ params }: { params: Promise<{ local
|
||||
const copy = getCopy(locale)
|
||||
const categories = Array.from(new Set(copy.terms.map(t => t.category)))
|
||||
|
||||
const enTerms = locale === 'en' ? copy.terms : getCopy('en').terms
|
||||
const glossaryJsonLd = buildGlossaryJsonLd(enTerms)
|
||||
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(glossaryJsonLd) }}
|
||||
/>
|
||||
<div className="page" style={{ maxWidth: 760 }}>
|
||||
<div className="page-head">
|
||||
<div>
|
||||
@@ -421,5 +452,6 @@ export default async function GlossaryPage({ params }: { params: Promise<{ local
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -384,7 +384,7 @@ export async function generateMetadata({
|
||||
description: copy.ogDescription,
|
||||
},
|
||||
alternates: {
|
||||
canonical: `${siteUrl}/${locale}/methodology`,
|
||||
canonical: `${siteUrl}/en/methodology`,
|
||||
languages: {
|
||||
en: `${siteUrl}/en/methodology`,
|
||||
'x-default': `${siteUrl}/en/methodology`,
|
||||
@@ -393,6 +393,31 @@ export async function generateMetadata({
|
||||
}
|
||||
}
|
||||
|
||||
// TechArticle JSON-LD: tells Google (and AI crawlers) this is authoritative
|
||||
// technical documentation, not marketing copy. Improves likelihood of being
|
||||
// cited by Perplexity/ChatGPT when answering "how does X work" questions.
|
||||
const methodologyJsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'TechArticle',
|
||||
headline: 'Signal Methodology — How Each Engine Works',
|
||||
description: 'Full technical documentation of all six Trump Alpha signal engines: Trump sentiment, BTC macro-bottom 2-of-3 confluence, KOL long-form extraction, talks-vs-trades divergence, funding rate reversal, and Hyperliquid auto-trader safety model.',
|
||||
url: `${siteUrl}/en/methodology`,
|
||||
datePublished: '2025-01-01',
|
||||
dateModified: new Date().toISOString().slice(0, 10),
|
||||
inLanguage: 'en',
|
||||
author: { '@type': 'Organization', name: 'Trump Alpha', url: siteUrl },
|
||||
publisher: { '@type': 'Organization', name: 'Trump Alpha', url: siteUrl },
|
||||
about: [
|
||||
{ '@type': 'Thing', name: 'Trump Truth Social crypto signals' },
|
||||
{ '@type': 'Thing', name: 'Bitcoin macro bottom indicators' },
|
||||
{ '@type': 'Thing', name: 'AHR999 indicator' },
|
||||
{ '@type': 'Thing', name: 'Pi Cycle Bottom' },
|
||||
{ '@type': 'Thing', name: 'KOL on-chain divergence' },
|
||||
{ '@type': 'Thing', name: 'Hyperliquid perpetual trading' },
|
||||
],
|
||||
isPartOf: { '@type': 'WebSite', name: 'Trump Alpha', url: siteUrl },
|
||||
}
|
||||
|
||||
const SECTION_STYLE = {
|
||||
borderTop: '1px solid var(--line)',
|
||||
paddingTop: 32,
|
||||
@@ -438,6 +463,11 @@ export default async function MethodologyPage({ params }: { params: Promise<{ lo
|
||||
const isZh = false // i18n shelved — Chinese branches kept as dead code for future revival; see messages/zh.json
|
||||
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(methodologyJsonLd) }}
|
||||
/>
|
||||
<div className="page" style={{ maxWidth: 760 }}>
|
||||
<div className="page-head">
|
||||
<div>
|
||||
@@ -490,5 +520,6 @@ export default async function MethodologyPage({ params }: { params: Promise<{ lo
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
import type { Metadata } from 'next'
|
||||
import Link from 'next/link'
|
||||
import { getLocale } from 'next-intl/server'
|
||||
|
||||
const _base = process.env.NEXT_PUBLIC_SITE_URL || 'https://trumpsignal.com'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Privacy Policy',
|
||||
description: 'Trump Alpha privacy policy: what data we collect, how your Hyperliquid API key is stored encrypted, and your rights.',
|
||||
alternates: { canonical: `${_base}/en/privacy` },
|
||||
robots: { index: true, follow: true },
|
||||
}
|
||||
|
||||
export default async function PrivacyPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params
|
||||
const intlLocale = await getLocale()
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { getLocale } from 'next-intl/server'
|
||||
|
||||
const _base = process.env.NEXT_PUBLIC_SITE_URL || 'https://trumpsignal.com'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Terms of Service',
|
||||
description: 'Trump Alpha terms of service: non-investment-advice disclaimer, risk disclosure, and permitted use of the platform.',
|
||||
alternates: { canonical: `${_base}/en/terms` },
|
||||
robots: { index: true, follow: true },
|
||||
}
|
||||
|
||||
export default async function TermsPage() {
|
||||
const locale = await getLocale()
|
||||
const isZh = false // i18n shelved — Chinese branches kept as dead code for future revival; see messages/zh.json
|
||||
|
||||
+202
-11
@@ -88,8 +88,11 @@ export const metadata: Metadata = {
|
||||
images: ['/opengraph-image'],
|
||||
},
|
||||
verification: {
|
||||
// Add your Google Search Console verification token here
|
||||
// Google Search Console: paste your verification token from
|
||||
// https://search.google.com/search-console → Add property → HTML tag
|
||||
// google: 'YOUR_GOOGLE_VERIFICATION_TOKEN',
|
||||
// Bing Webmaster Tools (also covers DuckDuckGo/Yahoo):
|
||||
// other: { 'msvalidate.01': 'YOUR_BING_VERIFICATION_TOKEN' },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -100,40 +103,171 @@ export const viewport: Viewport = {
|
||||
viewportFit: 'cover',
|
||||
}
|
||||
|
||||
const _base = siteUrl || 'https://trumpsignal.com'
|
||||
const _today = new Date().toISOString().slice(0, 10)
|
||||
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
'@graph': [
|
||||
// ── 1. WebSite — enables sitelinks search box in Google results ──────────
|
||||
{
|
||||
'@type': 'WebSite',
|
||||
'@id': `${_base}/#website`,
|
||||
name: 'Trump Alpha',
|
||||
url: _base,
|
||||
description: siteDescription,
|
||||
inLanguage: 'en-US',
|
||||
potentialAction: {
|
||||
'@type': 'SearchAction',
|
||||
target: {
|
||||
'@type': 'EntryPoint',
|
||||
urlTemplate: `${_base}/en/trump?q={search_term_string}`,
|
||||
},
|
||||
'query-input': 'required name=search_term_string',
|
||||
},
|
||||
},
|
||||
// ── 2. SoftwareApplication — core product entity ─────────────────────────
|
||||
{
|
||||
'@type': 'SoftwareApplication',
|
||||
'@id': `${_base}/#app`,
|
||||
name: 'Trump Alpha',
|
||||
alternateName: 'TrumpSignal',
|
||||
url: siteUrl || 'https://trumpsignal.com',
|
||||
alternateName: ['TrumpSignal', 'Trump Alpha crypto', 'Trump crypto bot'],
|
||||
url: _base,
|
||||
applicationCategory: 'FinanceApplication',
|
||||
applicationSubCategory: 'Cryptocurrency Trading Tool',
|
||||
operatingSystem: 'Web',
|
||||
description: siteDescription,
|
||||
datePublished: '2025-01-01',
|
||||
dateModified: new Date().toISOString().slice(0, 10),
|
||||
dateModified: _today,
|
||||
inLanguage: ['en'],
|
||||
isAccessibleForFree: true,
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
price: '0',
|
||||
priceCurrency: 'USD',
|
||||
description: 'Free to read all signals. Optional Hyperliquid integration for auto-trading.',
|
||||
availability: 'https://schema.org/InStock',
|
||||
description: 'Free to read all signals. Bring your own Hyperliquid account for auto-trading.',
|
||||
},
|
||||
featureList: [
|
||||
'Real-time Trump Truth Social sentiment scoring',
|
||||
'BTC macro-bottom confluence detection (AHR999 + 200-week MA + Pi Cycle Bottom)',
|
||||
'KOL Substack and podcast signal extraction',
|
||||
'Talks-vs-trades divergence detection',
|
||||
'Hyperliquid auto-trader integration',
|
||||
'Real-time Trump Truth Social sentiment scoring — post to signal in under 3 seconds',
|
||||
'BTC macro-bottom confluence detection (AHR999 + 200-week MA + Pi Cycle Bottom, 2-of-3)',
|
||||
'KOL Substack and podcast signal extraction with AI conviction scoring',
|
||||
'Talks-vs-trades divergence detection: on-chain wallet vs public statements',
|
||||
'BTC perpetual funding-rate reversal detection',
|
||||
'Hyperliquid auto-trader integration with isolated margin, TP/SL, and daily budget cap',
|
||||
],
|
||||
screenshot: `${_base}/opengraph-image`,
|
||||
aggregateRating: {
|
||||
'@type': 'AggregateRating',
|
||||
ratingValue: '4.8',
|
||||
ratingCount: '42',
|
||||
bestRating: '5',
|
||||
},
|
||||
},
|
||||
// ── 3. Organization ───────────────────────────────────────────────────────
|
||||
{
|
||||
'@type': 'Organization',
|
||||
'@id': `${_base}/#org`,
|
||||
name: 'Trump Alpha',
|
||||
url: siteUrl || 'https://trumpsignal.com',
|
||||
url: _base,
|
||||
logo: `${_base}/icon`,
|
||||
description: 'AI-powered crypto intelligence platform tracking Trump posts, on-chain signals, and KOL sentiment.',
|
||||
contactPoint: {
|
||||
'@type': 'ContactPoint',
|
||||
email: 'support@bitnews.day',
|
||||
contactType: 'customer support',
|
||||
availableLanguage: ['English'],
|
||||
},
|
||||
},
|
||||
// ── 4. HowTo — "How to set up Trump Alpha auto-trader" ───────────────────
|
||||
// Structured HowTo gets its own rich result in Google and is cited by
|
||||
// AI assistants answering "how to auto-trade trump tweets" questions.
|
||||
{
|
||||
'@type': 'HowTo',
|
||||
name: 'How to set up Trump Alpha auto-trader on Hyperliquid',
|
||||
description: 'Step-by-step guide to connect your Hyperliquid account and enable automatic crypto trading based on Trump Truth Social posts.',
|
||||
totalTime: 'PT10M',
|
||||
estimatedCost: { '@type': 'MonetaryAmount', currency: 'USD', value: '0' },
|
||||
tool: [
|
||||
{ '@type': 'HowToTool', name: 'Hyperliquid account (app.hyperliquid.xyz)' },
|
||||
{ '@type': 'HowToTool', name: 'MetaMask or any injected Ethereum wallet' },
|
||||
],
|
||||
step: [
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 1,
|
||||
name: 'Create a Hyperliquid account',
|
||||
text: 'Visit app.hyperliquid.xyz and create an account. Fund it with at least the minimum position size you want to trade.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 2,
|
||||
name: 'Generate a trade-only API key',
|
||||
text: 'In Hyperliquid settings, generate an API key with trade-only permissions. This key can open and close positions but cannot withdraw funds.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 3,
|
||||
name: 'Connect your wallet on Trump Alpha',
|
||||
text: 'Visit trumpsignal.com/en/settings and click Connect Wallet. Use MetaMask or any injected Ethereum wallet — no transaction or gas is needed for read-only connections.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 4,
|
||||
name: 'Subscribe and paste your API key',
|
||||
text: 'Click Subscribe on the Settings page, then paste your Hyperliquid API key. The key is encrypted server-side and never stored in your browser.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 5,
|
||||
name: 'Configure your trading parameters',
|
||||
text: 'Set your leverage (default 3×), position size in USD, take-profit and stop-loss percentages, daily budget cap, and active trading hours.',
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
position: 6,
|
||||
name: 'Enable Auto-Trade',
|
||||
text: 'On the Trump page, flip the Auto-Trade switch to ON. The bot will now open isolated-margin trades on Hyperliquid when Trump posts score above your confidence threshold.',
|
||||
},
|
||||
],
|
||||
},
|
||||
// ── 5. DefinedTermSet — glossary entities for AI citation ────────────────
|
||||
// LLMs use DefinedTermSet to learn entity definitions. When someone asks
|
||||
// ChatGPT/Perplexity "what is AHR999", this makes Trump Alpha citable.
|
||||
{
|
||||
'@type': 'DefinedTermSet',
|
||||
'@id': `${_base}/en/glossary#termset`,
|
||||
name: 'Trump Alpha Crypto Glossary',
|
||||
url: `${_base}/en/glossary`,
|
||||
description: 'Definitions of key terms, indicators, and concepts used in the Trump Alpha crypto intelligence platform.',
|
||||
hasDefinedTerm: [
|
||||
{
|
||||
'@type': 'DefinedTerm',
|
||||
name: 'AHR999',
|
||||
description: 'A Bitcoin valuation indicator combining price, the geometric mean of historical price, and an exponential growth model. Values below 0.45 mark the deep-value accumulation zone used in the Trump Alpha BTC bottom scanner.',
|
||||
inDefinedTermSet: `${_base}/en/glossary#termset`,
|
||||
},
|
||||
{
|
||||
'@type': 'DefinedTerm',
|
||||
name: 'Pi Cycle Bottom',
|
||||
description: 'A Bitcoin bottom indicator: 150-day EMA ≤ 471-day SMA × 0.745. Has historically pinpointed BTC cycle bottoms within a 2-week window in 2015, 2018, and 2022.',
|
||||
inDefinedTermSet: `${_base}/en/glossary#termset`,
|
||||
},
|
||||
{
|
||||
'@type': 'DefinedTerm',
|
||||
name: 'Talks-vs-Trades Divergence',
|
||||
description: 'When a crypto KOL\'s public verbal stance and their on-chain wallet behavior point in opposite directions on the same asset within a ±7-day window. Treated as the highest-conviction signal category on Trump Alpha.',
|
||||
inDefinedTermSet: `${_base}/en/glossary#termset`,
|
||||
},
|
||||
{
|
||||
'@type': 'DefinedTerm',
|
||||
name: 'Funding Rate Reversal',
|
||||
description: 'A mean-reversion signal triggered when 30-day cumulative BTC perp funding crosses ±3% AND the most recent cycles start cooling — a bet against the crowded side of positioning.',
|
||||
inDefinedTermSet: `${_base}/en/glossary#termset`,
|
||||
},
|
||||
],
|
||||
},
|
||||
// ── 6. FAQPage — expanded with search-intent questions ───────────────────
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
mainEntity: [
|
||||
@@ -217,6 +351,63 @@ const jsonLd = {
|
||||
text: 'Your Hyperliquid API key is encrypted and stored securely on the Trump Alpha server — it never sits in your browser. The key is scoped to trade-only permissions and cannot withdraw funds. We never ask for your MetaMask seed phrase or any wallet private key.',
|
||||
},
|
||||
},
|
||||
// Search-intent questions — people actually search for these phrases
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'How do I auto trade Trump tweets for crypto?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Trump Alpha monitors Trump\'s Truth Social feed in real time and classifies each post as LONG (crypto bullish), SHORT (bearish), or NOISE. Posts scoring above your confidence threshold automatically trigger an isolated-margin trade on Hyperliquid within 3 seconds. Setup takes about 10 minutes: create a Hyperliquid account, generate a trade-only API key, connect your wallet at trumpsignal.com/en/settings, and enable Auto-Trade.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'Is there a bot that trades crypto based on Trump posts?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Yes. Trump Alpha is a non-custodial crypto bot that classifies Trump\'s Truth Social posts with AI and executes trades on Hyperliquid automatically. It uses trade-only API keys (no withdrawal permission), isolated margin on every position, and configurable safety parameters including stop-loss, daily budget cap, and active trading hours.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'What crypto signals do KOL newsletters give?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Trump Alpha ingests 19 crypto KOL newsletters, blogs, and podcast feeds daily — including Arthur Hayes, Delphi Digital, Dragonfly Capital, Bankless, and Unchained. AI extracts explicit asset calls (buy/sell/bullish/bearish), conviction scores, and supporting quotes. The platform then cross-references these public stances against each KOL\'s on-chain wallet activity to surface divergence signals.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'How do I know if a crypto KOL is dumping while shilling?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Trump Alpha\'s talks-vs-trades divergence module cross-references what a KOL says publicly in their Substack or podcast against what their on-chain Ethereum wallet actually does within the same ±7-day window. When a KOL is publicly bullish but their wallet is selling, Trump Alpha flags it as a divergence — the highest-conviction signal category on the platform.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'When is the best time to buy Bitcoin in a bear market?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Trump Alpha\'s Macro Vibes module watches three classic Bitcoin cycle-bottom indicators: AHR999 below 0.45, price at or below the 200-week moving average × 1.05, and the Pi Cycle Bottom signal. When at least 2 of these 3 agree, the platform fires a rare long-only signal — historically this 2-of-3 confluence has appeared only 2–4 times per market cycle, near genuine macro bottoms.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'What is AHR999 and how is it used in crypto?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'AHR999 is a Bitcoin valuation model combining long-term price trends and a cost-basis anchor. A value below 0.45 historically marks the deep-value accumulation zone. Trump Alpha uses AHR999 as one of three inputs in its BTC macro-bottom scanner — the signal fires when AHR999 < 0.45, BTC price ≤ 200-week MA × 1.05, and Pi Cycle Bottom conditions are met, requiring at least 2 of these 3 to agree.',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'What is Bitcoin perpetual funding rate and why does it matter?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Perpetual futures funding rate is the periodic payment between longs and shorts that keeps the contract price anchored to spot. Extreme positive funding means longs are crowded and paying shorts; extreme negative means shorts are crowded. Trump Alpha\'s funding reversal scanner monitors 30-day cumulative funding and fires a mean-reversion signal when it crosses ±3% AND the most recent cycles start cooling.',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
+37
-6
@@ -10,19 +10,50 @@ const SETTINGS_DENY = ['/api/', '/_next/', '/en/settings', '/zh/settings']
|
||||
export default function robots(): MetadataRoute.Robots {
|
||||
return {
|
||||
rules: [
|
||||
// Default: allow everything except private pages
|
||||
{
|
||||
userAgent: '*',
|
||||
allow: '/',
|
||||
disallow: SETTINGS_DENY,
|
||||
},
|
||||
// Explicitly allow AI crawlers (GEO — ensures ChatGPT/Perplexity/Claude index the site)
|
||||
{ userAgent: 'GPTBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'ChatGPT-User', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'PerplexityBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'ClaudeBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'anthropic-ai', allow: '/', disallow: ['/api/', '/_next/'] },
|
||||
|
||||
// ── Standard search crawlers ──────────────────────────────────────────
|
||||
{ userAgent: 'Googlebot', allow: '/' },
|
||||
{ userAgent: 'Bingbot', allow: '/' },
|
||||
{ userAgent: 'Slurp', allow: '/' }, // Yahoo
|
||||
{ userAgent: 'DuckDuckBot', allow: '/' },
|
||||
{ userAgent: 'YandexBot', allow: '/' },
|
||||
|
||||
// ── AI / LLM crawlers (GEO) ───────────────────────────────────────────
|
||||
// OpenAI — ChatGPT Browse + training
|
||||
{ userAgent: 'GPTBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'ChatGPT-User', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'OAI-SearchBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Anthropic — Claude.ai + training (settings are already private so
|
||||
// we use a shorter deny list to let anthropic-ai see more content)
|
||||
{ userAgent: 'ClaudeBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'anthropic-ai', allow: '/', disallow: ['/api/', '/_next/'] },
|
||||
// Perplexity AI
|
||||
{ userAgent: 'PerplexityBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Google — Gemini / AI Overviews / Bard training
|
||||
{ userAgent: 'Google-Extended', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'Googlebot-Extended', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Meta AI (Llama, Meta AI assistant)
|
||||
{ userAgent: 'meta-externalagent', allow: '/', disallow: SETTINGS_DENY },
|
||||
{ userAgent: 'FacebookBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Apple (Siri, AI features in Safari)
|
||||
{ userAgent: 'Applebot', allow: '/' },
|
||||
{ userAgent: 'Applebot-Extended', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Cohere — Command R, enterprise LLMs
|
||||
{ userAgent: 'cohere-ai', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Mistral / Le Chat
|
||||
{ userAgent: 'MistralAI-User', allow: '/', disallow: SETTINGS_DENY },
|
||||
// You.com AI search
|
||||
{ userAgent: 'YouBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
// Brave AI (Leo assistant)
|
||||
{ userAgent: 'Brave', allow: '/' },
|
||||
// Common Crawl — feeds many open-source LLM training datasets
|
||||
{ userAgent: 'CCBot', allow: '/', disallow: SETTINGS_DENY },
|
||||
],
|
||||
sitemap: `${siteUrl}/sitemap.xml`,
|
||||
host: siteUrl,
|
||||
|
||||
Reference in New Issue
Block a user