
Product
Introducing Custom Pull Request Alert Comment Headers
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
AI-native JSON-LD schema utility with developer tools, CLI automation, visual builder, and advanced LLM optimization. Zero runtime dependencies.
Minimal AI-friendly JSON-LD schema utility for SEO. Zero dependencies.
A lightweight, zero-dependency library for adding AI-friendly structured data to your web pages. Works seamlessly across all JavaScript environments: Node.js, Bun, Deno, browsers, and edge runtimes.
npm install ai-seo
import { addFAQ, initSEO } from 'ai-seo';
// Quick FAQ injection
addFAQ('What is ai-seo?', 'A minimal SEO utility for structured data');
// Custom schema injection
initSEO({
schema: {
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company"
}
});
Build complex schemas with ease using our fluent API:
import { product, article, organization } from 'ai-seo';
// Product schema with method chaining
const productSchema = product()
.name('Amazing Product')
.description('This product will change your life')
.image(['product1.jpg', 'product2.jpg'])
.brand('YourBrand')
.offers({ price: 99.99, priceCurrency: 'USD' })
.rating(4.8, 127)
.inject(); // Automatically injects into DOM
// Article schema
const blogPost = article()
.name('How to Use Schema Composer')
.author('Jane Doe')
.publisher('Tech Blog')
.datePublished('2024-01-15T10:00:00Z')
.keywords(['seo', 'schema', 'javascript'])
.build(); // Returns schema object
import { Frameworks } from 'ai-seo';
function ProductPage({ product: productData }) {
// Hook automatically manages schema lifecycle
const { schema, cleanup } = Frameworks.React.useSEO(() =>
product()
.name(productData.name)
.brand(productData.brand)
.offers({ price: productData.price })
.build()
);
return <div>Product: {productData.name}</div>;
}
// Higher-order component
const WithSEO = Frameworks.React.withSEO(MyComponent, (props) =>
article().name(props.title).author(props.author).build()
);
<script setup>
import { Frameworks } from 'ai-seo';
import { ref, computed } from 'vue';
const productData = ref({ name: 'Product', price: 99 });
// Reactive schema management
const { element, update } = Frameworks.Vue.useSEO(
computed(() =>
product()
.name(productData.value.name)
.offers({ price: productData.value.price })
.build()
)
);
</script>
<script>
import { Frameworks } from 'ai-seo';
// Create reactive schema store
const schemaStore = Frameworks.Svelte.createSEOStore(
product().name('Initial Product').build()
);
// Update schema reactively
function updateProduct(newData) {
schemaStore.update(schema =>
product().name(newData.name).brand(newData.brand).build()
);
}
</script>
Pre-built schemas for common industries:
import { Templates } from 'ai-seo';
// E-commerce product page
const productSchema = Templates.ecommerce.productPage({
name: 'Wireless Headphones',
price: 199.99,
brand: 'AudioTech',
inStock: true,
rating: 4.5,
reviewCount: 234
});
// Restaurant listing
const restaurantSchema = Templates.restaurant.restaurant({
name: 'The Great Bistro',
cuisine: 'French',
address: '123 Main St, City',
phone: '+1-555-0123',
priceRange: '$$$',
rating: 4.7,
reviewCount: 89
});
// Real estate property
const propertySchema = Templates.realEstate.realEstateProperty({
title: 'Beautiful Family Home',
price: 450000,
bedrooms: 3,
bathrooms: 2,
squareFeet: 1800,
agent: { name: 'John Smith', phone: '+1-555-0456' }
});
// Blog post
const blogSchema = Templates.content.blogPost({
title: 'Ultimate SEO Guide',
author: 'Jane Doe',
publishDate: '2024-01-15T10:00:00Z',
tags: ['seo', 'marketing', 'web'],
wordCount: 2500
});
Intelligent schema caching with automatic optimization:
import { Cache } from 'ai-seo';
// Configure intelligent caching
Cache.configure({
strategy: 'intelligent', // Auto-cache complex schemas
ttl: 3600000, // 1 hour cache lifetime
maxSize: 100, // Max cached schemas
enableCompression: true, // Compress cached data
enableMetrics: true // Track performance
});
// Get performance metrics
const metrics = Cache.getMetrics();
console.log(`Cache hit rate: ${metrics.hitRate}%`);
console.log(`Total schemas cached: ${metrics.cacheSize}`);
Load schemas only when needed for better performance:
import { LazySchema } from 'ai-seo';
// Load when element becomes visible
const lazyProduct = new LazySchema('Product')
.loadWhen('visible')
.withData(() => ({
name: 'Premium Headphones',
price: 199.99,
inStock: true
}))
.configure({
rootMargin: '50px', // Load 50px before visible
threshold: 0.1 // Load when 10% visible
})
.inject();
// Load on user interaction
const lazyArticle = new LazySchema('Article')
.loadWhen('interaction')
.withData(() => getArticleData())
.inject();
// Custom loading condition
const lazyEvent = new LazySchema('Event')
.loadWhen('custom', () => shouldLoadEvent())
.withData(getEventData)
.inject();
Track and optimize schema performance:
import { Performance } from 'ai-seo';
// Get comprehensive performance report
const report = Performance.getReport();
console.log('=== Performance Report ===');
console.log(`Average injection time: ${report.averageInjectionTime.toFixed(2)}ms`);
console.log(`Cache hit rate: ${report.cacheHitRate}%`);
console.log(`Performance score: ${report.performanceScore}/100`);
console.log(`Total schemas: ${report.totalSchemas}`);
// Get actionable recommendations
report.recommendations.forEach(rec => {
console.log(`${rec.severity.toUpperCase()}: ${rec.message}`);
console.log(`Action: ${rec.action}`);
});
// Example output:
// MEDIUM: Many schemas detected. Consider lazy loading for better performance.
// Action: Use LazySchema for non-critical schemas: new LazySchema("Product").loadWhen("visible")
Get detailed feedback on your schemas:
import { validateSchemaEnhanced, getSchemaSuggestions } from 'ai-seo';
const schema = product().name('Test Product').build();
const validation = validateSchemaEnhanced(schema, {
strict: true,
suggestions: true
});
console.log(`Schema quality score: ${validation.score}/100`);
console.log('Errors:', validation.errors);
console.log('Warnings:', validation.warnings);
console.log('Suggestions:', validation.suggestions);
// Get best practices for schema type
const tips = getSchemaSuggestions('Product');
console.log('Product schema tips:', tips);
Track schema performance and effectiveness:
import { Analytics } from 'ai-seo';
// Track schema injections
const schema = product().name('Tracked Product').build();
initSEO({
schema,
analytics: (event) => {
console.log('Schema event:', event);
// Send to your analytics service
}
});
// Get performance metrics
const metrics = Analytics.getSchemaMetrics();
console.log(`Total schemas: ${metrics.total_schemas}`);
console.log('Schema types:', metrics.schema_types);
// Export analytics data
const csvData = Analytics.exportAnalytics('csv');
const jsonData = Analytics.exportAnalytics('json');
Create rich, structured schemas with our helper functions:
import { SchemaHelpers, initSEO } from 'ai-seo';
const productSchema = SchemaHelpers.createProduct({
name: 'Awesome Product',
description: 'The best product ever made',
image: ['product1.jpg', 'product2.jpg'],
brand: 'Your Brand',
offers: {
price: 99.99,
priceCurrency: 'USD',
availability: 'https://schema.org/InStock'
},
aggregateRating: {
ratingValue: 4.8,
reviewCount: 127
}
});
initSEO({ schema: productSchema });
const articleSchema = SchemaHelpers.createArticle({
headline: 'How to Use AI-SEO',
description: 'A comprehensive guide to structured data',
author: 'Jane Doe',
datePublished: '2024-01-15T10:00:00Z',
publisher: 'Tech Blog',
keywords: ['seo', 'structured-data', 'ai']
});
const businessSchema = SchemaHelpers.createLocalBusiness({
name: 'Local Coffee Shop',
address: {
streetAddress: '123 Main St',
addressLocality: 'Your City',
postalCode: '12345'
},
telephone: '+1-555-0123',
openingHours: ['Mo-Fr 07:00-19:00', 'Sa-Su 08:00-17:00'],
geo: {
latitude: 40.7128,
longitude: -74.0060
}
});
const eventSchema = SchemaHelpers.createEvent({
name: 'Web Development Conference',
startDate: '2024-06-15T09:00:00Z',
endDate: '2024-06-15T17:00:00Z',
location: {
name: 'Conference Center',
address: '456 Event Ave, Tech City'
},
organizer: 'Tech Events Inc'
});
Inject multiple schemas at once:
import { injectMultipleSchemas, SchemaHelpers } from 'ai-seo';
const schemas = [
SchemaHelpers.createProduct({ name: 'Product 1' }),
SchemaHelpers.createArticle({ headline: 'Article 1' }),
SchemaHelpers.createLocalBusiness({ name: 'Business 1' })
];
const results = injectMultipleSchemas(schemas, {
debug: true,
validate: true
});
console.log(`Successfully injected ${results.filter(r => r.success).length} schemas`);
Perfect for Next.js, Nuxt.js, and other SSR frameworks:
// app/layout.js
import { SSR, organization } from 'ai-seo';
import Head from 'next/head';
export default function RootLayout({ children }) {
const schema = organization().name('Your Company').url('https://yoursite.com').build();
const { jsonLd, socialMeta } = SSR.frameworks.nextJS.generateHeadContent(
schema,
{ title: 'Your Page Title', description: 'Your page description', image: 'https://yoursite.com/og-image.jpg' }
);
return (
<html>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: jsonLd.match(/<script[^>]*>([\s\S]*)<\/script>/)?.[1] || '' }}
/>
<div dangerouslySetInnerHTML={{ __html: socialMeta }} />
</Head>
<body>{children}</body>
</html>
);
}
// nuxt.config.js or in your component
import { SSR, SchemaHelpers } from 'ai-seo';
export default {
head() {
const schema = SchemaHelpers.createArticle({
headline: this.title,
author: this.author
});
return SSR.frameworks.nuxt.generateHeadConfig(schema, {
title: this.title,
description: this.description
});
}
}
import { SSR } from 'ai-seo';
// Generate script tag string
const scriptTag = SSR.generateScriptTag(schema, { pretty: true });
// Generate multiple script tags
const multipleScripts = SSR.generateMultipleScriptTags(schemas);
// Generate social media meta tags
const socialMeta = SSR.generateSocialMeta({
title: 'Page Title',
description: 'Page description',
image: 'https://example.com/image.jpg',
url: 'https://example.com/page'
});
import {
listSchemas,
getSchema,
removeSchema,
removeAllSchemas
} from 'ai-seo';
// List all injected schemas
const schemas = listSchemas();
console.log(`Found ${schemas.length} schemas`);
// Get specific schema
const schema = getSchema('my-schema-id');
// Remove specific schema
removeSchema('my-schema-id');
// Remove all schemas
const removedCount = removeAllSchemas();
console.log(`Removed ${removedCount} schemas`);
initSEO({
// Schema content
schema: customSchema, // Custom schema object
pageType: 'FAQPage', // Default page type
questionType: 'Question text', // FAQ question
answerType: 'Answer text', // FAQ answer
// Behavior options
debug: false, // Enable debug logging
validate: true, // Validate schema before injection
allowDuplicates: false, // Allow duplicate schemas
id: 'custom-id' // Custom schema ID
});
injectMultipleSchemas(schemas, {
debug: false, // Enable debug logging
validate: true, // Validate each schema
allowDuplicates: false, // Allow duplicate schemas
id: 'base-id' // Base ID for generated IDs
});
The package includes comprehensive tests with Vitest:
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Run tests with UI
npm run test:ui
Optimized for tree-shaking and minimal bundle size:
# Check bundle size
npm run size
# Analyze bundle
npm run size:analyze
# Lint code
npm run lint
MIT License - see LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
Powerful developer tools to streamline your SEO workflow:
# Initialize AI-SEO in your project
npx ai-seo init nextjs
# Analyze content with AI
ai-seo analyze "Amazing wireless headphones with premium sound quality"
# Validate existing schemas
ai-seo validate product.json --strict
# Optimize schemas for LLMs
ai-seo optimize product.json --voice
# Generate schemas from content
ai-seo generate content.txt --multiple --metrics
import { VisualBuilder } from 'ai-seo/tools';
// Create visual schema builder
const builder = new VisualBuilder({
target: '#schema-builder',
theme: 'dark',
presets: ['ecommerce', 'blog', 'business'],
aiSuggestions: true
});
// Builder automatically provides:
// - Drag & drop interface
// - Real-time preview
// - AI-powered suggestions
// - Undo/redo functionality
// - Export capabilities
import { CodeGenerator } from 'ai-seo/tools';
const schema = { /* your schema */ };
// Generate React component
const reactCode = CodeGenerator.generateReactComponent(schema, 'ProductSchema');
// Generate Vue component
const vueCode = CodeGenerator.generateVueComponent(schema, 'ProductSchema');
// Generate Next.js page with SSG
const nextCode = CodeGenerator.generateNextJSPage(schema, 'product');
import { SchemaDebugger } from 'ai-seo/tools';
// Validate schema
const validation = SchemaDebugger.validateSchema(schema);
console.log(`Quality Score: ${validation.score}/100`);
console.log('Errors:', validation.errors);
console.log('Suggestions:', validation.warnings);
// Performance analysis
const performance = SchemaDebugger.analyzePerformance(schema);
console.log(`Bundle Size: ${performance.size} bytes`);
console.log(`Complexity: ${performance.complexity}`);
console.log('Recommendations:', performance.recommendations);
Experience the future of SEO with our AI-powered schema optimization:
import { AI, product } from 'ai-seo';
// π§ AI-Powered Schema Optimization for LLMs
const schema = product()
.name('Wireless Headphones')
.description('Premium audio experience')
.build();
// Optimize for ChatGPT, Bard, Claude understanding
const aiOptimized = AI.optimizeForLLM(schema, {
target: ['chatgpt', 'bard', 'claude'],
semanticEnhancement: true,
voiceOptimization: true
});
// π Generate Schemas from Content Analysis
const content = `
Amazing wireless headphones with crystal-clear sound quality.
Price: $199.99. Free shipping available. 5-star reviews from customers.
`;
const autoGenerated = AI.generateFromContent(content, {
confidence: 0.8,
multipleTypes: true
});
console.log('AI detected schema type:', autoGenerated[0].type);
console.log('Confidence score:', autoGenerated[0].confidence);
// ποΈ Voice Search Optimization
const voiceOptimized = AI.optimizeForVoiceSearch(schema, {
includeQA: true,
naturalLanguage: true,
conversational: true
});
// π Advanced Content Analysis
const analysis = AI.analyzeContent(content, {
includeKeywords: true,
includeEntities: true,
includeSentiment: true
});
console.log('Recommended schema type:', analysis.recommendedType);
console.log('Content sentiment:', analysis.sentiment.label);
console.log('Key entities found:', analysis.entities);
import { Cache, LazySchema, Performance } from 'ai-seo';
// π Advanced Caching - Intelligent schema caching with 80%+ hit rates
Cache.configure({
strategy: 'intelligent', // Automatically caches complex schemas
ttl: 3600000, // 1 hour cache lifetime
enableMetrics: true // Track performance metrics
});
// β‘ Lazy Loading - Load schemas only when needed
const lazyProduct = new LazySchema('Product')
.loadWhen('visible') // Load when element becomes visible
.withData(() => getProductData())
.inject();
// π Performance Monitoring - Track and optimize schema performance
const report = Performance.getReport();
console.log(`Cache hit rate: ${report.cacheHitRate}%`);
console.log(`Performance score: ${report.performanceScore}/100`);
console.log('Recommendations:', report.recommendations);
ai-seo init
- Project initialization with framework templatesai-seo analyze
- AI-powered content analysis and schema suggestionsai-seo validate
- Comprehensive schema validation with quality scoringai-seo optimize
- LLM optimization with voice search enhancementsai-seo generate
- Auto-generate schemas from content using AIai-seo build
- Production-ready schema optimization (preview)<script type="application/ld+json">
injectiongetSchemaSuggestions
(correct spelling) and kept getSchemaSupgestions
for backward compatibilitySchemaHelpers.createOrganization
prepublishOnly
to run lint
only to avoid Windows publish issuescross-env
FAQs
AI-native JSON-LD schema utility with multi-platform deployment, enterprise features, advanced validation, and LLM optimization. Zero runtime dependencies.
The npm package ai-seo receives a total of 108 weekly downloads. As such, ai-seo popularity was classified as not popular.
We found that ai-seo demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.