riligar-dev-website-seo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited riligar-dev-website-seo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Esta skill utiliza os seguintes arquivos de referência:
public.Em projetos RiLiGar, o sitemap pode ser estático (em public/sitemap.xml) ou dinâmico via backend Elysia.
public/sitemap.xml)Para sites institucionais simples:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://riligar.com/</loc>
<lastmod>2025-01-20</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>Se o site tiver conteúdo dinâmico (postagens de blog, produtos), crie um endpoint no Elysia:
// src/routes/seo.js
import { Elysia } from 'elysia'
import { db } from '../database/db'
export const seoRoutes = new Elysia().get('/sitemap.xml', async ({ set }) => {
const posts = await db.query.posts.findMany()
const baseUrl = 'https://riligar.com'
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>${baseUrl}</loc>
<priority>1.0</priority>
</url>
${posts
.map(
post => `
<url>
<loc>${baseUrl}/blog/${post.slug}</loc>
<lastmod>${post.updatedAt.toISOString().split('T')[0]}</lastmod>
<priority>0.7</priority>
</url>`
)
.join('')}
</urlset>`
set.headers['Content-Type'] = 'application/xml'
return xml
})O robots.txt deve ficar na pasta public/ do frontend ou ser servido pelo backend.
User-agent: *
Allow: /
Disallow: /api/
Disallow: /dashboard/
Disallow: /admin/
# Block AI training bots
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: CCBot
Disallow: /
Sitemap: https://riligar.com/sitemap.xmlEm SPAs (Single Page Applications) React/Vite, use metadados estáticos no index.html ou gerencie dinamicamente.
<title>RiLiGar — Sua Tagline</title>
<meta
name="description"
content="Descrição chamativa de 150-160 caracteres."
/>
<!-- OpenGraph -->
<meta
property="og:type"
content="website"
/>
<meta
property="og:title"
content="RiLiGar — Sua Tagline"
/>
<meta
property="og:description"
content="Descrição para redes sociais."
/>
<meta
property="og:image"
content="https://riligar.com/og-image.png"
/>
<!-- Twitter -->
<meta
name="twitter:card"
content="summary_large_image"
/>
<meta
name="twitter:title"
content="RiLiGar — Sua Tagline"
/>
<meta
name="twitter:image"
content="https://riligar.com/og-image.png"
/>Para melhores resultados de SEO em conteúdo dinâmico, o Elysia pode injetar as tags no HTML enviado:
// Exemplo simples de injeção no Elysia
app.get('/*', async ({ path }) => {
let html = await Bun.file('dist/index.html').text()
if (path.startsWith('/blog/')) {
const post = await getPost(path.split('/')[2])
html = html.replace('<title>RiLiGar</title>', `<title>${post.title} | RiLiGar</title>`)
html = html.replace('content="RiLiGar description"', `content="${post.excerpt}"`)
}
return new Response(html, { headers: { 'Content-Type': 'text/html' } })
})Sempre configure a URL base nos arquivos de ambiente:
# .env.development
VITE_SITE_URL=http://localhost:5173
SITE_URL=http://localhost:3000
# .env.production
VITE_SITE_URL=https://riligar.com
SITE_URL=https://riligar.comrobots.txt configurado e bloqueando /admin e /dashboard.sitemap.xml gerado e acessível.public/og-image.png.Para detalhes específicos, consulte os arquivos na pasta references/.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.