Lighthouse: ο ελεγκτής που ανοίγει τη σελίδα σου και σου λέει τι χαλάει
Το Lighthouse είναι ένα δωρεάν πρόγραμμα που ανοίγει μία ιστοσελίδα σε έναν browser χωρίς παράθυρο — δεν εμφανίζεται τίποτα στην οθόνη, ο υπολογιστής τη φορτώνει στο παρασκήνιο και περιμένει να σταθεροποιηθεί — και μετά την περνά από 161 ελέγχους, έναν προς έναν. Στο τέλος σου δίνει τέσσερα σκορ από το 100: πόσο γρήγορα νιώθεται η σελίδα, πόσο εύκολη είναι για ανθρώπους με αναπηρία, αν ακολουθεί τις καθιερωμένες καλές πρακτικές του ιστού, και αν είναι κατανοητή στις μηχανές αναζήτησης. Μαζί με τα σκορ σου δίνει το όνομα κάθε ελέγχου που απέτυχε και τον λόγο της αποτυχίας. Το φτιάχνει η Google, και είναι το ίδιο εργαλείο που κρύβεται πίσω από το γνωστό PageSpeed Insights, με μία διαφορά: αυτό τρέχει στον δικό σου υπολογιστή, από τη γραμμή εντολών, χωρίς να στέλνει τη σελίδα σου πουθενά.

