
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Advanced AI-powered JSON-LD schema utility with intelligent caching, lazy loading, and performance monitoring. Zero 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.
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);
<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 AI search engine optimization, ChatGPT integration, autonomous management, and enterprise features. Zero runtime dependencies.
The npm package ai-seo receives a total of 90 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.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.