Documentation
DashboardGet Started
Getting StartedAPI ReferenceFrameworksIntegration ExamplesTroubleshootingBest Practices
BotRender

Making SPAs search engine friendly, one render at a time.

Documentation

  • Getting Started
  • API Reference
  • Frameworks

Resources

  • Integration Examples
  • Troubleshooting
  • Best Practices

Support

  • Help & Support

© 2025 BotRender. All rights reserved.

    Integration Guide

    Integration Examples

    Get prerendering configured in your stack with copy-paste examples. Log in to see personalized configuration examples.

    For crawlers only: service.botrender.com serves cached HTML. On a cache miss it returns 404 to the crawler and queues a render job. The next crawl will receive the prerendered HTML. Optionally, your server can fall back to serving your SPA when a 404 is returned from BotRender (examples below). Human users are not affected and continue to get your normal app.
    Authentication required: All integrations must include your API key from Dashboard → Settings → API Configuration. SetX-Botrender-Tokenon Nginx/Apache, and passtokento the Express middleware (e.g.process.env.BOTRENDER_TOKEN). This ensures only authorized traffic can queue renders and record statistics.
    Why we don’t render in real time by default
    A worker-first, cache-then-serve approach is more reliablefor crawlers and rankings.
    • Crawlers have tight timeouts and crawl budgets. Real-time rendering can cause timeouts/soft-fails and reduced indexing.
    • Real-time headless rendering has variable latency (cold starts, third-party services, concurrency spikes).Cached delivery is consistently fast (under 200ms typical).
    • On cache miss, returning 404 quickly and queuing a render gives a fast response now and high-quality HTML on the next crawl.
    Real-time mode (optional)

    You can implement synchronous rendering, but expect slower responses for bots and higher risk of crawler timeouts.If you choose this, restrict it to a few critical routes, set strict timeouts, and prefer pre-warming via recache APIs.

    Get Your Personalized Configuration

    Log in to see your organization UID automatically included in all configuration examples below. This makes setup much faster and eliminates copy-paste errors.

    Log In
    Web Server
    Easy
    2 min
    Apache

    .htaccess Configuration

    Configure Apache server with .htaccess for seamless bot detection and prerendering
    Web Server
    Easy
    3 min
    Nginx

    Server Block Configuration

    High-performance Nginx configuration for production environments
    Framework
    Easy
    1 min
    Express.js

    Middleware Integration

    Add BotRender middleware to your Express.js application with full TypeScript support
    SPA Framework
    Easy
    2 min
    React SPA

    Express Server Setup

    Configure Express server for React Single Page Applications with Create React App
    SPA Framework
    Easy
    2 min
    Vue.js SPA

    Express Server Setup

    Express server configuration for Vue.js Single Page Applications
    SPA Framework
    Easy
    3 min
    Angular SPA

    Express Server Setup

    Express server configuration for Angular Single Page Applications
    Edge Computing
    Medium
    5 min
    Cloudflare Worker

    Edge Computing Integration

    Deploy BotRender integration at the edge with Cloudflare Workers for global performance
    Configuration Examples
    Copy-paste ready configurations for your tech stack

    Apache .htaccess Configuration

    Configure Apache server with .htaccess for seamless bot detection and prerendering

    Apache Configuration
    # Enable URL rewriting
    RewriteEngine On
    
    # Set your BotRender organization UID  
    SetEnv BOTRENDER_ORG_UID "YOUR_ORGANIZATION_UID"
    
    # Detect comprehensive list of crawlers, bots, and AI platforms
    RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|slurp|duckduckbot|baiduspider|yandexbot|sosospider|exabot|facebot|ia_archiver|chatgpt-user|gptbot|openai|anthropic-ai|claude-web|google-extended|googleother|bingpreview|perplexitybot|cohere-ai|cohere-crawler|bytespider|bytedance|you-bot|neevabot|huggingfacebot|ccbot|airesearchbot|diffbot|scaleai|facebookexternalhit|facebookbot|twitterbot|linkedinbot|pinterestbot|redditbot|discordbot|telegrambot|slackbot|whatsapp|vkshare|skypeuripreview|snapchat|embedly|quora|showyoubot|outbrain|flipboard|medium|tumblr|ahrefsbot|semrushbot|mj12bot|dotbot|rogerbot|blekkobot|domainappender|spbot|applebot|googlebot-mobile|bingbot-mobile|adsbot-google|mediapartners-google|archive.org_bot|wayback|wget|curl|w3c_validator|validator.nu|html5validator|csscheck|jigsaw|newsbot|feedfetcher|rssbot|feedly|inoreader|shoppingbot|pricebot|shopify|uptimerobot|pingdom|monitor|statuspage) [NC]
    
    # Skip static files
    RewriteCond %{REQUEST_URI} !\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|woff2|svg|eot)$ [NC]
    
    # Behavior on first crawl (cache miss):
    # - service.botrender.com returns 404 to the crawler and queues a render job
    # - Next crawl will receive the prerendered HTML from cache
    # Note: Human users are not affected; serve your app as normal.
    # Proxy the request to BotRender with organization UID
    RewriteRule ^(.*)$ https://service.botrender.com/%{ENV:BOTRENDER_ORG_UID}/%{HTTP_HOST}/$1 [P,L]
    
    # Set headers for proxied requests
    <IfModule mod_headers.c>
        RequestHeader set X-Botrender-Token "YOUR_TOKEN"
    </IfModule>
    
    # When BotRender returns 404 (cache miss), fall back to SPA index.html
    # This lets crawlers see your normal SPA on first crawl while a render job is queued
    ProxyErrorOverride On
    ErrorDocument 404 /index.html

    Next Steps:

    • • Replace YOUR_TOKEN with your API key from Dashboard Settings
    • • Test the configuration with a bot user agent
    • • Monitor your dashboard for crawler visits