diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index 90b60c846973c323170389746792f99d80c29383..b3a81350136b149f4935d96640c25bf2daebefa2 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -61,9 +61,31 @@ function taille_du_cache() {
 // ici on se contente de noter la date de mise a jour dans les metas
 // http://doc.spip.org/@suivre_invalideur
 function suivre_invalideur($cond, $modif=true) {
-	if ($modif) {
-		ecrire_meta('derniere_modif', time());
+	if (!$modif)
+		return;
+
+	// determiner l'objet modifie : forum, article, etc
+	if (preg_match(',id_([a-z]+),', $cond, $r))
+		$objet = $r[1];
+	// cas particulier des signatures
+	else if (strpos($cond, 'varia/pet'))
+		$objet = 'signature';
+
+	// stocker la date_modif_$objet (ne sert a rien pour le moment)
+	if (isset($objet))
+		ecrire_meta('derniere_modif_'.$objet, time());
+
+	// si $derniere_modif_invalide est un array('forum', 'signature')
+	// n'affecter la meta que si un de ces objets est modifie
+	if (is_array($GLOBALS['derniere_modif_invalide'])) {
+		if (in_array($objet, $GLOBALS['derniere_modif_invalide']))
+			ecrire_meta('derniere_modif', time());
 	}
+	// sinon, cas standard, toujours affecter la meta
+	else
+		ecrire_meta('derniere_modif', time());
+
+
 }
 
 
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index ccf67bddcd8b4f42613f83d607168c42d5095fe4..a3cfce27222c0e8f60461dbecf7309c808390baa 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -107,7 +107,9 @@ function cache_valide(&$page, $date) {
 	if (!isset($page['entetes']['X-Spip-Statique']) OR $page['entetes']['X-Spip-Statique'] !== 'oui') {
 
 		// Cache invalide par la meta 'derniere_modif'
-		if ($GLOBALS['derniere_modif_invalide']
+		// sauf pour les bots, qui utilisent toujours le cache
+		if (!_IS_BOT
+		AND $GLOBALS['derniere_modif_invalide']
 		AND $date < $GLOBALS['meta']['derniere_modif'])
 			return 1;