Reportr uses Anthropic’s Claude 4.5 Sonnet to analyze SEO data and generate strategic recommendations. Every report includes 5 data-driven insights with specific action items, expected impact, and priority levels.
AI Cost: Insights generation costs approximately $0.008-0.015 per report. This cost is included in your Reportr subscription.
Reportr’s prompt is carefully engineered to generate specific, actionable insights:
AI Prompt (from insights-generator.ts)
const prompt = `Generate exactly 5 strategic recommendations based on this SEO data.Each recommendation MUST be:1. SPECIFIC to this client's actual data (reference specific keywords, pages, or metrics)2. ACTIONABLE with clear next steps 3. PRIORITIZED based on potential impactFor each recommendation provide:- title: Action-oriented headline (5-8 words)- description: 2-3 sentences explaining the opportunity and approach. Reference specific data points.- priority: "high", "medium", or "low" based on potential ROI- category: "keyword", "technical", "content", or "performance" - expectedImpact: Quantified expected outcome (e.g., "Potential 20% increase in organic traffic")- actionItems: Array of 2-3 specific action stepsExample of GOOD recommendation:{ "title": "Target Page 2 Keywords for Quick Wins", "description": "You have 12 keywords ranking positions 11-20 that are close to page 1. Keywords like 'digital marketing services' at position 14 with 450 monthly impressions represent immediate opportunities. Optimizing these pages could move them to page 1 within 30-60 days.", "priority": "high", "category": "keyword", "expectedImpact": "Moving 5 keywords to page 1 could generate 200+ additional monthly clicks", "actionItems": [ "Identify top 5 keywords in positions 11-15", "Add target keyword to H1 and first paragraph", "Build 2-3 internal links to each target page" ]}DATA TO ANALYZE:- Domain: ${domain}- Total Clicks: ${clicks} (${clicksChange}% change)- Total Impressions: ${impressions}- Average Position: ${position}- Organic Sessions: ${organicSessions} (${sessionsChange}% change)- Mobile Score: ${mobileScore}/100- Desktop Score: ${desktopScore}/100- Top Keywords: ${topKeywords.slice(0, 10).join(', ') || 'No data'}- Top Pages: ${topPages.slice(0, 5).join(', ') || 'No data'}Return ONLY valid JSON array with exactly 5 recommendations in this format:{ "insights": [ { "title": "Action-oriented title", "description": "Detailed explanation referencing specific data", "priority": "high|medium|low", "category": "keyword|technical|content|performance", "expectedImpact": "Quantified expected result", "actionItems": ["Step 1", "Step 2", "Step 3"], "dataSource": ["Google Search Console", "PageSpeed Insights", "etc."] } ]}Make insights specific, actionable, and data-driven. Reference actual metrics from the data provided.`;
The prompt includes a concrete example to guide Claude toward the desired output format and level of specificity.
“Moving 5 keywords from page 2 to page 1 could double organic traffic”“Improving CTR by 2% on top 10 keywords could generate 150+ additional monthly clicks”
Technical Improvements
“Improving mobile score to 85+ could increase mobile traffic by 15-25%”“Fixing Core Web Vitals could improve rankings by 10-20%”
Content Strategy
“Comprehensive content hubs can increase organic traffic by 25-40%”“Expanding thin content could capture 30% more long-tail keywords”
Performance Tracking
“Improved tracking leads to 30% better optimization ROI”“Enhanced conversion tracking could reveal $10K+ in attribution gaps”
{ "title": "Improve Mobile Page Speed", "description": "Your mobile page speed score is 52/100...", "priority": "high", "actionItems": [ "Compress and optimize all images to WebP format using tools like Squoosh", "Minimize JavaScript and CSS file sizes, defer non-critical scripts", "Implement lazy loading for images and videos below the fold" ]}
private getFallbackInsights(data?: Partial<ReportData>): AIInsight[] { const insights: AIInsight[] = []; // 1. Mobile Performance Check const mobileScore = data?.summary?.mobileScore || 50; if (mobileScore < 75) { insights.push({ id: `fallback-mobile-${timestamp}`, title: 'Improve Mobile Page Speed', description: `Your mobile page speed score is ${mobileScore}/100, which is below optimal performance. Mobile speed directly impacts both user experience and Google rankings, especially since mobile-first indexing.`, priority: mobileScore < 50 ? 'high' : 'medium', category: 'technical', expectedImpact: 'Improving to 85+ could increase mobile traffic by 15-25%', actionItems: [ 'Compress and optimize all images to WebP format', 'Minimize JavaScript and CSS file sizes', 'Implement lazy loading for non-critical content' ], dataSource: ['PageSpeed Insights'] }); } // 2. Keyword Position Opportunities const avgPosition = data?.summary?.averagePosition || 15; if (avgPosition > 8) { insights.push({ title: 'Target Page 2 Keywords for Quick Wins', description: `Your average keyword position is ${avgPosition.toFixed(1)}, indicating many keywords are on page 2-3. Focusing on keywords ranking positions 8-20 represents the highest ROI opportunities for quick ranking improvements.`, priority: 'high', category: 'keyword', expectedImpact: 'Moving 10 keywords from page 2 to page 1 could double organic traffic', actionItems: [ 'Identify keywords ranking positions 8-20 with high search volume', 'Optimize title tags and H1s for target keywords', 'Build strategic internal links to boost page authority' ], dataSource: ['Google Search Console'] }); } // ... 3 more fallback insights return insights.slice(0, 5);}
Fallback insights are still valuable and data-driven, just not AI-generated. They provide a safety net for uninterrupted report generation.
model Report { id String @id @default(cuid()) // ... other fields // AI Insights metadata aiInsights Json? // Array of insight objects aiInsightsSource String? // "ai" | "rule-based" | "fallback" aiInsightsGeneratedAt DateTime? // When insights were generated aiTokensUsed Int? // Token count for cost tracking aiCostUsd Float? // Cost in USD for this generation aiError String? // Error message if AI failed}
Here’s what actual Claude-generated insights look like:
High Priority: Keyword Opportunity
{ "title": "Capitalize on Page 2 Keyword Opportunities", "description": "Analysis shows 18 keywords currently ranking in positions 11-20, with a combined 12,400 monthly impressions but only 234 clicks. Keywords like 'local seo services' (position 13, 850 impressions) and 'seo audit tool' (position 16, 1,200 impressions) are prime candidates. Moving just 5 of these keywords to page 1 could increase your organic traffic by 35-40%.", "priority": "high", "category": "keyword", "expectedImpact": "Estimated 400-500 additional monthly clicks from improved rankings", "actionItems": [ "Export keywords ranking 11-20 from Search Console and prioritize by impression volume", "Add primary target keyword to page title, H1, and first 100 words of content", "Build 3-5 contextual internal links from high-authority pages to each target page", "Create FAQ section targeting related long-tail variations of main keyword" ], "dataSource": ["Google Search Console"]}
High Priority: Technical SEO
{ "title": "Address Critical Mobile Performance Issues", "description": "Your mobile PageSpeed score of 47/100 is significantly below Google's recommended threshold. The Largest Contentful Paint (LCP) is 4.2 seconds (should be under 2.5s) and Cumulative Layout Shift is 0.31 (should be under 0.1). Since Google uses mobile-first indexing, these issues directly impact rankings across all devices.", "priority": "high", "category": "technical", "expectedImpact": "Improving mobile score to 75+ could increase mobile organic traffic by 20-30%", "actionItems": [ "Implement modern image formats (WebP) and lazy loading to reduce LCP by 40-50%", "Set explicit width/height attributes on all images and ads to eliminate layout shifts", "Defer non-critical JavaScript and reduce main thread blocking time", "Enable text compression (gzip/brotli) to reduce initial page weight by 60-70%" ], "dataSource": ["PageSpeed Insights"]}
Medium Priority: Content Strategy
{ "title": "Expand Top-Performing Content for Greater Reach", "description": "Your blog post '/seo-basics-guide' generates 1,234 monthly clicks (highest on site) but has an average session duration of only 42 seconds and 68% bounce rate. This suggests users aren't finding comprehensive answers. The page currently ranks for 23 keywords, but keyword gap analysis shows 40+ related terms you're not targeting that competitors rank for.", "priority": "medium", "category": "content", "expectedImpact": "Expanding this content could capture 30-40 additional keyword rankings and reduce bounce rate by 15-20%", "actionItems": [ "Expand article from 800 to 2,500+ words covering all subtopics in depth", "Add structured data (FAQ schema) for featured snippet opportunities", "Create visual content (infographics, charts) to improve engagement metrics", "Build internal linking hub connecting to 5-10 related topic pages" ], "dataSource": ["Google Search Console", "Google Analytics"]}