Kommunikationsaudit (snabb) BETA
Ett lättviktigt verktyg för att göra en kvalitativ bedömning av en webbplats och dess kommunikation. Byggt för manuell scoring (ingen extern hämtning/CORS). Använd gärna tillsammans med bookmarkleten nedan för automatisk sidkontroll.
Bedömning (0–5)
0 = mycket svagt · 3 = godkänt · 5 = utmärkt
Totalpoäng
0/100
Nivå
—
Prioriteringar
—
Visa metod & viktning
Rubrikerna vägs till en total om 100 poäng: Budskap 18 · Målgruppsrelevans 10 · Värdeerbjudande 12 · Struktur & navigation 10 · Trovärdighet (E‑E‑A‑T) 12 · Bevis (case, referenser) 8 · CTA & konvertering 10 · Innehållsfärskhet 6 · Språk & tonalitet 6 · Tillgänglighet (WCAG-bas) 4 · Tekniska signaler (titel, meta, schema) 4.
Bookmarklet: Automatisk sidkontroll (på valfri sajt)
Dra knappen till dina bokmärken. Öppna en kunds sida och klicka bokmärket – en 1‑klicks overlay analyserar titellängd, H1, meta‑beskrivning, antal tydliga CTA‑länkar och om Schema.org förekommer.
Visa bookmarklet‑kod (läsbar)
AI‑prompt (att bädda in som “Kopiera prompt”)
Knappen kopierar en audit‑prompt som du/er besökare kan köra i ChatGPT/Copilot. Den efterfrågar URL + offentliga sociala profiler och returnerar en kort plan med åtgärder.
Automatisk analys (via server)
Koppla en serverless‑endpoint som hämtar HTML server‑side och returnerar enkla mätvärden (undviker CORS). Knappen nedan fyller i delpoäng automatiskt – du kan finjustera därefter.
Exempel på serverless‑funktion (Node + Cheerio, för Netlify/Vercel)
/**
* Minimal audit‑API: GET /api/audit?url=https://exempel.se
* Returnerar JSON med mätvärden för titel, meta, H1, rubriker, CTA, schema, alt‑texter.
* Deploya som Netlify/Vercel serverless.
*/
import fetch from 'node-fetch';
import * as cheerio from 'cheerio';
export default async function handler(req, res){
try{
const target = req.query.url;
if(!target) return res.status(400).json({error:'url required'});
const r = await fetch(target, {headers:{'user-agent':'GreatnessAuditBot/1.0'}});
const html = await r.text();
const $ = cheerio.load(html);
const title = $('title').text().trim();
const h1 = $('h1').first().text().trim();
const desc = $('meta[name="description"]').attr('content')||'';
const schema = $('script[type="application/ld+json"]').length;
const ctas = $('a,button').filter((_,el)=>/kontakt|boka|demo|prata|offert|kontakta|book|contact|demo/i.test($(el).text())).length;
const h2 = $('h2').length; const h3 = $('h3').length;
const imgs = $('img'); const imgsNoAlt = imgs.filter((_,el)=>!$(el).attr('alt')||$(el).attr('alt').trim()==='').length;
const lang = $('html').attr('lang')||'';
const og = $('meta[property^="og:"]').length;
const twitter = $('meta[name^="twitter:"]').length;
// enkel färskhetsindikator: leta årtal i text
const yearMatch = (html.match(/20(2[0-5]|1[0-9])/g)||[]).slice(-1)[0]||'';
res.json({titleLength:title.length, hasH1:!!h1, metaDescriptionLength:desc.length, schemaCount:schema, ctaCount:ctas, h2Count:h2, h3Count:h3, images:imgs.length, imagesMissingAlt:imgsNoAlt, lang, ogTags:og, twitterTags:twitter, lastYearDetected:yearMatch});
}catch(e){
res.status(500).json({error:e.message});
}
}
WordPress Gutenberg‑block (enkelt) + HubSpot‑modul
/* WordPress: skapa ett litet block som bäddar in widgeten via shortcode/iframe eller direkt HTML.
* 1) Skapa ett litet plugin och registrera blocket 'greatness/audit'.
*/
import { registerBlockType } from '@wordpress/blocks';
import { InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
registerBlockType('greatness/audit',{
title:'Greatness Kommunikationsaudit', icon:'analytics', category:'widgets',
attributes:{ apiBase:{type:'string',default:''} },
edit: (props)=>{
const {attributes:{apiBase}, setAttributes} = props;
return (
setAttributes({apiBase:v})}/>
{/* Klistra in HTML‑widgeten här eller ladda som iframe */}
);
},
save: (props)=>{ const {apiBase} = props.attributes; return (); }
});
{# HubSpot: skapa en custom module med ett textfält api_base och klistra in HTML‑widgeten i module.html.
I module.js, sätt document.getElementById('apiBase').value = {{ module.api_base }}; #}