Τι κάνει
Φαντάσου ότι έχεις παραδώσει μία ιστοσελίδα και θέλεις να ξέρεις αν στέκει. Θα την άνοιγες σε έναν browser και θα την κοιτούσες με το μάτι. Το μάτι όμως δεν μετράει την αντίθεση ενός ανοιχτό γκρι κειμένου πάνω σε λευκό φόντο. Δεν καταλαβαίνει ότι ένα κουμπί με μόνο ένα εικονίδιο δεν λέει τίποτα σε κάποιον που χρησιμοποιεί αναγνώστη οθόνης. Δεν ξέρει γιατί η σελίδα αργεί τρία δευτερόλεπτα στο κινητό.
Το Lighthouse κάνει αυτή τη δουλειά αντί για το μάτι. Ανοίγει τη διεύθυνση που του δίνεις μέσα σε έναν Chrome χωρίς παράθυρο — αυτό σημαίνει «headless»: ο browser τρέχει κανονικά, φορτώνει τη σελίδα, εκτελεί τη JavaScript, αλλά δεν ζωγραφίζει τίποτα στην οθόνη. Μόλις η σελίδα σταθεροποιηθεί, το πρόγραμμα τρέχει 161 ελέγχους. Άλλοι μετρούν χρόνους, άλλοι διαβάζουν το HTML και ψάχνουν για περιγραφές εικόνων, άλλοι ελέγχουν αν τα χρώματα έχουν αρκετή αντίθεση, άλλοι κοιτούν αν η σελίδα έχει τίτλο και περιγραφή για τις μηχανές αναζήτησης.
Στο τέλος μαζεύει τους ελέγχους σε τέσσερις κατηγορίες και δίνει σε κάθε κατηγορία ένα σκορ από το 100. Επιδόσεις. Προσβασιμότητα. Βέλτιστες πρακτικές. SEO — δηλαδή κατά πόσο η σελίδα είναι κατανοητή σε αυτόματους επισκέπτες όπως η Google. Το σκορ είναι ένα νούμερο· το χρήσιμο είναι η λίστα από κάτω. Για κάθε έλεγχο που απέτυχε σου δίνει το όνομά του, τι περίμενε, τι βρήκε, και συχνά έναν σύνδεσμο με την εξήγηση. Δεν λέει «η προσβασιμότητα είναι 53». Λέει «ο έλεγχος button-name απέτυχε: το κουμπί δεν έχει κείμενο ούτε ετικέτα».
Το πρόγραμμα το συντηρεί η ομάδα GoogleChrome. Σήμερα το αποθετήριο έχει 31.026 αστέρια και 9.785 forks, με 438 ανοιχτά ζητήματα — πολλά για ένα εργαλείο δεκαετίας, που σημαίνει ότι το χρησιμοποιεί κόσμος σε απίθανες περιπτώσεις. Η τελευταία έκδοση είναι η 13.6.0, δημοσιευμένη στις 27 Οκτωβρίου 2026, και το τελευταίο push στο αποθετήριο έγινε στις 6 Νοεμβρίου 2026. Δεν είναι εγκαταλελειμμένο· το αγγίζουν κάθε λίγες μέρες. Κατεβαίνει 7.285.288 φορές την εβδομάδα από το npm, που σημαίνει ότι χιλιάδες αυτόματες διορθώσεις το τρέχουν χωρίς άνθρωπο μπροστά. Δίνεται με άδεια Apache-2.0, άρα μπορείς να το βάλεις και μέσα σε δικό σου προϊόν, με αναφορά.
Μία λεπτομέρεια που εξηγεί γιατί πρέπει να το εμπιστεύεσαι: το PageSpeed Insights, το γνωστό εργαλείο της Google στο διαδίκτυο, δεν είναι κάτι άλλο. Είναι αυτό το πρόγραμμα, τυλιγμένο σε σελίδα. Ό,τι σκορ βλέπεις εκεί, το ίδιο λογισμικό το βγάζει.
Τι δεν κάνει
Πρώτο και σημαντικό: δεν ελέγχει ασφάλεια. Δεν ψάχνει ευπάθειες, δεν βλέπει κλειδιά που διέρρευσαν σε κώδικα, δεν κρίνει τη διαμόρφωση του διακομιστή σου. Ένα σκορ 100 δεν σημαίνει «ασφαλής σελίδα». Σημαίνει «πέρασε τους ελέγχους που έχει αυτό το εργαλείο», και αυτοί οι έλεγχοι είναι για την εμπειρία, όχι για την προστασία.
Δεύτερο: δεν διορθώνει τίποτα. Σου λέει τι λείπει και σου εξηγεί γιατί λείπει, αλλά το κείμενο του κουμπιού, την ετικέτα της εικόνας και το σκούρο γκρι πάνω στο ανοιχτό γκρι τα αλλάζεις εσύ. Είναι καθρέφτης, όχι μηχανικός.
Τρίτο: δεν ελέγχει όλο τον ιστότοπο. Του δίνεις μία διεύθυνση και εξετάζει μία σελίδα. Για τις υπόλοιπες τρέχεις ξανά. Δεν σκαρφαλώνει στους συνδέσμους, δεν σου φτιάχνει χάρτη του site, δεν συγκρίνει σελίδες μεταξύ τους.
Τέταρτο: δεν παρακολουθεί μόνο του. Δεν είναι υπηρεσία που τρέχει στο παρασκήνιο και σε ειδοποιεί όταν κάτι χαλάσει. Το τρέχεις όποτε θέλεις, ή το βάζεις μέσα σε ένα σενάριο αυτοματισμού και το τρέχει εκείνο.
Πέμπτο, και αυτό είναι σχεδιαστικό, όχι κουσούρι: δεν είναι διακομιστής MCP. Δεν σηκώνει σχήμα για να το φορτώσει το μοντέλο, δεν έχει «εργαλεία» που τα βλέπει ο agent από μόνος του. Το τρέχεις από τη γραμμή εντολών, σαν κάθε άλλο πρόγραμμα.
Έκτο: δεν μπαίνει σε σελίδες πίσω από σύνδεση χωρίς δουλειά. Αν η σελίδα σου θέλει λογαριασμό, πρέπει να του δώσεις τα διαπιστευτήρια με τον σωστό τρόπο, αλλιώς αυτό που θα ελέγξει είναι η σελίδα σύνδεσης, όχι η σελίδα που θέλεις.
Και έβδομο: δεν υποκαθιστά μια δοκιμή σε πραγματική συσκευή. Το πρόγραμμα φορτώνει τη σελίδα με ρυθμισμένη ταχύτητα δικτύου και με έναν επεξεργαστή που έχει περιοριστεί τεχνητά, για να μιμηθεί ένα τηλέφωνο μεσαίας κατηγορίας. Αυτό είναι χρήσιμο και δίκαιο, αλλά παραμένει προσομοίωση.
Για ποιον είναι
Για όποιον παραδίδει ιστοσελίδες και θέλει ένα δεύτερο ζευγάρι μάτια, με όργανα αντί για γνώμη. Για τον σχεδιαστή που έφτιαξε κάτι όμορφο και δεν ξέρει αν το γκρι κείμενο διαβάζεται. Για τον προγραμματιστή που άλλαξε τη διάταξη και θέλει να μάθει αν έχασε ταχύτητα. Για τον άνθρωπο που ασχολείται με SEO και θέλει να δει τη σελίδα όπως τη βλέπουν οι μηχανές. Για τη μικρή ομάδα που δεν έχει δικό της εργαστήριο μετρήσεων.
Δεν είναι για όποιον θέλει ένα ταμπλό που παρακολουθεί χίλιες σελίδες όλο το εικοσιτετράωρο — γι’ αυτό υπάρχουν άλλα εμπορικά προϊόντα, και το ίδιο το PageSpeed Insights το κάνει δωρεάν αν του δώσεις τη διεύθυνση. Το Lighthouse είναι για τη στιγμή που κοιτάς μία σελίδα και θέλεις απάντηση αμέσως, τοπικά, χωρίς να τη στείλεις σε κανέναν.
Εγκατάσταση
Η εγκατάσταση γίνεται από τη γραμμή εντολών, μέσα σε έναν φάκελο που ανοίγεις μόνος σου για να μη γεμίσεις το υπόλοιπο σύστημα με τα αρχεία του. Πρώτα βεβαιώσου ότι έχεις Node 22.19 ή νεότερο — αυτό το ζητά το ίδιο το πακέτο στο πεδίο engines του, δεν το λέει το README, και είναι ο πιο συνηθισμένος λόγος για ένα σφάλμα στην αρχή.
Φτιάξε τον φάκελο:
mkdir lhΜπες μέσα:
cd lhΚαι εγκατέστησε το εργαλείο:
npm install lighthouse@13.6.0Η προϋπόθεση που δεν λένε τα npm
Το Lighthouse δεν φέρνει δικό του browser. Θέλει Chrome εγκατεστημένο στον υπολογιστή. Χωρίς αυτό, δεν ανοίγει σελίδα, όσο σωστά κι αν είναι όλα τα άλλα. Τις περισσότερες φορές το βρίσκει μόνο του. Αν δεν το βρει, του δείχνεις τον δρόμο με τη μεταβλητή CHROME_PATH, δηλώνοντας πού βρίσκεται το εκτελέσιμο του Chrome:
export CHROME_PATH="C:/Program Files/Google/Chrome/Application/chrome.exe"Σε άλλα λειτουργικά η διαδρομή αλλάζει — το εκτελέσιμο λέγεται google-chrome στα περισσότερα Linux, και βρίσκεται μέσα στον φάκελο εφαρμογών στο macOS. Το ζητούμενο είναι ένα: να δείχνει η μεταβλητή σε ένα Chrome που υπάρχει.
Εναλλακτικά: παγκόσμια εγκατάσταση
Αν θέλεις την εντολή διαθέσιμη από παντού, χωρίς να μπαίνεις κάθε φορά στον φάκελο, την εγκαθιστάς παγκόσμια:
npm install -g lighthouseΜετά τρέχει με το όνομά της, από όπου κι αν βρίσκεσαι.
Εναλλακτικά: χωρίς καμία εγκατάσταση
Αν θέλεις να τη δοκιμάσεις και να μη μείνει τίποτα στον δίσκο, το npm μπορεί να την κατεβάσει, να την τρέξει και να την πετάξει σε μία κίνηση:
npx lighthouse@13.6.0 https://example.comΑυτό είναι χρήσιμο για μία δοκιμή. Για καθημερινή χρήση, καλύτερα η τοπική εγκατάσταση: την έχεις, ξέρεις ποια έκδοση τρέχεις, και δεν περιμένεις κατέβασμα κάθε φορά.
Χρήση σε κάθε LLM
Εδώ αξίζει να είμαστε καθαροί: το Lighthouse δεν είναι διακομιστής MCP, δεν έχει εργαλεία που τα ανακαλύπτει το μοντέλο μόνο του. Δεν υπάρχει σχήμα να φορτώσεις, δεν υπάρχει ρύθμιση να προσθέσεις σε αρχείο. Όλοι οι clients το χρησιμοποιούν με τον ίδιο ακριβώς τρόπο: δίνεις στον agent ένα κέλυφος, του λες να τρέξει την εντολή, και μετά του λες να διαβάσει το αρχείο αποτελεσμάτων. Το αρχείο είναι JSON — δηλαδή δομημένη πληροφορία που τη διαβάζει άνετα και πρόγραμμα και άνθρωπος.
Η εντολή είναι η ίδια παντού. Τρέχει τη σελίδα, γράφει την αναφορά σε ένα αρχείο, και χρησιμοποιεί Chrome χωρίς παράθυρο και χωρίς κάρτα γραφικών:
./node_modules/.bin/lighthouse https://example.com --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"Αυτό το κομμάτι με το headless και το disable-gpu είναι ο λόγος που δουλεύει ακόμα και σε μηχάνημα χωρίς κάρτα γραφικών ή σε περιβάλλον χωρίς οθόνη. Αξίζει να το κρατήσεις ως έχει.
Claude Code
Το Claude Code τρέχει εντολές κελύφους αφού σου ζητήσει άδεια, μέσα από τον φάκελο του έργου. Τρέξε πρώτα την εγκατάσταση μία φορά, μετά δώσ’ του την εντολή ως κανονικό αίτημα — κάτι σαν «τρέξε το Lighthouse στη localhost:3000 και δες τι απέτυχε». Εκείνο θα εκτελέσει την εντολή, θα σου ζητήσει την άδεια, και μετά θα διαβάσει το lh.json από τον δίσκο γιατί είναι απλώς ένα αρχείο μέσα στον φάκελο. Το κέρδος είναι ότι δεν του εξηγείς εσύ τι σημαίνει κάθε έλεγχος· το όνομα του ελέγχου και η περιγραφή είναι μέσα στο αρχείο.
./node_modules/.bin/lighthouse http://localhost:3000 --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"Codex CLI
Το Codex CLI τρέχει στο τερματικό, μέσα σε περιορισμό ασφαλείας. Αν ο περιορισμός μπλοκάρει το άνοιγμα δικτυακής σύνδεσης ή την εγγραφή αρχείου, θα σου ζητήσει έγκριση — δέξου τη για αυτή την εντολή, γιατί το Lighthouse κάνει και τα δύο: βγαίνει στο δίκτυο για να φορτώσει τη σελίδα και γράφει το lh.json. Δώσ’ του την ίδια εντολή, από τον φάκελο όπου έγινε η εγκατάσταση.
./node_modules/.bin/lighthouse http://localhost:3000 --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"Cursor
Το Cursor είναι editor με ενσωματωμένο τερματικό και agent. Άνοιξε το τερματικό του, τρέξε μία φορά την εγκατάσταση, και μετά άφησε τον agent να τρέξει την εντολή στο ίδιο τερματικό. Το ωραίο εδώ είναι ότι μετά μπορείς να του πεις «άνοιξε το lh.json και δείξε μου μόνο τους ελέγχους που απέτυχαν στην προσβασιμότητα» — το αρχείο είναι μέσα στο έργο, ο editor το βλέπει, και ο agent το φιλτράρει χωρίς να ξανατρέξει τίποτα.
./node_modules/.bin/lighthouse http://localhost:3000 --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"Σε όλους τους clients ισχύει το ίδιο μοτίβο: μία εντολή γράφει την αναφορά, ο agent τη διαβάζει, και μετά τη δουλεύεις μαζί του. Δεν χρειάζεται να του μάθεις τι είναι το Lighthouse· χρειάζεται να του δώσεις ένα κέλυφος και έναν φάκελο.
Πού κερδίζει, πού χάνει
Κερδίζει σε τρία σημεία. Πρώτο: δεν σου δίνει γνώμη, σου δίνει ονόματα. Ένας έλεγχος που απέτυχε έχει όνομα, περιγραφή και συχνά σύνδεσμο με τον τρόπο διόρθωσης — άρα ο agent έχει κάτι συγκεκριμένο να δουλέψει, όχι ένα θολό «κάν’ το πιο προσβάσιμο». Δεύτερο: δουλεύει τοπικά και χωρίς οθόνη, άρα μπορεί να τρέξει μέσα σε αυτοματισμό, σε σενάριο ενσωμάτωσης, ή σε περιβάλλον που δεν έχει κάρτα γραφικών. Τρίτο: είναι το ίδιο λογισμικό με το PageSpeed Insights, άρα το σκορ που βγάζεις εσύ είναι το σκορ που βλέπει ο πελάτης.
Χάνει σε ένα σημείο που είναι και το πιο παρεξηγημένο: το σκορ των επιδόσεων δεν είναι σταθερό. Σε ένα αργό μηχάνημα ή σε κοινόχρηστο δίκτυο κινείται με κάθε εκτέλεση. Η ίδια σελίδα μπορεί να δώσει 0,96 τη μία φορά και 0,88 την επόμενη, χωρίς να αλλάξει τίποτα. Αν το νούμερο των επιδόσεων σου χρειάζεται για απόφαση, τρέξε τρεις φορές και πάρε τη διάμεσο — τη μεσαία τιμή, όχι τον μέσο όρο, γιατί ο μέσος όρος τραβιέται από μία άσχημη μέτρηση. Σταθερό παραμένει το σύνολο των ελέγχων και τα ονόματα των αποτυχιών· αυτά δεν αλλάζουν μεταξύ εκτελέσεων. Όποιος κυνηγά το νούμερο και αγνοεί τη λίστα χάνει τον χρόνο του.
Κοιτάξαμε και αλλού, και αξίζει να το πούμε. Κάτω από το Lighthouse, η προσβασιμότητα την ελέγχει μια βιβλιοθήκη που λέγεται axe-core — αυτή είναι η μηχανή, το Lighthouse είναι το περίβλημα. Είναι πίσω από εκατομμύρια λήψεις την εβδομάδα και είναι εξαιρετική. Δοκιμασμένη όμως ως αυτόνομο πρόγραμμα γραμμής εντολών σκάει, γιατί ζητά συγκεκριμένη έκδοση οδηγού για τον Chrome και ο Chrome έχει προχωρήσει παραπέρα. Η σύσταση είναι σαφής: χρησιμοποίησέ την ως βιβλιοθήκη μέσα σε δικό σου σενάριο δοκιμών, όπου κρατάς τις εκδόσεις δεμένες, όχι ως εργαλείο που καλείς στο χέρι. Το Lighthouse δεν έχει αυτό το πρόβλημα, γιατί μιλάει στον Chrome με τον δικό του τρόπο.
Δοκιμή
Τρέξαμε την παρακάτω αλληλουχία από την αρχή, σε καθαρό φάκελο:
mkdir lh && cd lh
npm i lighthouse@13.6.0
export CHROME_PATH="C:/Program Files/Google/Chrome/Application/chrome.exe"
./node_modules/.bin/lighthouse https://example.com --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"
node -e "const r=require('./lh.json');for(const k of ['performance','accessibility','best-practices','seo'])console.log(k,r.categories[k].score)"Η εγκατάσταση πήρε 2 λεπτά και 7 δευτερόλεπτα και άφησε 181 MB σε 99 πακέτα. Η εκτέλεση πήρε 17,5 δευτερόλεπτα και έτρεξε 161 ελέγχους — το εσωτερικό timing του εργαλείου μέτρησε 10,6 δευτερόλεπτα, η διαφορά είναι το άνοιγμα του Chrome.
Το πιο πειστικό κομμάτι ήρθε μετά. Στήσαμε επίτηδες μια σπασμένη σελίδα: εικόνα χωρίς περιγραφή, κουμπί με μόνο εικονίδιο και χωρίς κείμενο, κείμενο με χαμηλή αντίθεση, μικρούς στόχους για το δάχτυλο, και χωρίς κύριο σημείο αναφοράς στη δομή. Το εργαλείο έβγαλε επιδόσεις 0,96 και προσβασιμότητα 0,53, και ονόμασε σωστά και τους πέντε χαμένους ελέγχους: button-name, color-contrast, image-alt, target-size, landmark-one-main. Δεν βρήκε κάτι που δεν του κρύψαμε, και δεν έχασε τίποτα από όσα του κρύψαμε. Αυτό είναι η απάντηση στο «αξίζει;» — ό,τι του έβαλες, το είδε.
Ό,τι δεν δοκιμάστηκε σήμερα το δηλώνουμε: τα βήματα μέσα σε Claude Code, Codex CLI και Cursor είναι η γενική οδός — ο καθένας δίνει κέλυφος στον agent και ο agent διαβάζει το αρχείο. Δοκιμασμένη, μετρημένη και επαναλήψιμη είναι η εντολή του Lighthouse και το περιεχόμενο της αναφοράς.
Τι κοστίζει
Δεν είναι διακομιστής MCP, οπότε δεν φορτώνει σχήμα στο μοντέλο: μηδέν tokens και από τις δύο πλευρές. Το πραγματικό κόστος είναι χρόνος, δίσκος και μία προϋπόθεση.
Μετρημένα σε καθαρό φάκελο: η εγκατάσταση πήρε 2 λεπτά και 7 δευτερόλεπτα και άφησε 181 MB σε 99 πακέτα. Το ίδιο το πακέτο είναι 18,5 MB με 982 αρχεία και 22 άμεσες εξαρτήσεις. Η εκτέλεση κρατά 17,5 δευτερόλεπτα και τρέχει 161 ελέγχους.
Η προϋπόθεση που δεν λένε τα npm: θέλει Chrome εγκατεστημένο. Χωρίς αυτό δεν ανοίγει σελίδα, όσο σωστά κι αν είναι όλα τα άλλα. Και θέλει Node 22.19 ή νεότερο — από το πεδίο engines του πακέτου, όχι από το README.
Σε χρήματα: μηδέν. Δεν στέλνει τη σελίδα σε κανέναν, δεν θέλει λογαριασμό, δεν θέλει κλειδί. Η δαπάνη είναι ο χρόνος του ανθρώπου που θα διαβάσει τα τέσσερα σκορ και θα αποφασίσει τι διορθώνει πρώτο — και αυτό είναι το μόνο που δεν μπορεί να μετρήσει το εργαλείο.
Ετυμηγορία
Ναι, αξίζει, με έναν όρο: διάβαζε τη λίστα, όχι το νούμερο. Το Lighthouse είναι το πιο φθηνό δεύτερο ζευγάρι μάτια που μπορείς να βάλεις πάνω σε μια σελίδα — δωρεάν, τοπικό, χωρίς λογαριασμό, και με ονόματα για κάθε τι που πάει στραβά. Βάλ’ το στη ροή της παράδοσης: τρέξε το πριν στείλεις τη σελίδα στον πελάτη, κοίτα τις αποτυχίες στην προσβασιμότητα, διόρθωσέ τις, τρέξε ξανά. Τις επιδόσεις άφησέ τις για όταν έχεις τρεις μετρήσεις, αλλιώς είναι θόρυβος.
Και μία σημείωση για τη στήλη: αυτό είναι εργαλείο σχεδίου, όχι ασφάλειας. Μετρά την εμπειρία που παραδίδεις — αντίθεση, ονόματα, βάρος, δομή. Αν το κρατήσεις για ό,τι πραγματικά κάνει, δεν θα σε απογοητεύσει ποτέ.
Πηγές:
https://github.com/GoogleChrome/lighthouse
https://developer.chrome.com/docs/lighthouse/overview
https://github.com/GoogleChrome/lighthouse/releases/tag/v13.6.0
Εγκατάσταση
4 ΒΗΜΑΤΑ- mkdir lh
- cd lh
- npm i lighthouse@13.6.0
- npx lighthouse https://example.com --output=json --output-path=./lh.json --chrome-flags="--headless=new --no-sandbox --disable-gpu"