What is Bluesky Cardyb?
Bluesky Cardyb fetches web page metadata to generate link card previews when URLs are shared on the Bluesky social network, which is built on the AT Protocol. The bot retrieves Open Graph tags, page titles, descriptions, and thumbnail images to create rich link cards in Bluesky posts. As Bluesky grows as a decentralized social media alternative, this bot is increasingly common in server logs. It respects robots.txt directives.
User Agent String
Bluesky Cardyb/1.0
Copy
How to Control Bluesky Cardyb Block Completely To prevent Bluesky Cardyb from accessing your entire website, add this to your robots.txt file:
User-agent: Bluesky
Disallow: /
Block Specific Directories To restrict access to certain parts of your site while allowing others:
User-agent: Bluesky
Disallow: /admin/
Disallow: /private/
Disallow: /wp-admin/
Allow: /public/
Set Crawl Delay To slow down the crawl rate (note: not all bots respect this directive):
User-agent: Bluesky
Crawl-delay: 10
How to Verify Bluesky Cardyb
Verification Method:
Check user agent string for Bluesky identifier
Learn more in the official documentation .
Detection Patterns Multiple ways to detect Bluesky Cardyb in your application:
Basic Pattern
/Bluesky Cardyb/i
Strict Pattern
/^Bluesky Cardyb/1\.0$/
Flexible Pattern
/Bluesky Cardyb[\s\/]?[\d\.]*?/i
Vendor Match
/.*Bluesky PBLLC.*Bluesky/iImplementation Examples
PHP
Python
JavaScript
.htaccess
Nginx
Copy
function detect_bluesky_cardyb() {
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$pattern = '/Bluesky Cardyb/i';
if (preg_match($pattern, $user_agent)) {
// Log the detection
error_log('Bluesky Cardyb detected from IP: ' . $_SERVER['REMOTE_ADDR']);
// Set cache headers
header('Cache-Control: public, max-age=3600');
header('X-Robots-Tag: noarchive');
// Optional: Serve cached version
if (file_exists('cache/' . md5($_SERVER['REQUEST_URI']) . '.html')) {
readfile('cache/' . md5($_SERVER['REQUEST_URI']) . '.html');
exit;
}
return true;
}
return false;
}
Copy
import re
from flask import request, make_responsedef detect_bluesky_cardyb():
user_agent = request.headers.get('User-Agent', '')
pattern = r'Bluesky Cardyb'
if re.search(pattern, user_agent, re.IGNORECASE):
# Create response with caching
response = make_response()
response.headers['Cache-Control'] = 'public, max-age=3600'
response.headers['X-Robots-Tag'] = 'noarchive'
return True
return False
class BlueskyCardybMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if self.detect_bot(request):
# Handle bot traffic
pass
return self.get_response(request)
Copy
const express = require('express');
const app = express();// Middleware to detect Bluesky Cardyb
function detectBlueskyCardyb(req, res, next) {
const userAgent = req.headers['user-agent'] || '';
const pattern = /Bluesky Cardyb/i;
if (pattern.test(userAgent)) {
// Log bot detection
console.log('Bluesky Cardyb detected from IP:', req.ip);
// Set cache headers
res.set({
'Cache-Control': 'public, max-age=3600',
'X-Robots-Tag': 'noarchive'
});
// Mark request as bot
req.isBot = true;
req.botName = 'Bluesky Cardyb';
}
next();
}app.use(detectBlueskyCardyb);
Copy
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Bluesky Cardyb [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} Bluesky Cardyb [NC]
RewriteCond %{REQUEST_URI} !^/static/
RewriteRule ^(.*)$ /static/$1 [L]
SetEnvIfNoCase User-Agent "Bluesky Cardyb" is_bot=1
<If "%{HTTP_USER_AGENT} =~ /Bluesky Cardyb/i">
Header set Cache-Control "public, max-age=3600"
Header set X-Robots-Tag "noarchive"
</If>
Copy
map $http_user_agent $is_bluesky_cardyb {
default 0;
~*Bluesky Cardyb 1;
}server {
if ($is_bluesky_cardyb) {
return 403;
}
location / {
if ($is_bluesky_cardyb) {
root /var/www/cached;
try_files $uri $uri.html $uri/index.html @backend;
}
try_files $uri @backend;
}
location @backend {
if ($is_bluesky_cardyb) {
add_header Cache-Control "public, max-age=3600";
add_header X-Robots-Tag "noarchive";
}
proxy_pass http://backend;
}
}
Should You Block This Bot? Recommendations based on your website type:
Site Type Recommendation Reasoning E-commerce
Optional
Evaluate based on bandwidth usage vs. benefits Blog/News
Allow
Increases content reach and discoverability SaaS Application
Block
No benefit for application interfaces; preserve resources Documentation
Selective
Allow for public docs, block for internal docs Corporate Site
Limit
Allow for public pages, block sensitive areas like intranets
Advanced robots.txt Configurations E-commerce Site Configuration
Copy
User-agent: Bluesky
Crawl-delay: 5
Disallow: /cart/
Disallow: /checkout/
Disallow: /my-account/
Disallow: /api/
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*&page=
Allow: /products/
Allow: /categories/
Sitemap: https://example.com/sitemap.xml
Publishing/Blog Configuration
Copy
User-agent: Bluesky
Crawl-delay: 10
Disallow: /wp-admin/
Disallow: /drafts/
Disallow: /preview/
Disallow: /*?replytocom=
Allow: /
SaaS/Application Configuration
Copy
User-agent: Bluesky
Disallow: /app/
Disallow: /api/
Disallow: /dashboard/
Disallow: /settings/
Allow: /
Allow: /pricing/
Allow: /features/
Allow: /docs/
Quick Reference
User Agent Match
Bluesky Cardyb
Robots.txt Name
Bluesky
Category
social
Respects robots.txt
Yes