diff --git a/lisp/org-element.el b/lisp/org-element.el
index 80868b0..a34a739 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -1844,10 +1844,12 @@ Assume point is at the beginning of the item."
 	   (contents-begin
 	    (progn
 	      (goto-char
-	       ;; Ignore tags in un-ordered lists: they are just
-	       ;; a part of item's body.
+	       ;; If the struct does not recognize this as a descriptive
+	       ;; item, we need to keep the "term ::" text in the
+	       ;; body.  Otherwise, it would be extracted into the
+	       ;; :tag property and potentially ignored during export.
 	       (if (and (match-beginning 4)
-			(string-match-p "[.)]" bullet))
+			(not (nth 5 (assq begin struct))))
 		   (match-beginning 4)
 		 (match-end 0)))
 	      (skip-chars-forward " \r\t\n" end)
@@ -2070,6 +2072,14 @@ If this warning appears regularly, please report the warning text to Org mode ma
 	   (end (progn (goto-char contents-end)
 		       (skip-chars-forward " \r\t\n" limit)
 		       (if (= (point) limit) limit (line-beginning-position)))))
+      ;; When type is not descriptive, ignore tags in struct.
+      (unless (eq type 'descriptive)
+	(let* ((item (assq contents-begin struct))
+	       (ind (nth 1 item)))
+	  (mapc (lambda (elt)
+		  (when (= (nth 1 elt) ind)
+		    (setf (nth 5 elt) nil)))
+		struct)))
       ;; Return value.
       (org-element-create
        'plain-list
