TEKNOLOGI · DYPDYKK

Skjemaer — guide for norske nettsider 2026

Hostede eller native skjemaer? Her er alle alternativene med 2026-priser, kodeeksempler og spam-beskyttelse.

Skjemaer er alltid nødvendig

Kontaktskjemaer, påmeldingsskjemaer, lead-skjemaer. Alle bedriftssider trenger en måte å motta henvendelser på. Her er de beste alternativene for statiske og AI-bygde nettsider i 2026.

Hostede skjematjenester

Disse lar deg lime inn et skript på nettsiden din, og alle submissions havner i deres dashboard (og sendes til din e-post).

Formspree

Enklest å komme i gang med. Sett action="mailto:din@email.com" i HTML-skjemaet ditt, Formspree håndterer resten.

Pris: Gratis opp til 50/mnd, 10 dollar/mnd for 1000 submissions, 20 dollar/mnd for 10 000.

Bra for: Enkle kontaktskjemaer på bedriftssider med lav volum.

Tally

Typeform-lignende opplevelse, men mye rimeligere. Drag-and-drop builder, conditional logic, payments, integrations.

Pris: Gratis (ubegrenset submissions!), 29 dollar/mnd for branding fjernet.

Bra for: Komplekse skjemaer med logikk, betalinger, filopplasting.

Typeform

Premium conversational forms. En-spørsmål-av-gangen-stil som gir høyere completion rates.

Pris: Fra 25 dollar/mnd.

Bra for: Quiz, undersøkelser, omfattende skjemaer der opplevelsen er viktig.

Fillout

Nyere aktør med fokus på fleksibilitet. Airtable-integrasjon, betalinger, signaturer.

Pris: Gratis opp til 1000 responses, 20 dollar/mnd for Pro.

Native skjemaer med Vercel Functions + Resend

Hvis du vil ha full kontroll og null tredjepart, kan du bygge skjemaer native med serverless functions og Resend for e-post-sending.

Hvorfor native?

Komplett eksempel: Next.js + Resend

Fil: app/api/contact/route.ts

import { Resend } from 'resend'
import { z } from 'zod'

const resend = new Resend(process.env.RESEND_API_KEY)

const schema = z.object({
  navn: z.string().min(2).max(100),
  epost: z.string().email(),
  telefon: z.string().optional(),
  melding: z.string().min(10).max(5000),
  honeypot: z.string().max(0), // Must be empty (spam check)
})

export async function POST(request: Request) {
  try {
    const body = await request.json()
    const parsed = schema.safeParse(body)
    
    if (!parsed.success) {
      return Response.json(
        { error: 'Ugyldig data' },
        { status: 400 }
      )
    }
    
    const { navn, epost, telefon, melding } = parsed.data
    
    await resend.emails.send({
      from: 'skjema@dittfirma.no',
      to: 'hei@dittfirma.no',
      replyTo: epost,
      subject: `Ny henvendelse fra ${navn}`,
      text: `
Navn: ${navn}
E-post: ${epost}
Telefon: ${telefon || 'Ikke oppgitt'}

Melding:
${melding}
      `.trim(),
    })
    
    return Response.json({ success: true })
  } catch (error) {
    console.error('Form error:', error)
    return Response.json(
      { error: 'Serverfeil' },
      { status: 500 }
    )
  }
}

Frontend-kode (HTML/React):

'use client'
import { useState } from 'react'

export default function ContactForm() {
  const [status, setStatus] = useState'idle'
  
  async function handleSubmit(e) {
    e.preventDefault()
    setStatus('sending')
    const formData = new FormData(e.target)
    const data = Object.fromEntries(formData)
    
    const res = await fetch('/api/contact', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(data),
    })
    
    setStatus(res.ok ? 'success' : 'error')
  }
  
  return (
    <form onSubmit={handleSubmit}>
      <input name="navn" required />
      <input name="epost" type="email" required />
      <input name="telefon" />
      <textarea name="melding" required />
      {/* Honeypot - skjult for mennesker */}
      <input name="honeypot" style={{display: 'none'}} tabIndex={-1} />
      <button type="submit">Send</button>
    </form>
  )
}

Resend koster 20 dollar/mnd for 50 000 e-poster (eller gratis opp til 3000 per måned).

Netlify Forms

Hvis du hoster på Netlify: innebygd skjema-håndtering. Legg til netlify-attributt på HTML-skjemaet, alt fungerer automatisk.

Pris: 100 submissions/mnd gratis, 19 dollar/mnd for 1000.

Spam-beskyttelse

Uansett hvilken løsning du velger, får du spam. Bruk disse teknikker:

Anbefaling

For 95% av norske bedriftssider: bruk Formspree eller Tally. Gratis-planene dekker typisk trafikk, du slipper å skrive kode, og du får e-post til innboksen med én gang noen kontakter deg.

Hvis du har mange submissions og vil kutte kostnader, bygg native med Resend etter at du har validert at folk faktisk bruker skjemaet.

aiå.no